Perl で、長い URL を短縮コードに変え、短縮 URL を開くと元のページへ転送する URL 短縮サービスを作る全12回の連載です。Mojolicious::Lite で Hello World を出すところから始め、入力フォーム、短縮コードの生成、SQLite への保存、転送、入力のバリデーションと1回に1つずつ足し、第12回で画面を整えて Moo のクラスに分けます。
各回は前の回のコードに足していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。
対象は、Perl の変数・サブルーチン・リファレンスが分かり、Web アプリを作るのは初めての方です。第12回で Moo を使うので、Moo が初めてなら前シリーズ「Mooで覚えるオブジェクト指向プログラミング」の目次(このページの最後にリンクがあります)も合わせて読んでください。依存モジュールは cpanm Mojolicious DBI DBD::SQLite Data::Validate::URI Moo で入ります(Digest::SHA はコアモジュールです)。
どこから読むか
- 第1回 — Web アプリを作るのが初めてなら。Mojolicious::Lite を入れて動かし、第2回・第3回でフォームから URL を受け取る
- 第5回 — Web の画面は書けて、データベースが初めてなら。SQLite に接続し、第6回でテーブルを作り、第7回で登録する
- 第8回 — URL 短縮の仕組みそのものを知りたいなら。短縮コードを受け取り、第9回で元の URL を引き、第10回で転送する
- 第11回 — 動くものはあり、公開前に安全を確かめたいなら。転送先にしてよい URL を http と https に絞る
困りごとから探す
Perl で Web アプリを動かしたことがない
短縮 URL の仕組みが分からない
- 第4回 — 長い URL から、短いコードをどう作るのか
- 第8回 — 無数にある短縮コードを、ルート1つでどう受けるのか
- 第10回 — 短縮 URL を開くと、なぜ元のページへ飛ぶのか(301 と 302 の違い)
データが残らない・データベースが初めて
入力をそのまま信じていて危ない
動くけれど、1ファイルに全部が詰まっている
- 第12回 — 見た目を整え、データベースと短縮の処理を Moo のクラスに分けたい
全話一覧
- 第1回 友人に「長いURLを短くしたい」と頼まれた。まずPerlで画面に文字を出す【Mojolicious::Lite】
- 第2回 URLを入力する場所がまだない。テンプレートでフォームを表示する【GETルーティング】
- 第3回 「短縮!」を押すとPage not foundになる。送られたURLをサーバーで受け取る【POSTルーティング】
- 第4回 長いURLから、毎回同じ短いコードを作りたい。ハッシュ値の先頭6文字を使う【Digest::SHA】
- 第5回 サーバーを止めると、登録したURLが全部消える。保存先にSQLiteのファイルを用意する【DBI】
- 第6回 データベースにつながったが、何を保存するか決まっていない。4つのカラムでテーブルを作る【CREATE TABLE】
- 第7回 入力をそのままSQLに埋め込むと、1行の入力でテーブルが空になる。値を分けて渡して登録する【プレースホルダ】
- 第8回 短縮コードは登録のたびに増え、ルートを1つずつ書けない。パスの一部を変数で受ける【動的ルーティング】
- 第9回 /abc123は受け取れたが、どのURLの短縮か分からない。データベースから引き、無ければ404を返す【SELECT】
- 第10回 元のURLは引けたのに、画面に出すだけで飛ばない。ブラウザを元のページへ転送する【302リダイレクト】
- 第11回 javascript:alert(1)まで短縮URLとして登録できてしまう。httpとhttps以外を断る【入力バリデーション】
- 第12回 動くけれど見た目は素っ気なく、app.plに全部が詰まっている。画面を整え、Mooのクラスに分ける【仕上げ】
