
包括的Perlアーカイブネットワーク(CPAN [ 1 ] : xvii)は、14,500人以上の貢献者によってPerlプログラミング言語で書かれた、45,500のディストリビューション用の220,000を超えるソフトウェアモジュールとそれに付随するドキュメントのソフトウェアリポジトリです。 [ 2 ] CPANは、アーカイブネットワーク、またはネットワークへのインターフェースとして機能し、自動ソフトウェアインストーラー(パッケージマネージャのようなもの)として機能するPerlプログラムのいずれかを指す場合があります。CPAN上のソフトウェアのほとんどは、フリーでオープンソースのソフトウェアです。[ 3 ]
CPANは1993年に構想され、1995年10月からオンラインで活動している。[ 4 ] 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 の新しいバージョンや、ParrotやRakuなどの関連プロジェクトを配布するためにも使用されます。
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 時間ごと、毎日、または 2 日ごとに更新されます。[ 13 ]一部のサイトは、他の多くのソフトウェアをミラーリングする主要な FTP サーバーですが、その他は、Perl を多用する企業が所有するサーバーです。南極大陸を除くすべての大陸に、少なくとも 2 つのミラーがあります。
Perl プログラマが CPAN を整理するのに役立つ検索エンジンがいくつか作成されています。公式のsearch.cpan.orgに
CPANテスターは、CPANにアップロードされるディストリビューションをダウンロードしてテストするボランティアグループです。これにより、開発者は、通常アクセスできない多くのプラットフォームや環境でモジュールをテストすることができ、移植性と品質の向上につながります。スモークテスターはレポートを送信し、そのレポートは集計され、メインレポートサイト、統計情報、依存関係など、さまざまなプレゼンテーションWebサイトで使用されます。
著者は、Perl Authors Upload Server (PAUSE)を通じて新しいディストリビューションを CPAN にアップロードできます。そのためには、PAUSE アカウントを申請する必要があります。
登録が完了すると、 pause.perl.orgの Web インターフェースまたはFTPインターフェースを使用して、ファイルをディレクトリにアップロードしたり削除したりできます。アップロードされたモジュールは、モジュール名が以前に使用されていない場合 (アップロード者に先着順の権限が付与される場合)、またはアップロード者がその名前の権限を持ち、かつモジュールが既存のエントリよりも新しいバージョンである場合に限り、正規のものとしてインデックスされます。[ 16 ]これは、PAUSE の Web インターフェースから指定できます。
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 モジュールのみを用意すれば、自身をインストールすることも可能です。また、cpanmスクリプトをインストールするモジュール App::cpanminus として CPAN からも入手できます。永続的な構成を維持したり依存したりせず、環境とコマンドライン オプションのみで構成されます。cpanminus には対話型シェル コンポーネントはありません。前提条件を指定するための cpanfile フォーマットを認識し、CPAN インストール用に設計されていない可能性のあるアドホックな Perl プロジェクトで役立ちます。cpanminus にはディストリビューションをアンインストールする機能もあります。
これらのモジュールはそれぞれ、ディストリビューションの依存関係をチェックし、必要な前提条件を自動的に、またはユーザーの個別の承認を得て再帰的にインストールできます。また、いずれもFTPとHTTPをサポートし、ファイアウォールやプロキシ経由でも動作します。
経験豊富な Perl プログラマーは、Perl の力の半分は CPAN にあるとよく言います。CPAN は Perl のキラー アプリと呼ばれています。[ 17 ]これは、 PHPのComposer、PythonのPyPI (Python Package Index) リポジトリ、RubyのRubyGems、RのCRAN、Node.jsのnpm、LuaのLuaRocks、JavaのMaven、HaskellのHackageとほぼ同等です。CPAN は、仲裁された名前空間、テスト体制、明確に定義されたドキュメント スタイルを使用しているため、独自のものとなっています。
Perl開発者コミュニティにとって重要な存在であるCPANは、Perlの文化を形成すると同時に、Perlの文化によっても形成されています。その「自称マスターライブラリアン」であるJarkko Hietaniemiは、エイプリルフールのジョークによく参加しています。2002年4月1日には、サイト名が一時的にCJANに変更されました。「J」は「Java」の略です。2003年には、ドメイン名がMatt's Script Archivewww.cpan.orgにリダイレクトされました。このサイトは、Perlコミュニティではコードの記述がひどいことで悪名高いサイトです。[ 18 ] [ 19 ] [ 20 ]
CPAN 上のディストリビューションの中には、ジョークとして配布されているものもあります。Acme::階層構造はジョークモジュール専用です。例えば、 は、渡されたコードを実行しない関数Acme::Don'tを追加します(組み込み関数 を補完するため)。階層構造の外でも、一部のモジュールは依然として主に娯楽目的で作成されています。その一例が で、これはラテン語のサブセットで Perl プログラムを作成するために使用できます。don'tdoAcme::Lingua::Romana::Perligata
2005年、 JavaScriptにも関心を持っていたPerl開発者のグループが集まり、JavaScript Archive Network (JSAN)を創設しました。JSANは、CPANインフラストラクチャをJavaScript言語向けにほぼそのまま移植したもので、JavaScriptは長年にわたり、まとまりのある「コミュニティ」を持っていませんでした。
2008年、Linuxカーネル開発者のラスティ・ラッセルは、オープンソース開発者会議でCPAN管理者のアダム・ケネディと偶然出会ったことをきっかけに、包括的Cアーカイブネットワーク(CCAN)を創設した。CCANは、C言語で使用するためにCPANアーキテクチャを直接移植したものである。
CRAN(Comprehensive R Archive Network)は、 R言語ディストリビューション、ドキュメント、および貢献された拡張機能をホストするミラーの集合です。 [ 21 ]
CPAN上のモジュールのほとんどは、すべてではありませんが、GNU一般公衆利用許諾契約書(GPL)またはArtisticライセンスに基づいてライセンスされています。
私は、TeXの標準サイトを集めたCTANプロジェクトのように、統一された構造を作るために協力することを提案します。