八王子 CPANモジュールコレクション 2013 秋
タイトルはテキトーです。みなさんどうも、一見さんにはtwitterアカウントの読み方がわからないytnobodyです。ちなみに読み方は、この人ならたぶんしってるんじゃないでしょうか。お好きなように読んでください。
まこぴーファンの皆様へお詫び
全国およそ200万人のまこぴーファンのみなすぁーん!大変もうしわけございませんが、まこぴー氏お取り込み中につき、今回はワタクシめが執筆担当を代行いたします。
ファンの皆様におかれましては、これに懲りず、気長にまこぴー氏の登場をお待ちいただけますと幸いです。
CPANモジュールコレクション
冒頭にも書きましたが、タイトルはテキトーです。ちょっとだけパリコレに肖ってみようとしただけです。
さて、要するに今回の記事は2013年秋現在において、とってもよく使われている(と僕が思っている)CPANモジュールをごく簡単に紹介していく、というものです。まとめ記事みたいなもんですね。たぶんそのうち(12時間以内くらいに)もっとちゃんとした記事をきっとPerlのすごい人が書いてくれると思いますが、なにか書かないとまたアイコンを変更する羽目になるので、とにかく紹介していきます。
Perlをインストールするところから - perl-build (Perl::Build)
指定したバージョンのperlを、指定した場所にインストールしてくれるツールです。使い方はこんな感じ。
% curl https://raw.github.com/tokuhirom/Perl-Build/master/perl-build | perl - 5.16.2 /opt/perl-5.16/
なお最近では、(今やCPANモジュールではなくなってしまいましたが)plenvというツールを使うことで、かなり容易にPerl環境の構築を行うことができるようになりました。
CPANモジュールをインストールするなら - cpanm (App::cpanminus)
いまどきはcpanコマンドやcpan shellをつかってモジュールをインストールする必要がすっかりなくなってしまい、代わりにこのcpanmを使ってインストールするケースがほとんどになりました。
導入方法は簡単。
curl -LOk http://xrl.us/cpanm && chmod +x cpanm
あとはパスの通ったディレクトリに置くといいでしょう。
もしくは、plenvをお使いの場合はもっと楽で、
plenv install-cpanm
これで導入完了。すばらしいですね。
そして使い方も簡単。インストールしたいモジュール名を指定するだけ。すごい。
cpanm Some::Module
現代的なWebAppの基礎 - Plack
かつてならば「PerlといえばCGI」だったりしたものですが、今や時代はPSGI。今時Perlでwebappを書くなら、PSGIのリファレンス実装であるPlackを使うケースがほとんどでしょう。
たとえば常に 'Hello, moznion!' をかえすwebappは PSGIでは以下のようになります。
sub { [200, [], ['Hello, moznion!']] };
これを適当な名前(例えばfoo.psgi)で保存しておき、Plackに同梱されているplackupコマンドを使って以下のように実行すると http://hachiojipm.github.io:5000/ にアクセス出来るようになり、Hello, moznion! と返ってきます。
plackup foo.psgi
ちなみにwebappを終了する場合は Ctrl+C です。
テストを書くならこれ - Test::More
今の時代もテストについてはそれほど大きく変化しておらず、Test::Moreを使ったやり方が主流です。 それは、このモジュールがわずかなな機能しか提供しないにもかかわらず、それで必要十分であることの証左であるといえます。
もちろん、Test::Moreは必要最低限の機能しか提供していませんので、必要に応じて追加のモジュールを利用すればよいのです。 また、機能が少ない分、動作が高速である点も見逃せません。
超軽量なクラスビルダ - Class::Accessor::Lite
アクセサメソッドの作成(Read Only / Read Write)とnewメソッドの実装省略ができるようになります。 同様のモジュールには Class::Accessor::Fast が存在しますが、Class::Accessor::Liteのほうが高速であり、継承をする必要がない点において優れていると僕は思います。
例えばドーナツ袋を表すクラスは以下のように定義できます。
package Doughnut::Bag;
use strict;
use Class::Accessor::Lite (
new => 1,
ro => [qw[ flavor ]],
rw => [qw[ net ]],
);
1;
実際にこのクラスを使う場合は、
my $bag = Doughnut::Bag->new(flavor => 'Chocolate', net => 10);
のようにできます。
割と本気だけど爆速なクラスビルダ - Mouse
こちらもクラスビルダですが、単純なアクセサ作成に止まらず、デフォルト値や型チェック、Roleなどに対応しており、高機能です。にもかかわらず、速度面においても十分すぎるほどのパフォーマンスを実現しています。また、同様のモジュールにMooなどがあり、海外ではそちらの方が人気がある様ですが、細かい面で仕様に違いがあります。
こちらもドーナツ袋を表すクラスを例に取ると、
package Doughnut::Bag;
use Mouse;
has flavor => ( is => 'ro', isa => 'Str', default => 'Sugar' );
has net => ( is => 'rw', isa => 'Int' );
1;
となり、利用する場合は、
my $bag = Doughnut::Bag->new(net => 10); ### flavor を省略したので flavorは'Sugar'となる
のようになります。
テンプレートエンジンの決定版 - Text::Xslate
かつてはTemplate.pm(TT2等と呼ばれている)が主流だったのですが、最近はこのText::Xslateがスタンダードになりつつあるように思います。
このモジュール独自のテンプレート文法であるSyntax::Kolonに加え、TT2との互換性がとても高いSyntax::TTerseが使えるのが、その理由の一つと言えそうです。
また、数あるテンプレートエンジンの中でも特に速度面で突出しており、それでいて大手webサービスでの採用実績もあり、安定性とパフォーマンスを両立していると言えます。
HTMLのフォームへデータを流し込む - HTML::FillInForm::Lite
HTML::FillInFormと比較して倍くらいの速度で動作します。
近頃のバリデーション処理はこれ - FormValidator::Lite
バリデーション処理をざくざく書ける、比較的軽量なバリデータです。
CPANモジュール作成ツール - Minilla
CPANモジュールの雛形を作ってくれるツールです。僕自身もいくつかCPANにモジュールをアップロードしていますが、それらも大抵はこのMinillaを使って構築しています。
さて、いくつかの鉄板とおもわれるモジュールを紹介しました。まだまだここに挙げた他にも鉄板モジュールはありますが、最近とくに目にする物に絞って列挙させていただきました。
YAPC::Asiaで僕と握メ!
来週9/20(金)~9/21(土)にPerlの祭典 YAPC::Asia が開催されますが、実は9/19(木)には前夜祭が催されます。
そして今年は前夜祭にて、hachioji.pmの首領 uzulla氏が司会進行をつとめるLTthonが行われます。(ちなみに僕はサクラ兼お手伝いとして参加する予定です!)
LTthonは非常に懐が深いLTマラソンイベントとなっております。昨年はスープカレーや格闘ゲームの話でLTを行った方もいらっしゃいました。
このように非常にカジュアルで最高のイベントですし、気後れとか遠慮はいらないですので、どんどんトーカーとしてに応募しましょう!!uzulla氏の頭髪を保全するためにもぜひお願いします!
最後になりますが、YAPC::Asia閉会後には、yusukebe氏主催イベント大人のYAPCが催されます。僕も僭越ながらLTで発表する予定ですので、参加予定の方はよろしくお願いいたします。
明日のHachioji.pm日めくりテックトーク
このブログシステムの作者であるSongmuさんが書いてくれるそうですよ!
見逃すなっ!!!