アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » モダンPerlの世界へようこそ » 第24回 CPAN:Perl界の水先案内人

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

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

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/

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

C/C++プログラマのためのDTrace入門

よくカーネルのチューニングや解析で活用されるDTraceですが,実はユーザプログラムの開発においても非常に有用です。連載ではC/C++プログラマやテストに関わる方向けにDTraceの使い方を解説します。

Blogopolisから学ぶ計算幾何

計算幾何学は,図形に関するアルゴリズムを研究するコンピュータサイエンスの一分野です。本連載では,ビジュアルブログ検索エンジン「Blogopolis」で採用されている計算幾何のアプローチを例に取り上げながら,計算幾何の初歩を実践的に学習します。

検索エンジンはいかにして動くのか?

本連載では, 今や誰もが利用している検索エンジンの中身を,全体の仕組みやデータ構造,アルゴリズムから分散インデックスまで,最近の研究事例も交えて紹介します。

サイエンスに片思い

本連載では,サイエンスという学問を軸に,そこから広がる可能性やつながり,そしてWebの世界との関係について,前田邦宏氏がさまざまな取材を元に考察し,これからの可能性について展望します。

使ってみよう! Windows Live SDK/API

Windows Liveサービスの一部にはAPIやSDKとして提供されているものがあります。本連載では各API・SDKの紹介とそれらを利用したアプリケーションを開発していきます。

Lifelog~毎日保存したログから見えてくる個性

コンピュータを使って,日常のさまざまなことの記録(ログ)をとり,それを分析して活用することで,もう一段階上の「楽な生活」をめざす日々の研究報告です。

もっと便利に!jQueryでラクラクサイト制作(実践サンプル付き)

本連載では,実践サンプルとともに,jQueryを上手に活用してサイト制作の品質向上・効率化を実現するための実践テクニックを解説します。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス