PerlならサンプルコードPerl入門

2014-03-25

一番小さなMojoliciousアプリケーション

  1. Perl
  2. 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アプリケーションを成長させていってみましょう。

ituki akimotoituki akimoto 2015/03/24 17:59 「WindowsへのMojoliciousのインストール」
「一番小さなWebアプリケーション」
の通りに行い、
morboでサンプルアプリのコードを実行させたところ、
下記のエラーが出てしまいます。
C:\>morbo webapp.pl
Server available at http://127.0.0.1:3000
webapp.pl: No such file or directory at C:/Perl64/site/lib/Mojo/Server.pm line 47.
対処法をご教示頂けないでしょうか?

perlcodesampleperlcodesample 2015/03/24 21:30  ファイル名が間違っているだけだと思いますよ。指定したファイル名が正しいか一度確認してもらえますか。

ituki akimotoituki akimoto 2015/03/25 02:00 解決出来ました。
簡単な所で質問してしまって申し訳ございません。
有難うございました!

tanabe-13tanabe-13 2017/04/17 18:03 Windows上のmorboも,「ファイルを変更すると自動的に検知してくれま」すでしょうか? Strawberry Perl で,CPAN から Mojolicious を持ってきて動かしています.簡単なサンプルプログラムは動いているのですが,morbo を再起動しないと,スクリプトの書き換えを認識してくれないようなのです.何か設定があるのかしらん? cygwinだとちゃんと検知してくれるのですが....

perlcodesampleperlcodesample 2017/04/17 20:46 a.plというファイルを作ってmorbo a.plで試してみたのですが、いちおう検知はしますが、検知の速度がものすごく遅いですね。

matsumuramatsumura 2017/06/20 14:40 Amazonで「業務に役立つPerl」を買いました。Perlはずっと書いてきましたが、改めて見直したいと思っています。目次にMojoliciousがあったのですが知らなかったのでこのページのHello Worldをやってみると動きました。CentOSにsshを2つ接続して一つは編集用にすると変更検知がリアルタイムで確認できました。面白いので今後Mojoliciousを勉強してみようと思います。最近はGO言語をやろうと思っていましたが、Mojoliciousはデーモン化をサポートしているようでいいですね。

perlcodesampleperlcodesample 2017/06/20 23:06 matsumuraさん

「業務に役立つPerl」ご購入ありがとうございます。

Mojoliciousの開発サーバーは、自動的にファイルの変更を検知して、再読み込みしてくれるのが、便利で、興味深いです。

Mojoliciousの本番サーバー「プリフォークサーバー+非同期IO+ホットデプロイメント」をサポートしていて、簡単に使えて、スケーラビリティもあり、便利です。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証