Featured image of post 第1回-友人からの依頼 — URL短縮サポーターを作ってみよう

第1回-友人からの依頼 — URL短縮サポーターを作ってみよう

友人から「長いURLを短くしたい」と相談されたことをきっかけに、Mojolicious::LiteでURL短縮サービスを作り始めます。morboで開発サーバーを起動しHello Worldを表示するまでを解説。

@nqounetです。

この連載「URL短縮サポーターを作ってみよう」では、Perlを使って実用的なURL短縮サービスを一から作っていきます。

はじめに

シリーズの概要と想定読者

この連載は、Webアプリケーション開発の経験がない方でも、Perlで動くURL短縮サービスを作れるようになることを目指しています。

想定読者は以下のとおりです。

  • Perl入学式を卒業した、または同程度のPerlの基礎知識がある
  • 「Mooで覚えるオブジェクト指向プログラミング」シリーズ(全12回)を読了している
  • Webアプリケーション開発は初めて

前提知識

この連載では、Perlの基本的な文法(変数、サブルーチン、リファレンスなど)を理解していることを前提にしています。もしまだ学習していない場合は、まずPerl入学式の資料で基礎を固めてから戻ってきてください。

本記事のゴール

第1回である今回は、以下を達成することを目標とします。

  • URL短縮サービスとは何かを理解する
  • Mojolicious::Liteをインストールする
  • morboで開発サーバーを起動してHello Worldを表示する

友人からの依頼

タカシさんの悩み

ある日、友人のタカシさんからこんな相談を受けました。

「最近SNSで記事をシェアしたいんだけど、URLがすごく長くて困ってるんだよね。文字数制限にひっかかるし、見た目もなんか格好悪いし…。短くできないかな?」

タカシさんが見せてくれたURLは、たしかに100文字を超えるような長いものでした。UTMパラメータやトラッキング情報が付いたURLは、特に長くなりがちです。

URL短縮サービスとは

URL短縮サービスとは、長いURLを短いURLに変換し、その短いURLにアクセスすると元の長いURLにリダイレクトしてくれるサービスです。

仕組みは意外とシンプルです。

  • 元のURLをデータベースに保存する
  • 短い識別子(IDやハッシュ値)を発行する
  • 短縮URL(例: https://example.com/abc123)にアクセスすると、保存してある元のURLにリダイレクトする

有名なサービスとしては、Bitly(bit.ly)やTinyURL(tinyurl.com)があります。

「Perlで作ってあげよう!」

「それ、Perlで作れるよ。しかも、そこまで難しくない」

そう答えた瞬間、タカシさんの目が輝きました。

「えっ、本当に?ぜひ教えて!」

というわけで、この連載ではタカシさんのためにURL短縮サービスを作っていくことにしました。完成形は以下のような機能を持つWebアプリケーションです。

  • URLを入力するとその短縮URLを発行する
  • 短縮URLにアクセスすると元のURLにリダイレクトする
  • 発行した短縮URLの一覧を確認できる

では、さっそく開発を始めましょう。

Mojolicious::Liteを使ってみよう

なぜMojolicious::Liteなのか

PerlでWebアプリケーションを作るためのフレームワークはいくつかありますが、今回はMojolicious::Liteを使います。

Mojolicious::Liteを選んだ理由は以下のとおりです。

  • 依存関係がゼロ(コアPerlモジュール以外に何も必要ない)
  • 単一ファイルでWebアプリケーションが完結する
  • 開発サーバー(morbo)が標準で付属し、ファイル変更を自動検知してリロードしてくれる

これらの特徴により、環境構築でつまずくことなく、すぐにWebアプリケーションの開発を始められます。

Mojoliciousの詳細については以下の記事も参考にしてください。

cpanmでインストールする

ターミナルを開いて、以下のコマンドを実行してください。

1
cpanm Mojolicious

インストールが完了したら、バージョンを確認してみましょう。

1
mojo version

以下のような出力が表示されれば成功です(バージョン番号は異なる場合があります)。

1
2
3
4
CORE
  Perl        (v5.38.0, linux)
  Mojolicious (9.38, Waffle)
  ...

Hello Worldを表示しよう

最初のコードを書く

いよいよコードを書いていきます。任意のディレクトリにapp.plというファイルを作成し、以下の内容を記述してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/usr/bin/env perl
# app.pl
# Perl: 5.20以上(サブルーチンシグネチャ使用)
# 依存: Mojolicious
use Mojolicious::Lite -signatures;

get '/' => sub ($c) {
    $c->render(text => 'Hello World!');
};

app->start;

コードの各行を簡単に解説します。

  • use Mojolicious::Lite -signatures;: Mojolicious::Liteを読み込み、サブルーチンシグネチャを有効にする
  • get '/' => sub ($c) { ... };: ルートURL(/)へのGETリクエストを処理するルートを定義する。$cはコントローラーオブジェクト
  • $c->render(text => 'Hello World!');: レスポンスとして「Hello World!」というテキストを返す
  • app->start;: アプリケーションを起動する

たったこれだけで、Webアプリケーションの基本形が完成です。

Perlでは、引数を受け取る場合、通常は sub { my $c = shift; ... } のように書きます。ですが、Perl 5.20で実験的にサブルーチンシグネチャが導入され、Mojolicious::Lite(Mojo::Baseを継承しているクラス)では-signaturesを指定することで有効化でき、 sub ($c) { ... };のように引数を受け取ることができるようになります。

morboで起動する

作成したapp.plを開発サーバーで起動してみましょう。ターミナルで以下のコマンドを実行してください。

1
morbo app.pl

以下のような出力が表示されます。

1
Web application available at http://127.0.0.1:3000

この状態でサーバーが起動しています。morboは開発用サーバーで、ファイルを編集して保存すると自動的にアプリケーションをリロードしてくれる便利な機能があります。

ブラウザで確認する

ブラウザを開いて、http://localhost:3000(またはhttp://127.0.0.1:3000)にアクセスしてみましょう。

画面に「Hello World!」と表示されれば成功です。

おめでとうございます! これがあなたの最初のPerlによるWebアプリケーションです。

まとめ

今回学んだこと

第1回では、以下のことを学びました。

  • URL短縮サービスの仕組みと、この連載で作るもののイメージ
  • Mojolicious::Liteの特徴(依存関係ゼロ、単一ファイルで完結)
  • cpanmを使ったMojoliciousのインストール方法
  • morboで開発サーバーを起動し、Hello Worldを表示する方法

次回予告

次回は「URLを入力するフォームを作る」をテーマに、HTMLフォームからURLを受け取る機能を実装していきます。タカシさんが実際にURLを入力できるようになる第一歩です。お楽しみに。

comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。