Perl Hackers Hub

第26回Perlで困ったときの調べ方(2)

前回の(1)こちらから。

モジュールについて調べる

モジュールのドキュメントを調べる

ある程度大きなアプリケーションになると、いくらperldocコマンドやgrepコマンドでPerl本体のドキュメントを調べても見つからない関数が出てきます。これはPerl本体のドキュメントに不備があるからではなく、その関数がコード中でuseされているモジュールに由来するものだからです。

perldocコマンドは、インストールされているモジュールのドキュメントを読むときにも使えます。たとえば、Carpモジュールのドキュメントを読みたいときは次のようにします[7]⁠。

$ perldoc Carp

モジュールのソースコードを調べる

Perlのモジュールにはなるべくドキュメントを付けることが求められていますが、さまざまな事情から、必要な情報が載っていなかったり、そもそもドキュメントがまったくないこともあります。このような場合は実装を確認するしかありません。

perldocコマンドに-mオプションを付けると、モジュールのソースコードを表示できます。

$ perldoc -m Carp

perldocコマンドのページャとしてlessコマンドが使われている場合は、ソースコードを表示しているときに[v]キーを押下すると、環境変数VISUALないしEDITORに定義されているエディタが起動して内容を編集できるようになります。システムPerlを使っている場合はパーミッションの都合で保存できない場合が多いでしょうが、plenv環境では、インストール済みのモジュールにデバッグ用のコードを埋め込みたいときなどに重宝します[8]⁠。

モジュールがインストールされていなかった場合

perldocコマンドでドキュメントやソースコードを表示できるのは、手元の環境にインストールされているモジュールのみです。インストールされていないモジュールについては、CPANなどからあらかじめインストールしておく必要があります。

なお、本連載第21回Carton & cpanm─⁠─ Perlモジュール管理最新事情で紹介があったCartonモジュールを使って管理しているモジュールは、通常のPerl環境からはインストールされていないように見えます。このようなモジュールのドキュメントやソースコードを確認したい場合は、次のようにcartonコマンド経由でperldocコマンドを実行します。

$ carton exec -- perldoc -m Carp

CPANについて調べる

CPANComprehensive Perl Archive Networkは、もともとは各地に分散していて見つけるのが大変だったPerlの情報を1ヵ所にまとめるために作られました。今では単なるモジュール置き場と認識されている人も多いかと思いますが、実際にはPerlのソースコードや、OS別のバイナリディストリビューション、Perlに付随するさまざまなドキュメントを配布する場でもありますし、そのまま使えるスクリプトなども登録されています。

最近ではCPANにアップロードせず、GitHubなどに置かれたままになっている情報もありますが、その成立の経緯からも、多くのPerlユーザにとって重要な情報はたいていCPANか、Perlの公式サイトからたどれるようになっています。手元の環境では解決できない問題があったらまずはCPANを覗いてみるのが調べものの常道です。

CPANからモジュールをインストールする

CPANに登録されているモジュールは、本連載第21回でも紹介があったcpanmコマンドを使ってインストールするのが簡単です。

plenvコマンドを利用している場合は、次のコマンドでcpanmコマンドをインストールできます。

$ plenv install-cpanm

単体でインストールする場合は、curlコマンドや、LWPモジュールに付属するlwp-requestコマンドなどを利用してcpanmコマンドのソースコードを取得し、それをコマンドラインから実行して任意のモジュール(この場合はApp::cpanminusモジュール自身)をインストールする、という手順を踏みます。

$ curl -kL http://cpanmin.us | \
  perl - App::cpanminus
$ lwp-request http://cpanmin.us | \
  perl - App::cpanminus

最新のCPANミラーを用意する

出張などでネットワークがない、または不安定な環境で作業をすることが多い人は、CPAN::Miniモジュールに付属するminicpanコマンドを使ってCPANの最新リリース(約3GB)を手元にコピーしておくと、いざというときに困らずに済みます。

$ minicpan \
  -l ~/minicpan \
  -r http://www.cpan.org/

minicpanコマンドで取り込んだCPANミラーからインストールする場合は、cpanmコマンドの--mirror-onlyオプションを利用します。次の例は、perldocコマンドのもとになっているPod::Perldocモジュールを、ローカル環境のMini CPANから最新版に更新します。

$ cpanm --mirror-only ~/minicpan \
  Pod::Perldoc

CPAN->grepを使う

