モダンPerlの世界へようこそ
第16回 Perl::Dist::Strawberry:何味のアイスクリームがお好きですか?
2009年9月21日
Perl, モダンPerl, Perl::Dist::Strawberry, ActivePerl
Windows, モジュール, Perl, インストール, Strawberry
今年のYAPC::Asia,いかがでしたか?
先日開催されたYAPC::Asiaはいかがでしたか? 筆者はあいにくそれほど多くのセッションに参加できたわけではないのですが,この連載ですでに取り上げたもの,まだ取り上げていないもの,そして前回原稿を書いたときにはまだ存在すらしていなかったものを含めて,有意義なセッションがたくさんありました。おかげさまで筆者も当面ネタに困ることはなさそうです。
とはいえ,あまりに旬なモジュールについては,情報の流れが速すぎて,のろまな筆者では追い切れませんので,今回と次回は,筆者が今年のYAPC::Asiaでもうひとつ発表しようかと思っていたネタをしっかりまとめておこうと思います。
ActivePerlの興隆
PerlはもともとUnixで使われていたさまざまなツールのよいところを集めて作られた言語です。だから,Perlのコマンドにはシェルやawk,Cに由来するコマンドが多数含まれていますし,その動作もおおむねUnixに準拠したものとなっていました。
もっとも,PerlはUnix環境でしか動かないというわけではありません。Unixの根底にある機能の多くはPOSIX(Portable Operating System Interface for Unix)の形で多くのOSに採用されてきましたし,そのおかげでPerlもさまざまなプラットフォームに移植されてきました。Perlに付属のperlportを見てみると,PerlはすでにUnix系のものだけで20ものプラットフォームを区別していることがわかりますし,その他のものも含めれば30を越すアーキテクチャを識別できるようになっています。
そして,その「その他」のなかには,最初期のPOSIX 1にのみ対応したWindows環境も含まれていました。
Perlが初めてWindows(や,それ以前のMS-DOS)で動くようになったのがいつだったのかは調べきれなかったのですが(少なくともjperlが1991年当時すでにMS-DOS上で動いていたことは記録に残っています),ことPerl 5に関していえば,Microsoft社が1995年当時カナダのHIP Communications社にいたディック・ハルト(Dick Hardt)氏のチームに出資してPerlの移植を依頼したのがそもそもの起こりだったようです。
氏はやがて売却されたHIP社を飛び出して,ActiveWare社を設立。同社は引き続き当時のPerl 5.003をベースにWindows向けのさまざまなパッチを当てていったのですが,その対応はあくまでも自社内で行われていたため,進化を続けるPerl 5本体のコードベースとの齟齬が目立つようになっていました。
そこで,オライリー社を中心に両者を結びつける努力が始まり,ActiveWare社はActiveState社と名を変え(1997年8月),同時期に独自にWindows向けPerl 5のバイナリパッケージの配布を行っていたグルサミー・サラシー(Gurusamy Sarathy)氏をも迎え入れて,Perl 5.004以降のWindows対応を本家と共同で推進していくことになりました。サラシー氏は1998年6月以降,Perl 5.004/5系列のリリースマネージャ(「パンプキン」)となり,同年7月には同社初のWindows版バイナリパッケージとなるActivePerl 5.004_69をリリース。以降,1999年末までに同社は都合22個の5.004/5向けバイナリパッケージをリリースしたほか,サラシー氏は同じく1998年7月に開発が本格化したPerl 5.6系列(正式リリースは2000年3月)のリリースマネージャも担当することになりました(~2001年)。
また,同社は1999年にMicrosoft社と3年契約を結んでWindows版Perlのサポートを強化するかたわら,従来のWindows版Perlでは動作しなかったforkを移植するため,MS社と共同でithreads(interpreter threads)と呼ばれるものの実装にも取り組みました。この頃の実装はまずActivePerlでテストされていたこともあって,一時期はまさにWindows用のActivePerlこそがPerlの最先端を行く実装だったものです。
また,このMicrosoft社との提携はもうひとつ,PPM(Perl Package Manager)と呼ばれる副産物も生み出しました(そのベースとなったOpen Software Description Formatの仕様は1997年にMicrosoft社らが策定したものです)。このPPMを使うことで,ActivePerlのユーザはCPANモジュールを(Perlバイナリと同じコンパイラでコンパイルした)バイナリの状態でインストールできるようになりました。CPANモジュールをインストールするためだけに高額なMicrosoft社のVisual C++を買う必要はなくなりましたし,わざわざMinGWやCygwinのコンパイラをインストールする必要もなくなりました(※1)。「ActivePerlさえインストールしておけば,あとは何も入れなくて大丈夫」という手軽さが,Unix系のディストリビューションに比べて圧倒的にユーザベースの多いWindows環境でライトユーザの獲得にどれほど貢献したかは説明するまでもないでしょう。
- ※1
なお,この辺Windows環境でPerlを使わない方からはよく誤解されるのですが,ActivePerlであっても,MSVCやMinGW環境を適切に設定すればCPANから直接モジュールをインストールすることはできます。PPMはあくまでもコンパイラの設定やリンクするライブラリが異なることによるXSモジュールの不具合を防ぐため,クライアントのアーキテクチャにあわせてコンパイル&テストされたモジュールをインストールできるようにする仕組みであって,牧大輔氏の『モダンPerl入門』にあるような「PPMレポジトリ形式になっていないとモジュールをインストールすることができません」ということはありません。
ActiveState社の買収
こうしてPerl界にさまざまな貢献をしてきたActiveState社は,前述のサラシー氏や,LWPなどのメンテナとして有名なギスレ・オース(Gisle Aas)氏だけでなく,Inlineの作者として一躍名をはせたインギー・ドット・ネット(Ingy döt Net,当時のBrian Ingerson)氏らも合流し,当時のPerl界における一大勢力となっていました。
ところが,同社が主導したPerl 5.6系列は,Unicode対応などを謳ってはいたものの不十分なところが多いということで早々に仕切り直しの動きが始まり,2000年9月には早くも最初のPerl 5.7系列(5.8系列の開発版)が登場。2年間の開発を経て,2002年7月には正式にEncodeをフィーチャーしたPerl 5.8がリリースされます。
サラシー氏は2001年4月リリースのPerl 5.6.1を最後にリリースマネージャを降り,2002年にはMicrosoft社との契約も切れて,ActiveState社の時代はひとつの節目を迎えることになりました。PPMクライアントも2002年7月を最後にCPANには登録されなくなり,Programmer's Package Managerと名前を変えた新しいPPM 3系列のクライアントは,独自のライセンスで保護されるようになります。
それから1年。ActiveState社はアンチスパム界での実績を見込まれ,2003年9月には同業界のSophos社に吸収合併されてしまいます。Sophos社は当時100人以上もいたActiveState社の従業員には手をつけず,ActiveStateのブランド名も残し,Sophos社の一部門としてオープンソースへの貢献も続けていく旨表明したのですが(※2),それまでのめざましい活躍振りに比べると,やはり同社の活動がやや鈍ったように受け止められたのは致し方のないこと。ActivePerlのリリースは公約通りSophos配下になっても年2~3回の割で続けられたのですが,それまでに比べてPPMの管理に人員や時間を割けなくなったためか,コンパイラが必要でもっともPPMパッケージ化する価値の高いXSモジュールの多くが同社のPPMリポジトリからインストールできない状態が続き,MSVCなどの開発環境を持たないライトユーザ― ──とりわけ長年Unix系の環境で経験を積み,たまたまWindows環境でもPerlの仕事をする必要に迫られたタイプのライトWindowsユーザをいらだたせていました。
モダンPerlの世界へようこそ
- 第27回 Test::Most:Test::Moreでは物足りなくなってきたら
- 第26回 ShipIt:モジュールのリリースをもっと手軽に
- 第25回 Module::Starter:モジュールを書くためのテンプレート
- 第24回 CPAN:Perl界の水先案内人
- 第23回 Module::Build:MakeMakerの後継者を目指して
- 第22回 Mojolicious::Lite:本当に簡単なウェブアプリがあればいいときは
- 第21回 KiokuDB:マッピングが複雑すぎると感じたら
- 第20回 Email::Sender:メールを送信する
- 第19回 Who's Who on IRC:Perl界の紳士録(IRC編)
- 第18回 local::lib:ふだんと違う環境でPerlを使う


