モダンPerlの世界へようこそ

第24回 CPAN:Perl界の水先案内人

この記事を読むのに必要な時間:およそ 5 分

CPANが生まれるまで

その昔,Perlのスクリプトやライブラリは作者のサイトなどから個別にダウンロードしてくるものでした。古くからのユーザであればcgi-lib.plやjcode.pl,mimew.plといったライブラリのことを懐かしく思い出すでしょうし,いちいち名前はあげませんが,CGI経由で(あるいはCGIを利用せずに)実行できる各種スクリプトを落としてきて設置したことのある方も少なくないことでしょう。ライブラリだけでなく,前回紹介したデータベースに対応したPerl 4バイナリや非Unix環境向けのPerlバイナリの場合も同じです。入手先の情報などはニュースグループで共有されていましたが,ツールやライブラリが各地に分散していると必要な情報を探して環境を構築するだけでも結構な手間になってしまうため,まとめサイトとして誕生したのがCPANことComprehensive Perl Archive Networkでした。

CPANの構想自体はPerl 4時代の1993年にさかのぼれますが,最初の実装が行われたのはPerl 5.001時代の1995年8月のこと。当初はハードウェア的な制約もあってPerl本体のソースコードや,非Unix環境用のバイナリ,ドキュメント,各種スクリプト類のみの収集にとどめ,ライブラリ(モジュール)類については扱わない予定だったそうですが,アンドレアス・ケーニヒ(Andreas König)氏がSymdumpモジュールを自作のPAUSE(Perl programming Authors Upload Server)と呼ばれるリポジトリに登録したのをきっかけに世界各地からモジュールが集まり,同年10月26日の正式公開時にはすでに60を越すモジュールが登録されていました(そのなかには1995年9月1日にOZAWA Sakuro氏が登録したRomanも含まれていました)⁠

CPANはその後も順調に成長を続け,1996年末までには300強のモジュールが登録されていたのですが,このようにモジュールの数が増えてくると,いちいちブラウザなどでCPAN内部の階層を行ったり来たりするのは面倒になってきます。どのみちダウンロードしたあとはかならずお決まりの手順(perl Makefile.PL && make && make test && make install)でインストールするのですから,できればダウンロードからインストールまで一手に引き受けてくれるツールがほしい――そのような声を受けて誕生したのが最初の専用クライアントであるCPAN.pmでした。

これはPAUSEの管理人でもあるアンドレアス・ケーニヒ氏が作ったものだけに,単なるインストーラにとどまらず,サーバ側で用意したインデックス類を利用して柔軟な検索が可能になっていたのが特徴で,当時からいまと変わらずモジュール名やディストリビューション名を区別せずにインストールができるようになっていました。使い方の自由度も高く,ワンライナーを使いたければこう書けますし,

> perl -MCPAN -e 'install Foo::Bar'

独自のシェルを起動すれば(Perlコードの実行も含めて)よりきめ細かい対応ができるようになっていました。

> perl -MCPAN -e shell
cpan> !$CPAN::DEBUG=1
cpan> i /^Foo/
cpan> install Foo::Bar

このCPAN.pmは1996年4月にPerl 5 Porters向けに限定公開され,1996年12月にリリースされたPerl 5.003_12からコアモジュール入りして,その後のPerlの発展に大きく寄与していくのですが,前回取り上げたExtUtils::MakeMakerModule::Buildという対抗馬があらわれたように,CPAN.pmにもCPANPLUSという対抗馬があらわれます。今回はその経緯を追いかけながら,前回取り上げなかったいまどきのMakefile.PL/Build.PLの書き方についてもまとめてみます。

See PANTS

20世紀が終わったとき,CPANには2500個強のモジュールが登録されていました。CPANには事前審査の仕組みがないのでモジュールの品質管理は基本的に個々の作者の手にゆだねられているのですが,当時はまさにドットコムバブルの時代で,過去の経緯を知らない新しいPerlユーザも激増していましたから,品質上の問題を抱えたモジュールが登録されることもあったのでしょう。2001年のYAPC::Europeではおなじみマイケル・シュワーン氏が「See PANTS※1)⁠というセクハラまがいのネタとともにCPANTSことCPAN Testing Serviceというプロジェクトの構想を発表します。

このプロジェクトは,CPANモジュールの全体的な品質を担保するため,必要なファイルは揃っているか,用意されているテストは正しく(しかもさまざまな環境で)実行できるか,といったテストをすべてのモジュールに対して定期的に実行し,その結果を分析することで,個々のモジュールやその作者を適切に評価したり,コミュニティの支援が必要なモジュールを客観的な指標をもとに検出したりできるようにする,と謳って多くの賛同を得たのですが,実際にこのようなテスティングサービスを実現するためにはいくつかの障害がありました。そのひとつは前回紹介したExtUtils::MakeMakerの拡張性の問題でしたが,CPAN.pmも基本的にはインタラクティブに使うことを前提に書かれていたため,自動処理用のAPIなどがこなれていないという問題がありました※2)⁠

また,当時のCPAN.pmは単一ファイル内で30回以上もpackageが切り替わるという非常に複雑な構成になっていたため,CPANTS対応に必要なパッチを作るどころか,コードを追うだけでも大変だったという問題もありました。もともとCPAN.pmはPerl 5.003の時代から本体部分だけで2500行ほどもある大きなモジュールでしたが(PODを除くと2200行ほど。そのほかに300行ほどの初期設定用コードがありました)⁠その後も新しい機能や移植用のコードを吸収しながら順調に成長を続けた結果,2000年にリリースされたPerl 5.6.0の時点では本体部分だけで4500行ほどの巨大なモジュールになっていました。のべ行数では6500行ほどもあったCGI.pmのほうが上でしたが,CGI.pmは半分近くがPODですから,単一ファイルのコード量としてはCPAN.pmが当時のコアモジュールでは最大のものだったのです(ディストリビューション単位で合計すると前回取り上げたExtUtils::MakeMakerが首位に立ちます)⁠

そのため,ケン・ウイリアムズ氏がExtUtils::MakeMakerに見切りをつけてModule::Buildを書き始めたように,CPANTSへの協力を申し出ていたヨス・バウマンス(Jos Boumans)氏も,CPAN.pmを直すよりは新しいものを書いたほうが早いのではないかと考えて,コミュニティ最大のモジュールを一から書き直す作業に取りかかります。その成果が,Perl 5.8リリースも間近に迫った2002年3月にリリースされたCPAN++ことCPANPLUSでした。

※1

念のため,日本語でもそうですが,英語でもpantsには下着の意味になる場合と(イギリス用法)⁠ズボンの意味になる場合があります(アメリカ用法)⁠Perlの品質管理チームのサイトにある「Pants check」というコーナーにはそのことをふまえて「自分はスカートをはいている」イギリス風のパンツではなくアメリカ風の)ショーツだ(これも半ズボンと男性用の下着の二通りの意味になります)⁠などの回答が寄せられています。

※2

たとえば,当時のCPAN.pmでもperl -MCPAN -e 'test Foo::Bar'といったコマンドを実行すればテストだけを実行することはできたのですが,この返り値はかならずしもテストの正否とは関係ありませんでした。

著者プロフィール

石垣憲一(いしがきけんいち)

あるときは翻訳家。あるときはPerlプログラマ。先日『カクテルホントのうんちく話』(柴田書店)を上梓。最新刊は『ガリア戦記』(平凡社ライブラリー)。

URLhttp://d.hatena.ne.jp/charsbar/

コメント

コメントの記入