Masteries

技術的なことや仕事に関することを書いていきます.

App::cpanminusやCartonでDeveloper Releaseなモジュールをインストールする

Perlのモジュール管理システムCPANでは, バージョンナンバーに「_」が含まれるものはDeveloper Release(試験的なリリース)として扱われるようになっています(詳細はここなどを参照). 「機能的にまだベータクオリティだが, CPANにアップしておく」という場合に用いられます.

例えば, 最近個人的に着目しているAnikiというORM(Mobile Factoryのkarupanerura師製)もCPAN上にDevelopment Releaseされています.

f:id:papix:20150810194647p:plain

▲ metacpanにおけるAniki-0.02_02の様子. _が入っているのでライブラリ名が赤字になっていて, Developer Releaseであることがわかる(通常は黒色).

例えばAnikiの場合, 現時点ではCPANへのリリースが全てDeveloper Releaseになっているので, cpanmコマンドでインストールしようとすると, 「見つけられません」というエラーが表示されます.

$ cpanm Aniki
! Finding Aniki on cpanmetadb failed.
! Finding Aniki () on mirror http://www.cpan.org failed.
! Couldn't find module or a distribution Aniki

※余談として, 上記のような場合でもしDeveloper Releaseではないリリースが1つ以上存在する場合は, その中で一番新しいものがインストールされるようになっています.

この問題の解決策としては, Aniki@0.02_08のようにバージョン指定をすればOKです.

$ cpanm Aniki@0.02_08
--> Working on Aniki
Fetching http://www.cpan.org/authors/id/K/KA/KARUPA/Aniki-0.02_08.tar.gz ... OK
Configuring Aniki-0.02_08 ... OK
Building and testing Aniki-0.02_08 ... OK
Successfully installed Aniki-0.02_08
1 distribution installed

cpanfileからCartonのcartonコマンドを利用する場合も同様で, cpanfileにおいて次のように記載しておかなければ, carton installに失敗します.

requires 'Aniki', '== 0.02_08';

Developer Releaseのモジュールをプロダクション環境で利用することは稀かとは思いますが, 趣味プロダクトや技術調査等ではあり得なくはないと思うのでメモしておきます.