@nqounetです。

第3回では、ウェブアプリの書く上で便利な仕組みであるルーティングを解説しました。

サンプルの元ネタはMojoliciousのドキュメント日本語版のMojolicious::Liteにあります。あるいは、本家のチュートリアルです。

というわけで、第4回はパラメータを読み取る方法について書いてみたいと思います。

パラメータ

CGIの時代からそうですが、何故ウェブアプリが必要か、というと、フォームに入力されたものを処理したい、というのが一番大きいのではないかと思います。

今でもシンプルなウェブアプリとして、メールフォームがありますね。

フォームの情報を取得するには、本来はブラウザがフォームをどのように送信してくるのかを知っておく必要がありますが、そういう部分はフレームワークがうまくやってくれます。

私たちが必要なのは、フォームの部品の名前だけです。

サンプルコード全体

Mojoliciousのバージョンは5.75で確認しています。

ファイル名はなんでも良いですが、ひとまずmyapp.plと考えてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env perl
use Mojolicious::Lite;

get '/' => sub {
my $c = shift;
$c->redirect_to('/foo?user=nqounet');
};

get '/foo' => sub {
my $c = shift;
my $user = $c->param('user');
$c->render(text => qq{Hello $user!});
};

app->start;

Line 1 - 2

1
2
#!/usr/bin/env perl
use Mojolicious::Lite;

Mojolicious::Liteを使うと、フレームワークの機能が使えるようになるだけでなく、モダンなPerlで書くことができるようになります。

Line 4 - 7

1
2
3
4
get '/' => sub {
my $c = shift;
$c->redirect_to('/foo?user=nqounet');
};

アプリケーションのルート(‘/‘のこと)にアクセスすると、subの中身が実行されます。

コントローラーのredirect_toメソッドは、HTTPのリダイレクトのレスポンス(HTTP 302)を返します。

何処へリダイレクトするかについては、引数で指定します。

今の場合は、‘/foo?user=nqounet’が、新しいURLになります。

第1回でもこのような手法を使っていますが、アプリケーションのルートにアクセスすれば、そのサンプルのメイン部分にアクセスできるようにしておくとアドレスバーへの入力が楽で良いと思います。

Line 9 - 13

1
2
3
4
5
get '/foo' => sub {
my $c = shift;
my $user = $c->param('user');
$c->render(text => qq{Hello $user!});
};

ここが今回のメインです。

コントローラーのparamメソッドは、フォームなどに入力された値を取得するメソッドです。

引数にフォームの部品の名前を渡すと、その部品の値を返します。

今の場合は、‘user’が引数なので、フォームのuserという名前の部品の値を返します。

今回はフォームには入力していませんが、リダイレクトして、フォームから入力したのと同じようにアクセスする形になっています。

さて、値の取得と同時に代入しているので、$userにはuserの値が代入されています。

そして、次の行でrenderメソッドによって文字列を出力します。

その文字列に$userが含まれているので、このサンプルでは結果的にフォームのuserの値が画面に出力されることになります。

なお、qq{…}というのはダブルクォーテーションの別の書き方です。

Perlでは、ダブルクォーテーションの中では変数が展開されますのでこのように書くことができます。

また、シングルクォーテーションの中では逆に変数が展開されません。

シングルクォーテーションも別の書き方ができます。

これまで普通に書いてきましたが、q{…}という書き方がそれです。

書き方は好みの問題で、特に重要なメリットはありません。ダブルクォーテーションとシングルクォーテーションの書き換えが簡単になるとか、クォーテーションマークのエスケープが不要になるという程度のメリットは有りますが、それほど重要ではありません。

好きなように書くのが良いと思います。

さて、アプリケーションのルートからリダイレクトしてくると、userにはnqounetという文字が入力されているので、出力はHello nqounet!となります。

Line 15

1
app->start;

最後のお約束です。

書いてなかったらどうなるのか、興味をもった方は試してみてください。

大丈夫です。壊れたりはしませんから。

多機能だけど必要なところだけ使えばOK

パラメータを扱えると、いよいよウェブアプリっぽい感じになってきましたね。

せっかくパラメータを扱えるようになったので、チュートリアルからは離れますが、次回はフォームを作ってみたいと思います。

皆さんも美味しいところだけをうまく使ってサクッとウェブアプリを作ってみましょう。

ところで、今月末(2015年2月28日)の土曜日にPerl入学式の第6回(今期の最終回)を開催します。

内容としては、何かしらのウェブアプリ(予定では1行掲示板)を作成します。

大阪の講師は私が担当する予定です。

あなたの知らないPerlを一部お見せしますので、是非ご参加ください。

あなたのお申し込みをお待ちしております。