perldocコマンドとgrepコマンドなどを駆使すると、インストール済みモジュールのソースコードをPerlのサンプルコード集として活用することもできますが、CのライブラリやPerlのC APIを使っているモジュールの場合、該当部分はコンパイルされた状態でインストールされるので、ソースコードは検索できません(コンパイルの必要がない、Perlで書かれた部分のみ検索できます⁠⁠。

このようなC APIのソースコードや、インストールしていないモジュールのソースコードを検索したい場合は、CPAN->grepというサイトを利用するのが便利です。このサイトでは、CPANで公開されているすべてのディストリビューションの最新安定版(要するにMini CPAN)のソースコードや、テスト、付随するドキュメント類などを正規表現で検索できます。

ディストリビューションの中身を調べる

CPAN->grepは検索も高速で便利なサイトですが、特定のモジュールのソースコードを確認したいだけなら、CPANからディストリビューションをダウンロードしてきて、その中身を調べるほうが簡単です。

cpanmコマンドの--lookオプションを使うと、作業ディレクトリに特定のモジュールを含むディストリビューションをダウンロード、展開した状態でインストール処理が終了します。

$ cpanm --look DBD::SQLite

ディレクトリツリーを確認すると、Perlで書かれたソースファイルだけでなく、同梱されているCのソースやヘッダ、各種のテスト、インストールに必要な各種メタファイルなどが確認できます。必要に応じて、ソースコードを検索するなり、ビルドしてテストを実行するなりしてみてください。この環境なら、手動でインストールしない限りインストール済みのモジュールに影響を与える心配はありません。納得がいくまで動作確認用のコードを埋め込むことができます。

必要な作業が済んだら、シェルを抜けると作業前の状態に戻ります。実験に使った環境は一定の日数が過ぎると削除されます。

CPAN検索サイトを活用する

CPANの検索サイトには、配布ファイルを確認するだけではわからない情報もリンクされています。伝統的なsearch.cpan.org と、機能が充実しているMetaCPANのどちらを重用するかは人それぞれですが、図1のようにディストリビューションのページ[9]を開くと、次のような情報を確認できます。

図1 MetaCPANのディストリビューションページの例
図1 MetaCPANのディストリビューションページの例
https://metacpan.org/release/Plack

CPAN Testersのテスト結果

Perlは非常に多くの環境に移植されているため、モジュールの作者がすべての環境で動作確認を行うのは非現実的です。そのため、有志が専用のテスト環境を用意し、さまざまなバージョン、設定のPerlとOSを組み合わせて、ディストリビューションに付属しているテストの結果をレポートしています[10]⁠。

CPAN検索サイトでは、このレポートを集約した結果を確認できます。レポートの詳細は検索サイトからリンクされているCPAN Testersのサイトで確認できます。もちろんオールグリーン(全テスト成功)が理想ですが、結果はテストの質にも左右されるため、むしろどんな環境でレッド(テスト失敗)が出ているかに注意してください。

課題管理システムに登録されているバグの数

CPAN検索サイトからは、課題管理システムに登録されている課題の数も確認できます[11]⁠。詳細は検索サイトからリンクされている課題管理システムで確認できます。

こちらも未着手の課題が少ないに越したことはありませんが、使われていないから課題がない場合もあります。単に件数を見るのではなく、解決済みの課題の数や解決された時期などに注意しましょう。

ユーザの評価

CPAN検索サイトでは、CPAN Ratingsに登録されたモジュールの平均評価やレビュー数を確認できます。モジュールの善し悪しは評価する人が求めるものに大きく左右されるため、鵜呑みにはできませんが、参考程度にはなるかもしれません。

バージョン間の差分情報

CPANディストリビューションには何らかの形で更新履歴をまとめたファイルを同梱することになっているのですが、場合によっては更新履歴がなかったり、そこに書かれていない変更が周囲のモジュールに大きな影響を与えることもあります。

CPAN検索サイトでは、ディストリビューションのバージョンごとの差分情報を確認できます。

search.cpan.orgの場合は「Other Tools」というリンクをクリックすると、差分を取得できるページに遷移します。MetaCPANの場合はサイドバーにある「Diff with version」というプルダウン経由で差分をとれます。

テストやCのソースコードなど

CPAN検索サイトでは、ディストリビューションに同梱されているすべてのファイルを閲覧できます。テストやCのソースコードなど、一覧ページから直接リンクされていないファイルについては、search.cpan.orgの場合は「MANIFEST⁠⁠、MetaCPANの場合はサイドバーの「Browse」というリンクをたどっていくと、目的のファイルを見つけられます。

最新のモジュールを追いかける

CPANに最近登録されたモジュールはさまざまな手段で確認できます。

速報性を重視するなら、FriendFeedのCPAN botや、Twitterの@cpan_newというボットアカウントが、登録後数分でMetaCPANへのリンクをつぶやいています。

FrePANというサイトでは最近登録されたディストリビューションを更新履歴の差分付きで確認できます。

MetaCPANのRecentページでは、新規のディストリビューションと、最近更新された既存のディストリビューションを分けて表示できます。

筆者もTwitterの@perlnewsというボットアカウントを使って、最近登録されたディストリビューションを含む、さまざまなPerl関連リソースの更新情報をつぶやいています。

<続きの(3)8月20日(水)公開です。>

おすすめ記事

記事・ニュース一覧