一番小さなMojoliciousアプリケーション
Mojoliciousのインストールが完了したので、さっそく小さなWebアプリケーションを作成してみましょう。まず最初に、webapp.plというファイルを作成してください。このファイルの中に以下のコードを書いてみてください。
use Mojolicious::Lite; get '/' => sub { my $self = shift; $self->render(text => 'Hello World'); }; app->start;
おなじみハローワールドアプリケーションです。
アプリケーションの実行
まずこのWebアプリケーションを実行してみましょう。アプリケーションを実行するにはmorboコマンドを使用します。
morbo webapp.pl
すると、次のように表示されると思います。
[Tue Mar 25 14:08:11 2014] [info] Listening at "http://*:3000". Server available at http://127.0.0.1:3000.
これは「http://127.0.0.1:3000」でサーバーが利用できますという意味です。さっそく以下のURLにアクセスしてみましょう。
http://127.0.0.1:3000
「Hello World」と表示されましたか。表示されたら成功です。これで、あなたも、Webアプリケーションエンジニアの仲間入りです。だって、Webアプリケーションを作っちゃったんですから。
停止する場合は「Ctrl + c」を押してください。
Windowsでの問題点
Windowsの場合は「Ctrl + c」の割り込みが認識されにくいようです。何回も「Ctrl + c」を押していると止まります。これは少し不便ですので、startコマンドを使って別ウインドウで立ち上げるのがよいでしょう。別ウインドウを立ち上げれば「×」ボタンで、morboを停止できます。
start morbo webapp.pl
morboコマンドの解説
morboコマンドは、Mojoliciousをインストールしたときに、一緒にインストールされたものです。morboコマンドは、Webアプリケーションを読み込んで、開発用のサーバーを起動します。デフォルトでは3000番ポートを使って待機します。そしてローカルホスト(127.0.0.1)の3000番ポートへのアクセスがあると、応答を返します。
morboは開発用の便利なサーバーで、ファイルを変更すると自動的に検知してくれます。つまり、morboを再起動しなくっても、ファイルを変更するだけで大丈夫ということです。このために、開発効率がとてもよいです。
morboは開発サーバーですが、本番用のサーバーはhypnotoadコマンドで立ち上げることができます。hypnotoadコマンドは、本番環境でアプリケーションを起動する方法を解説するときに解説したいと思います。
アプリケーションの解説
ではこれからアプリケーションの意味を解説したいと思います。
# Mojolicious::Liteの読み込み use Mojolicious::Lite; # ルーティングの設定 get '/' => sub { my $self = shift; # 内容の描画 $self->render(text => 'Hello World'); }; # Mojoliciousアプリケーションの開始 app->start;
Mojolicious::Liteの読み込み
Mojoliciousには、Mojolicious::Liteというモジュールが含まれています。Mojolicious::Liteを使えば、ファイルひとつのWebアプリケーションを作成することができます。
# Mojolicious::Liteの読み込み use Mojolicious::Lite;
useはPerlにおいて、モジュールを読み込むためのものです。「use Mojolicious::Lite」と記述することで、Mojolicious::Liteモジュールを読み込むことができます。
Mojolicious::Liteを読み込めば、get関数やapp関数などいくつかの関数を利用することができるようになります。またstrictとwarningsが自動的に有効になる効果があります。Mojolicious::Liteを利用するときは「use strict」と「use warnings」を記述する必要がありません。
ルーティングの記述
まずWebアプリケーションを記述するために、最初にルーティングを記述します。
# ルーティングの設定 get '/' => sub { my $self = shift; ... };
get関数を使用すればルーティングを記述することができます。get関数の第一引数は、URLのパターンです。たとえば/や/infoなどを記述します。最後の引数には、実行する処理を記述します。これはサブルーチンのリファレンスとして記述します。
get(URLのパターン, 実行する処理を記述するサブルーチンのリファレンス)
この記述を行うとURLのパターンにマッチした場合に、サブルーチンのリファレンスの中に記述された処理が実行されます。
Perlでは、関数の括弧を省略することができます。またカンマ「,」は「=>」を使って記述することができます。それで上記は以下と同じ意味になります。
get URLのパターン => 実行する処理を記述するサブルーチンのリファレンス
一見すると不思議な記述に見えますが、実体は単なる関数です。サンプルコードのように、省略記法で書くことが多いので覚えてしまいましょう。
コントローラーオブジェクトの受け取り
次に実行する処理の内容を見ていきましょう。まずサブルーチンの第一引数として、コントローラーオブジェクトを取得しましょう。コントローラーオブジェクトとは、HTTPリクエスト毎に生成されるオブジェクトで、このオブジェクトを使って、さまざまな処理を実行することができます。実体はMojolicious::Controllerオブジェクトです。
get '/' => sub { # コントローラーオブジェクトの受けとり my $self = shift; $self->render(text => 'Hello World'); };
shiftってなんだろうと、最初見た方は思うと思います。Perlではshift関数を使うと、サブルーチンの第一引数を取得することができます。ですから$selfに代入されるのは、サブルーチンの第一引数です。この第一引数にコントローラーオブジェクトが渡されてきます。
この後の解説では、このサブルーチンの部分をコントローラーと呼ぶことがあるので尾母いておいてください。またコントローラーオブジェクトは$cのように表現することがありますので、覚えておいてください。
$c->render(...);
テキストの描画
次にテキストの描画の部分を見てみましょう。
get '/' => sub { my $self = shift; # テキストの描画 $self->render(text => 'Hello World'); };
テキストを描画するには、renderメソッドを使用して第一引数にtext、第二引数に描画したい内容を指定します。renderメソッドはMojolicious::Controllerクラスのメソッドで、内容を描画するときに使用します。
この記述によって、ブラウザ上に「Hello World」と表示されます。
アプリケーションの開始
最後に忘れてはならない記述が、アプリケーションの開始の記述です。
# Mojoliciousアプリケーションの開始 app->start;
この記述を行うことで、サーバーが起動して、HTTPリクエストを受け付けるようになります。
これで、一番小さなWebアプリケーションの解説は終わりです。次回からは、この小さなWebアプリケーションを成長させていってみましょう。