CPAN

CPANロゴ

包括的PerlアーカイブネットワークCPAN [ 1 ] : xvii )は、14,500人以上の貢献者によってPerlプログラミング言語で書かれた、 220,000以上のソフトウェアモジュールと45,500のディストリビューションの付属ドキュメントを収めたソフトウェアリポジトリです。 [ 2 ] CPANは、アーカイブネットワーク、またはネットワークへのインターフェースと自動ソフトウェアインストーラ(パッケージマネージャのようなもの)として機能するPerlプログラムのいずれかを指します。CPAN上のソフトウェアのほとんどは、無料のオープンソースソフトウェアです。[ 3 ]

歴史

CPANは1993年に構想され、1995年10月からオンラインで活動しています。[ 4 ] CPANはCTANモデルに基づいており、散在するPerlアーカイブの構造を統一する場所として始まりました。[ 5 ]

役割

多くのプログラミング言語と同様に、Perl には外部コードライブラリを使用するメカニズムがあり、複数のプログラムで使用される共通ルーチンを 1 つのファイルにまとめることができます。Perl ではこれらのモジュールを「モジュール」と呼びます。Perlモジュールは通常、Perlインタープリタが最初にコンパイルされる際にパスが設定される複数のディレクトリのいずれかにインストールされます。Unixオペレーティングシステムでは、一般的なパスとして/usr/lib/perl5/usr/local/lib/perl5、およびそれらのサブディレクトリが挙げられます。

Perlには、少数のコアモジュールが付属しています。これらのモジュールの中には、ExtUtils::MakeMaker [ 6 ]のようにブートストラップタスクを実行するものもあれば、他の拡張モジュールをビルドおよびインストールするためのMakefileを作成するために使用されるものもあります。一方、List::Util [ 7 ]のように、単に一般的に使用されるものもあります。

CPAN の主な目的は、プログラマが Perl 標準ディストリビューションに含まれていないモジュールやプログラムを見つけられるようにすることです。その構造は分散化されています。作者は自分のモジュールを保守および改善します。同じタスクや目的で競合するモジュールをフォークして作成することは一般的です。アップロードされたディストリビューションには自動的にセットアップされるサードパーティのバグ追跡システムがありますが、作者はGitHubなどの別のバグ追跡システムを使用することもできます。同様に、 GitHub はディストリビューションのソースを保存する一般的な場所ですが、作者の希望する場所に保存することも、まったく公開されない場合もあります。メンテナーは、他の人にモジュールを保守または引き継ぐ権限を与えることができ、管理者は放棄されたモジュールを引き継ぐことを希望する人に対して権限を与えることができます。更新されたディストリビューションの以前のバージョンは、アップロードした人が削除するまで CPAN に保持され、BackPAN と呼ばれる二次ミラーネットワークは、CPAN から削除されたディストリビューションも保持します。[ 8 ]また、CPANとそのすべてのモジュールの完全な履歴はGitPANプロジェクトとして公開されており、[ 9 ]すべてのモジュールの完全な履歴を簡単に確認でき、フォークのメンテナンスも容易になります。CPANは、Perlの新しいバージョンや、ParrotRakuなどの関連プロジェクトの配布にも使用されています。

構造

CPAN上のファイルはディストリビューションと呼ばれます。ディストリビューションは、1つ以上のモジュール、ドキュメントファイル、またはプログラムで構成され、gzip圧縮されたtarアーカイブやZIPファイルなどの共通アーカイブ形式でパッケージ化されます。ディストリビューションには、インストールスクリプト(通常はMakefile.PLまたはBuild.PLと呼ばれます)と、ディストリビューションの内容が正しく機能しているかどうかを確認するためのテストスクリプトが含まれることがよくあります。新しいディストリビューションは、Perl Authors Upload Server(PAUSE)にアップロードされます(「PAUSEを使用したディストリビューションのアップロード」セクションを参照)。

2003年、ディストリビューションにはMETA.ymlと呼ばれるメタデータファイルが含まれるようになりました。このファイルには、ディストリビューションの名前、バージョン、依存関係、その他の有用な情報が記載されています。しかし、すべてのディストリビューションにメタデータが含まれているわけではありません。ディストリビューションにメタデータが存在しない場合、PAUSEのソフトウェアはディストリビューション内のコードを解析して同じ情報を探そうとしますが、これは必ずしも信頼できるとは限りません。2010年には、この仕様のバージョン2が作成され[ 10 ] 、META.jsonと呼ばれる新しいファイルを介して使用されるようになりました。このファイルには、下位互換性のためにYAML形式のファイルも含まれていることがよくあります。

数千ものディストリビューションが存在するため、CPAN は使いやすくするために構造化されている必要があります。作者は、目的やドメインに応じて、Perl モジュール名の自然な階層構造( や などApache::DBI)にモジュールを配置することがよくありますLingua::EN::Inflectが、これは強制ではありません。

