一番小さな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アプリケーションを成長させていってみましょう。

関連情報