Hatena::Groupsubtech

ういはるかぜの化学

Tuesday, January 31, 2012

Perl (Mojolicious::Lite)でちょっとしたCGIを作るメモ 18:27 Perl (Mojolicious::Lite)でちょっとしたCGIを作るメモ - ういはるかぜの化学 を含むブックマーク はてなブックマーク - Perl (Mojolicious::Lite)でちょっとしたCGIを作るメモ - ういはるかぜの化学

Perlで真の意味でちょっとしたCGIアプリケーションを作ることがたまーにあります(CSVデータを表示するだけ的な)。どうせちょっとしたものですしCGI.pmとかで頑張ってもいいのですがそれもめんどくさいのでMojolicious::Liteを使ってみたのでそのメモです。

まずは手元の環境でcpanminusをダウンロードし、アプリケーションのディレクトリ app1 を作成して、そこにMojoliciousをインストールします。

CGIを持っていく先はだいたいどんなモジュールが入っているか謎ですし、システムワイドなモジュールのインストールができなかったりしますのでextlibに突っ込むのが面倒なくていいです。

perlbrewでインストールしたばかりのクリーンなPerl 5.12.4な環境なのでだいたい以下の手順で動く気がします。

手順

とりあえずまずはcpanmをダウンロードしてきて、アプリケーションのディレクトリ(ここではapp1)のextlibにMojoliciousをインストールします。

% curl -LO http://xrl.us/cpanm
% chmod +x cpanm
% mkdir app1
% ./cpanm -L app1/extlib Mojolicious
--> Working on Mojolicious
Fetching http://search.cpan.org/CPAN/authors/id/S/SR/SRI/Mojolicious-2.45.tar.gz ... OK
Configuring Mojolicious-2.45 ... OK
Building and testing Mojolicious-2.45 ... OK
Successfully installed Mojolicious-2.45
1 distribution installed

Mojolicious::Liteのアプリケーションを生成します。(大した内容ではないけど)

% cd app1
% perl -Iextlib/lib/perl5/ extlib/bin/mojo generate lite_app
  [exist] /home/user/tmp/app1
  [write] /home/user/tmp/app1/myapp.pl
  [chmod] myapp.pl 744

このままだとextlibを参照しないのでmyapp.plをエディタで開いて use Mojolicious::Lite; の上あたりに以下の行を追加します。

use File::Spec;
use File::Basename;
use lib File::Spec->catdir(dirname(__FILE__), 'extlib', 'lib', 'perl5');

書き換えたら起動してみます。

% ./myapp.pl daemon
[Thu Jan 19 13:22:00 2012] [info] Server listening (http://*:3000)
Server available at http://127.0.0.1:3000.

起動してサーバーのポート3000にアクセスしてページが出てくればできあがりです。ちなみに /perldoc にアクセスするとリファレンスを読めます。

で、あとはチュートリアルを見つつ適当に実装します。実際にCGIとして使うにはmyapp.plを名前を変えたりかえなかったりして普通にApacheなどから起動するように設定すればCGIとして動きます。実際のサーバーに設置するときにも丸ごと持っていけばよいでしょう。かんたん。

Plackを使う

./myapp.pl daemon で起動するとtemplatesディレクトリに書いたテンプレートの読み直しが行われなくて面倒だったのでPlackを使うことに。なんとかする方法がありそうな気もするのだけど。

% cd ..
% ./cpanm -L app1/extlib Plack
(略)
Building and testing Plack-0.9985 ... OK
Successfully installed Plack-0.9985
34 distributions installed
% cd app1
% perl -Iextlib/lib/perl5/ extlib/bin/plackup myapp.pl -R templates
Watching templates ./lib myapp.pl for file updates.
HTTP::Server::PSGI: Accepting connections at http://0:5000/

感想

Mojolicious::Liteはインストールも実行も実装もかんたんです。モジュールのインストールがMojoliciousだけなのでだいぶスッキリ。

ドキュメントもそれなりにあるのもいいですね。

でもデータベースを使う場合とかもうちょっとまともなやつならAmon2とかのほうがいいのかも。

perlcodesampleperlcodesample2012/02/06 19:47リロードは

morbo app1

でできます。

>でもデータベースを使う場合とかもうちょっとまともなやつならAmon2とかのほうがいいのかも。

これはちょっと誤解を招くかも。Mojolicious::Liteは小規模開発、Mojoliciousは大規模開発が可能なように設計されてます。

mayukimayuki2012/02/06 20:24おお、ありがとうございます。ちゃんと方法があったのですね。

Amon2云々は最初Amon2で書いててMojolicious::Liteにした経緯があったので、Mojoliciousが大規模に向いてないとは思ってなかったのですが確かに誤解を招きますね…。後で修正しておきます。

トラックバック - http://subtech.g.hatena.ne.jp/mayuki/20120131