CPANモジュールディストリビューションは通常、 CGI-Application-3.1という形式の名前が付けられます(モジュール名に使用されている「::」はダッシュに置き換えられ、バージョン番号が名前の最後に追加されます)。ただし、これは慣例に過ぎません。多くの主要なディストリビューション、特に複数のモジュールを含むディストリビューションでは、この慣例が破られています。セキュリティ上の制約により、ディストリビューションを同一のファイル名で置き換えることは不可能であるため、事実上すべてのディストリビューション名にはバージョン番号が含まれています。

コンポーネント

CPANの配布インフラは、世界60カ国以上に250以上のミラーサイトからなるネットワークで構成されています。[ 11 ]各ミラーサイトは約36ギガバイトのデータをホストしています。[ 12 ]

ほとんどのミラーサイトは、CPANマスターサイトから1時間ごと、1日ごと、または2日に1回更新されます。[ 13 ]一部のサイトは、他の多くのソフトウェアをミラーリングする主要なFTPサーバーですが、Perlを多用する企業が所有するサーバーに過ぎません。南極大陸を除くすべての大陸に少なくとも2つのミラーサイトがあります。

PerlプログラマーがCPANを整理するのに役立つ検索エンジンがいくつか開発されています。公式検索エンジン「.cpan.org には、テキスト検索、モジュールの閲覧可能なインデックス、そして現在CPANにあるすべてのディストリビューションの抽出コピーが含まれています。2018年5月16日、Perl財団は、コードベースの老朽化とメンテナンスの負担により、19年間の運営を経て2018年6月29日にsearch.cpan.orgを閉鎖すると発表しました。ユーザーはサードパーティ製の代替検索エンジンであるMetaCPANに移行し、リダイレクトされます。[ 14 ] [ 15 ]

CPANテスターは、CPANにアップロードされたディストリビューションをダウンロードしてテストするボランティアグループです。これにより、開発者は、これまでアクセスできなかった多くのプラットフォームや環境でモジュールをテストすることができ、移植性と品質が向上します。スモークテスターはレポートを送信し、それらはまとめられ、メインレポートサイト、統計情報、依存関係など、様々なプレゼンテーションウェブサイトで活用されます。

作者は、Perl Authors Upload Server (PAUSE)を通じて新しい配布物をCPANにアップロードできます。アップロードするには、PAUSEアカウントを申請する必要があります。

登録が完了すると、 pause.perl.orgのウェブインターフェース、またはFTPインターフェースを使用して、自分のディレクトリにファイルをアップロードしたり削除したりできます。アップロードされたモジュールは、モジュール名が以前に使用されていない場合(アップロード者に先着順の許可を与える)、またはアップロード者がその名前に対する許可を持ち、かつモジュールが既存のエントリよりも新しいバージョンである場合にのみ、正規モジュールとしてインデックス化されます。[ 16 ]これはPAUSEのウェブインターフェースから指定できます。

CPAN.pm、CPANPLUS、cpanminus

PerlコアモジュールにはCPANというものがあります。これは通常、CPAN.pmという名前でリポジトリ自体と区別されます。CPAN.pmは主に対話型シェルであり、ディストリビューションの検索、ダウンロード、インストールに使用できます。Perlコアにもcpanという対話型シェルが用意されており、CPAN.pmを実行する一般的な方法です。簡単な設定プロセスとミラーの選択後、ユーザーのコンピュータで利用可能なツールを使用して、モジュールのダウンロード、解凍、コンパイル、テスト、インストールを自動的に行います。また、自動更新も可能です。

CPAN.pm をよりクリーンで現代的なものに置き換える取り組みの結果、CPANPLUS(またはCPAN++)モジュールセットが誕生しました。CPANPLUS は、モジュールのダウンロード、コンパイル、インストールといったバックエンド処理を、コマンド実行用の対話型シェルから分離します。暗号署名のチェック、テスト結果の報告、ディストリビューションのアンインストールといった高度な機能もサポートしています。CPANPLUS はバージョン 5.10.0 で Perl コアに追加され、バージョン 5.20.0 で削除されました。

これらの CPAN インストーラーに代わる、より小型で軽量な現代的な代替品として、cpanminus が開発されました。cpanminus は、メモリが限られた環境でしばしば必要とされるメモリ使用量をはるかに小さくし、スタンドアロン スクリプトとして使用できるように設計されており、必要なコア Perl モジュールのセットさえあれば、それ自体をインストールすることもできます。また、CPAN からモジュール App::cpanminus として入手でき、cpanmスクリプトをインストールします。永続的な構成を維持または依存せず、環境とコマンド ライン オプションによってのみ構成されます。cpanminus には対話型シェル コンポーネントがありません。前提条件を指定するための cpanfile 形式を認識します。これは、CPAN でのインストール用に設計されていない可能性のあるアドホック Perl プロジェクトで役立ちます。cpanminus には、ディストリビューションをアンインストールする機能もあります。

これらのモジュールはそれぞれ、ディストリビューションの依存関係をチェックし、必要な前提条件を自動または個別のユーザー承認により再帰的にインストールできます。いずれもFTPとHTTPをサポートし、ファイアウォールやプロキシ経由でも動作します。

