この記事はPerl Advent Calendar 2016の12日目の記事です。昨日はytnobodyさんの「YAPC::Hokkaido 2016 SAPPORO が楽しかったという話」でした。
吉祥寺.pmというPerlのような物のイベントをやっています、Magnolia.Kです。
先日開催した吉祥寺.pm9で、CPAN Authorになった話のLTが有ったのと、最近色々な言語を使ってみて改めてCPANいいなーって思ったので、「CPANいいよね!」って話を書きます。
改めて、CPANいいよね!
PerlユーザーにはおなじみのCPAN(Comprehensive Perl Archive Network)は、さまざまな人が作ったモジュールが集められたリポジトリです。
CPANからのモジュールインストール
cpan
やcpanm
、cpm
といったクライアントソフトウェアを使えば、指定したモジュールをCPANからダウンロードしてインストールできます。
例えばJSON
モジュールをインストールしたいときは、以下のコマンドでインストールします。
$ cpan JSON
CPANのサイト
CPANには、サイトが二つ有り、オリジナルのCPANと、さまざまなメタデータや、アクセス用APIが整備されたmetacpanが有ります。
今回は、このmetacpanを中心に紹介します。
metacpanのいいところ
- モジュールの使い方がシュっと分かる構成になっている
metajsonでモジュールを検索すると、podの内容をパースして自動的に目次(Contents)が生成されて、最初にNAME(名前)と、SYNOPSIS(モジュールの簡単な使い方)へのリンクが表示されます。
NAMEにはモジュール名と、短いモジュールの解説が書かれています。Synopsisには、基本的なモジュールの使い方が書かれています。ここだけ見るとモジュールの目的と最低限の使い方が分かるようにまとまっています。
あと、モジュール名の前にモジュールの作者の名前が表示されるところが、凄く良いですね!
- CPAN Testersで自分の環境で使えるモジュールか調べられる
Perlはさまざまな環境で動作する言語ですが(Linuxとか、macOSとか、BSDとか、Windowsとか…)、必ずしも全てのモジュールがすべての環境で動作するとは限りません。
そんなときは左側の「Testers」をクリックすると、CPAN Testersの結果が分かります。Perlのバージョンと、各OSのマトリクスになっていて、そのモジュールの、そのバージョンがどの環境でテストされているかが一目瞭然です。
CPAN Testersは有志が自分の環境で試した結果をアップするもので、動作保証をするものではありませんが、十分参考になります(当然テストコードが十分に書かれていることが条件ですが…)
- CPANTSによる品質保証
直接モジュールを利用する側からすればあまり関係ないのですが、CPANにはCPANTSという仕組みが有り、「READMEやChangesといった基本的なドキュメントが用意されているか?」「モジュールに適切なバージョンが付与されているか?」といった、モジュール利用者が使いやすい状態になっていることをチェックできるようになっていて、結果はスコアリングされます。
CPANTSのチェック観点は、以下のサイトで確認することができます。
http://cpants.cpanauthors.org/kwalitee
コアスコアが100点になっているモジュールを使った方が良いでしょう。
- さまざまなClient Software
元々CPANへアクセスするためのClient Softwareはcpan
コマンドが定番で、その後cpanp
といったツールが出てきましたが、今ではcpanm
が定番になっています。
一方でWebアプリケーションフレームワークのように大量のモジュールに依存しているモジュールをインストールするときに、時間がかかりすぎることからskajiさん作成のcpm
といった新しいツールも登場しています。
- APIが整備されている
通常はWeb Siteか、CPAN Clientを使ってアクセスすることになりますが、metacpanではAPIも整備されていて、さまざまな情報を取得できます。CPAN Clientも結局はこれらのAPIを使ってモジュールの検索やダウンロードを行っています。
https://github.com/metacpan/metacpan-api/blob/master/docs/API-docs.md
- Acmeモジュール
実はCPANの最大の魅力ではないか?と言われているのが一連のAcmeモジュールです。Acmeとは「極致, 絶頂, 最高の出来栄え」といった意味合いですが、CPANでは実用性の無い、お遊びのようなモジュールのためのネームスペースとして用意されています。
CPANで「Acme」で検索するとさまざまな不思議なモジュールが出てきますが、詳しくは「Acme大全」を読んだ方が良いでしょう。
最近の言語には中央リポジトリは…無い?
最近の言語では、直接GitHubのリポジトリを参照することも多くなってきて、あまり中央リポジトリ!という感じで情報がまとまっていることも無くなってきて寂しいのですが、Perlのこういった文化はいいですね!
JVMのMaven Centralもごちゃっとファイルが置かれているだけだし、goはGitHubのリポジトリを参照する形式だし、Perl6は単なるディレクトリリストだし。ちょっと寂しいですね。
おわりに
ということでとても素敵なCPANについて改めて、「こんなところが良いよね?」ということを書きました。
英語ということも有り、あまり細かくチェックする機会が無かった人も片っ端からリンクをクリックしてみて下さい。きっと新しい発見が有ると思います。
CPAN Moduleを書いてみよう!と思った人は手始めにAcmeモジュールを書いてみるところから始めると良いと思います(Acme大全に載るというメリットも??)。
CPAN Authorになるための手順を書き出すと長くなるのでは、それは各自ググったりしてね!