Perl Hackers Hub

第21回Carton & cpanm―Perlモジュール管理最新事情(2)

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

cpanm

cpanmは、宮川達彦さんを中心に開発している、CPANモジュール用のコマンドラインツールです。

モジュールのテストやインストールができるのはcpanコマンドと変わらないのですが、大きな違いとして、ほかのモジュールに依存しないので簡単に導入でき、初期設定も不要ですぐ利用できることが挙げられます。

cpanコマンドではそれなりの項目を初期設定する必要がありますが、初めて使う場合はそもそも何をどう設定すればよいかわからなかったりするので、cpanmが特に何も設定を行わずに利用できるのは大きなメリットです。特にPerlを初めて使う場合に、よく「CPANの使い方がわからない」という話を聞くことも多いので、導入と利用が簡単なのはとても大事です。

なお、以降の説明はcpanm 1.6109を前提にしています。

cpanmの導入

システムperlで使う場合

あらかじめOSに同梱されているperl(システムperl)と一緒に使う場合は、以下のコマンドを実行するとインストールできます。

$ curl -L http://cpanmin.us | perl - --sudo App::cpanminus

なお、システムperlでcpanmを使う場合は、以降のコマンド例でも--sudoオプションが必要になります。

ローカルperlで使う場合

また、Perlbrewplenvなどを使って自身のホームディレクトリ以下にインストールしたperl(ローカルperl)にインストールする場合は、--sudoオプションを外して次のコマンドを実行してください。

$ curl -L http://cpanmin.us | perl - App::cpanminus

単体で使う場合

Perlの実行パスにインストールできない制約があるといった場合には、次のように1ファイルで実行可能なcpanmのコピーを手元にダウンロードすることもできます。

$ curl -LO http://xrl.us/cpanm
$ chmod +x cpanm

cpanmのアップデート

なお、一度インストールしたcpanmは、--selfupgradeオプション付きで実行すると自分自身をアップデートできるので、更新も簡単です。

$ cpanm --self-upgrade

cpanmのオプション

cpanmが導入できたら、cpanmコマンドを実行することで、モジュールのダウンロード、ビルド、テスト、インストールといったさまざまな操作ができます。

cpanmはさまざまなオプションを持っているので、-hオプションやperldocに目を通しておくとよいでしょう。

$ cpanm -h
$ perldoc cpanm

モジュールのインストール

モジュールのインストールは対象の指定方法がさまざまで、モジュール名、URL、tarballのパス、ローカルディレクトリなどいろいろなところからインストールできるようになっています。cpanmのPODからいくつかの例を引用します。

$ cpanm Test::More
$ cpanm MIYAGAWA/Plack-0.99_05.tar.gz
$ cpanm http://example.org/LDS/CGI.pm-3.20.tar.gz
$ cpanm ~/dists/MyCompany-Enterprise-1.00.tar.gz
$ cpanm .

また、最近のcpanmで、インストール周りに大きな機能追加が2つありました。

Gitサポート

1つ目はGitサポートです。バージョン1.6000 でgit://で始まるgitプロトコルURLが、そして1.6106でgit@github.com:……のようなgit-ssh URLがサポートされたので、Gitリポジトリからモジュールがインストールできるようになりました。

また、末尾に@hogeという形式でブランチ名またはタグ、あるいはコミットハッシュを指定することで、特定の状態のものをインストールできるようにもなっています。

$ cpanm git://github.com/plack/Plack.git
$ cpanm git://github.com/plack/Plack.git@1.0000 # タグ
$ cpanm git://github.com/plack/Plack.git@devel  # ブランチ
$ cpanm git@github.com:plack/Plack.git

バージョン指定のサポート

2つ目はバージョン指定のサポートです。~@を使ってバージョン番号や範囲指定が可能になりました。以下にcpanmのPODから例を引用します。

$ cpanm Plack~1.0000                # 1.0000 or later
$ cpanm Plack~">= 1.0000, < 2.0000" # latest of 1.xxxx
$ cpanm Plack@0.9990                # ~"== 0.9990"

~に続けてバージョン番号を指定すると、必要なミニマムバージョンを指定することになります。また「A以上B未満」といった範囲指定も~">= A, というように書くことができます。@に続けてバージョン番号を指定した場合は、そのバージョンのみの指定という意味になり、これは~"== VERSION"という書き方のショートカットです。

インストールオプション

テストなし、強制インストール─⁠─ --notest、--force

Perlモジュールのインストールでは、ビルド、テスト、インストールという順番で暗黙的に処理が実行されますが、場合によってはテストフェーズを省略したり、あるいはテストがFAILしても自己責任でインストールしたいこともあり得ます。このようなケースではリスクを承知のうえで、--notest--forceオプションを使ってインストールを進めることができます。

$ cpanm --notest Test::More
$ cpanm --force Test::More

インストール実行中の出力の制御─⁠─ --verbose、--quiet

インストール実行中の出力を詳細化あるいは抑制するには、--verbose--quietが利用できます。

--verboseで出力すると、次のようにメッセージが詳細になります。

$ cpanm --verbose Test::More
cpanm (App::cpanminus) 1.6109 on perl 5.016003 built for
darwin-2level
Work directory is /Users/ikasam_a/.cpanm/
work/1367587171.3275
You have make /usr/bin/make
(省略)
Fetching http://www.cpan.org/authors/id/M/MS/MSCHWERN/
Test-Simple-0.98.tar.gz ... OK
Unpacking Test-Simple-0.98.tar.gz
(省略)

一方--quietだとこんなに出力がおとなしくなります。

$ cpanm --quiet Test::More
Successfully installed Test-Simple-0.98
1 distribution installed

ミラーサイトからインストール─⁠─ --mirror、--mirror-only

モジュールを特定のCPANミラーサイトからインストールしたい場合は--mirrorオプションでミラーサイトを指定できます。たとえばプロジェクト独自のDarkPAN[1]を持っている場合は、このオプションと--mirror-onlyオプションを併用して、指定したミラーサイトのみを使うようにすると便利です。

$ cpanm --mirror ~/minicpan Test::More
$ cpanm --mirror ~/minicpan --mirror-only Test::More

再インストール ─⁠─ --reinstall

すでに導入済みのモジュールを再インストールしたい場合は--reinstallオプションを使います。強制的に入れなおしてくれるので便利です。

$ cpanm --reinstall Test::More
(省略)
Successfully reinstalled Test-Simple-0.98
1 distribution installed

開発版のインストール ─⁠─ --dev

また、最近追加になったオプションに--devというのがあります。現在は試験的な追加となっていますが、このオプションを使うとDEVELOPER RELEASEされているモジュールをインストールできます。いち早く開発版を試したいときに重宝します。

$ cpanm --dev App::cpanminus

インストール以外の操作

テストのみ実行 ─⁠─ --test-only

インストール以外の利用方法もいくつかあります。たとえば--test-onlyオプションではテストを実行するだけでインストールは行いません。

$ cpanm --test-only Test::More
(省略)
Successfully tested Test-Simple-0.98

依存関係のツリー表示、tarballのダウンロード
─⁠─ --scandeps、--save-dists

--scandepsを使うとモジュールの依存関係をツリー表示でき、--save-distsオプションを使うと指定したモジュールのtarballをダウンロードできます。

$ cpanm --scandeps Plack
Plack-1.0024
\_ Test-Requires-0.06
\_ Try-Tiny-0.12
(省略)

これ以外にもまだまだオプションはありますので、必要に応じてperldoc cpanmman cpanmで参照してください。

<続きの(3)こちら。>

おすすめ記事

記事・ニュース一覧