影響

経験豊富なPerlプログラマーは、Perlのパワーの半分はCPANにあるとよく言います。CPANはPerlのキラーアプリと呼ばれています。[ 17 ]これは、 PHPComposerPythonのPyPI(Python Package Index)リポジトリ、RubyRubyGemsRCRANNode.jsnpmLuaLuaRocksJavaMavenHaskellHackageとほぼ同等です。CPANは、仲裁された名前空間、テスト体制、そして明確に定義されたドキュメントスタイルを採用しており、独自の存在となっています。

Perl開発者コミュニティにとっての重要性を考えると、CPANはPerlの文化を形成すると同時に、Perlの文化によっても形成されています。「自称マスターライブラリアン」のJarkko Hietaniemiは、エイプリルフールのジョークによく参加しています。2002年4月1日、このサイトは一時的にCJAN(「J」は「Java」の頭文字)に改名されました。2003年には、ドメイン名はMatt's Script Archive(Perlコミュニティでは質の低いコードで悪名高いサイト)www.cpan.orgにリダイレクトされました。 [ 18 ] [ 19 ] [ 20 ]

CPAN上の配布物の中には、ジョークとして配布されているものがあります。Acme::階層構造はジョークモジュール用に予約されています。例えば、は、与えられたコードを実行しない関数Acme::Don'tを追加します(組み込み関数は実行しますが、組み込み関数は実行します)。階層構造の外でも、主に娯楽目的で書かれたモジュールがいくつかあります。例えば、ラテン語のサブセットでPerlプログラムを書くために使える があります。 don'tdoAcme::Lingua::Romana::Perligata

2005年、 JavaScriptにも関心を持つPerl開発者のグループが集まり、 JSAN(JavaScript Archive Network)を設立しました。JSANは、CPANインフラストラクチャをJavaScript言語向けにほぼそのまま移植したものです。JavaScript言語は、その誕生以来、まとまった「コミュニティ」を持たずにいました。

2008年、オープンソース開発者会議(OSSD)でCPAN管理者のアダム・ケネディ氏と偶然出会ったことをきっかけに、Linuxカーネル開発者のラスティ・ラッセル氏はCCAN(Comprehensive C Archive Network)を設立しました。CCANは、 C言語で使用できるようにCPANアーキテクチャを直接移植したものです。

CRAN(Comprehensive R Archive Network)は、 R言語のディストリビューション、ドキュメント、および提供された拡張機能をホストするミラーのセットです。 [ 21 ]

参照

参考文献

  1. ^ Wall, Larry; Schwartz, Randal; Christiansen, Tom (1996). Programming Perl . O'Reilly. ISBN 978-1-5659-2149-8. 2025年12月21日閲覧
  2. ^ 「CPANフロントページ」 。 2025年2月2日閲覧
  3. ^ 「PerlとCPANモジュールのライセンスはどのようになっていますか?」 CPAN上のモジュールのほとんどは、すべてではありませんが、GNU General Public License(GPL)またはArtisticライセンスの下でライセンスされています。
  4. ^ 「Perl とその文化のタイムライン」
  5. ^ 「CPANを理解する」(PDF)。TeXの標準サイト集を作成したCTANプロジェクトのように、統一された構造を構築するために協力することを提案します。
  6. ^ 「ExtUtils::MakeMaker - モジュールMakefileを作成する - Perldocブラウザ」 . perldoc.perl.org . 2020年11月18日閲覧
  7. ^ 「List::Util - 汎用ユーティリティリストサブルーチンの選択 - Perldocブラウザ」 . perldoc.perl.org . 2020年11月18日閲覧
  8. ^ "BackPAN" . 2019年12月20日閲覧
  9. ^ 「Gitpanとは何か?」 GitHub 2015年12月2日。 2016年11月16日閲覧
  10. ^ "CPAN::Meta::History" . MetaCPAN . 2019年12月20日閲覧
  11. ^ 「CPANミラーネットワーク」 。 2016年11月16日閲覧
  12. ^ 「CPANをミラーリングする方法」 CPAN.org . 2024年8月22日閲覧
  13. ^ 「CPANのステータスと統計」 。 2010年5月9日閲覧
  14. ^ 「時代の終わり:search.cpan.orgに別れを告げる」log.perl.org . 2018年5月22日閲覧
  15. ^ 「search.cpan.orgに別れを告げる」 . perl.com . 2018年6月26日閲覧
  16. ^ 「PAUSEオペレーティングモデル」 . GitHub . 2019年12月20日閲覧
  17. ^ 「Re: Killer Apps in PERL」 。 2013年2月24日閲覧
  18. ^ 「Perlによるプログラミングの要素」 2000年10月12日. 2013年4月25日閲覧
  19. ^ 「このformmail.plを楽しく、そして、まあ、楽しく活用しよう」 2001年8月7日2013年4月25日閲覧。
  20. ^ 「Matt's Script Archive Strikes Again!」 2001年7月4日. 2013年4月25日閲覧
  21. ^ 「CRANとは?」2019年12月20日閲覧