Hachioji.pm 日めくりテックトーク

八王子 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さんが書いてくれるそうですよ!

見逃すなっ!!!

created by
ytnobody / satoshi azuma
created at
last modified at
2013-09-14 22:33
comments powered by Disqus