まるまるこふこふ

数々の次元が崩壊し、全ての生命が塵と化すのを見てきた。私ほどの闇の心の持ち主でも、そこには何の喜びも無かった。

モダンPerlを知ってびっくりしたこと。

この記事はPerl入学式 Advent Calendar 2014 14日目の記事です。

13日目の記事は、@mackee_w のPerlを学んでいるとお得 テキストファイル解析編でした。
今はWebアプリケーションを記述するプログラムとして認知されている Perl ですが、
元々はテキストを便利に処理するための言語だったので、こういう事はお得意なのですよ!

14日目はPerl入学式に参加して Modern な Perl を知って
びっくりしたことをまとめようと思います。

Who are you?

さいというハンドルネームで活動しています。
2014年度のPerl入学式 in 大阪に参加させていただきました。

実はPerlを触るのは初めてというわけではなく、
10年ほど前に個人のホームページを作っていた際に、
CGIの掲示板やチャットを作るためにPerlを勉強していました。

当時のPerl事情

バージョンは5.8.xが最新でした。
Encodeモジュールがコアモジュールとして導入された頃です。

ただし私が使用するレンタルサーバーは、Perl5 なのにも関わらず、
Perlモジュールが一切利用できない環境だったので、その辺の話は
あまり興味がありませんでした。
(ちなみに当時はまだperl4を置いてるレンタルサーバーもたくさんあって……)

モダンPerl

昔話が過ぎました。そんな10年前にPerlを触ってた人間が
2014年現在にもう一度Perlを触ろうと思ってびっくりした事をまとめます。

plenv

plenv とは、ユーザPerlの構築環境です。
通常のperlはひとつのコンピュータに一つしか存在しません。
当然Perlのバージョンもひとつに絞られてしまいます。

しかし開発者というものは必ずしも最新のPerlを使うわけではありません。
プロジェクトによってはPerl5.12.xだったり、Perl5.18.xだったり、さらにそれが同時進行する可能性もあります。

そのために、システムPerlではなく、ユーザPerlを用意して、
プロジェクトごとにPerlのバージョンを別々に使うために、我々はplenvを使うのです、パチパチ。

またユーザPerlがインストールされるのはホームディレクトリ下なので、
root 権限のないユーザでもPerlがインストールできちゃいます。パチパチ。

cpanm

cpanm とは cpanminus のことです。cpanモジュールを楽にインストールすることができます。
もともとPerlCPANモジュールをインストールする際は、
Perlに標準でついている cpan というコマンドが使われていました。
あるいは perl -MCPAN -e 'shell' なんてワンライナーを使っていた人も多いと思います。

cpanm を使うとユーザ環境にCPANモジュールをインストールすることができます。
この辺の便利さは、plenvと同じだと思います。

加えて、設定が楽!動作が軽い!コアモジュールのみを使用しており
依存するモジュールがない!と便利なこと尽くしなのです。

Plack/PSGI

perl を使って、Webアプリを提供する場合、CGIというプロトコルを使うのが
10年前は一般的でした。このCGIというのは、ユーザーからのアクセスがあるたびに
perl のプロセスが立ち上がっていたので、非常にパフォーマンスが悪かったのです。

そのため、当時からFastCGImod_perl といったものがありました。

ただ perl コードを書く側としては、そうしたサーバー環境ごとに
コードをかき分ける必要がありました。
FastCGI で動くことを前提としたperl コードは、CGImod_perl では動かなかったのです。

そうした環境ごとの差異を吸収して、同じコードでどの環境でも動くような
インターフェイスを決めたのがPSGIです。そしてPlackとはPSGIの実装のことです。

PSGIのアプリケーションとして書かれたコードは、CGIでもmod_perlでもFastCGIでも、
あるいは hypnotoadや starman、starletといったアプリケーションサーバーでも
動かすことができるようになったのです。便利便利。

おしまい

というわけで、私がモダーンなPerl を知って驚いたことをまとめました。
もっとコード寄りの話で、モダーンなCPANモジュールなどもまとめてみたかったです。

明日はPerl入学式の「校長先生」こと @__papix__さんの記事です。
ちょっとくらいテックな話書きたいとの事なので、楽しみにしております。