plenv + cpanm + carton でPerlの開発環境を構築する

Perl
Perl情弱の@HIROCASTERでございませう。

perl
GrowthForecastとか羨ましすぎるので、最近のPerlの環境はどうやってつくるのか調べた。
今回はplenv+cpanm+cartonという環境を構築します。
Rubyでいうところのplenv+gem+bundleという感じである。

環境はUbuntu 12.04.2 LTSとMac(Mountain Lion)での確認をしています。

スポンサーリンク

plenv

まず、OSに付属しているPerlなどを利用して、わけわからないことになって、挫折するのがいつものパターン。
そこで、Perlを複数バージョンインストールして、OS付属のPerlとは別で管理できるplenvをインストールする。
Rubyでいうところのrbenvのようなもの。
CPANからインストールできるらしいけど、今回はGitでcloneしてインストールすることにする。

$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv

次にplenvのコマンドなどにPATHを通す。利用しているshellにあわせて設定を追加する。
~/.zshrc

export PATH="$HOME/.plenv/bin:$PATH"
eval "$(plenv init -)"

以上を設定して、shellを再起動すればplenvコマンドが利用できます。
shellを再起動せずに、そのまま利用する為には

$ exec $SHELL -l

とする。

Perlのインストール

ここまででplenvコマンドが利用できるようになっているはずなので、導入できるPerlのバージョンを確認する。

$ plenv available
perl-5.17.8
perl-5.16.2
perl-5.14.3
perl-5.12.5perl-5.10.1
perl-5.8.9perl-5.6.2
perl5.005_04
perl5.004_05
perl5.003_07

Perlはx.y.zのy番号が奇数が開発版で偶数が安定版とのことなので、今回は5.16.2をインストールする。

$ plenv install 5.16.2 -Dusethreads
Creating /tmp/perl-build-20130216-13051013140(building directory)
Install 5.16.2 to /home/hirocaster/.plenv/versions/5.16.2
Fetching 5.16.2 as /tmp/XR9A5hH1Z9/perl-5.16.2.tar.bz2
..... 省略 .....

特に指定がなければ、今後は今回インストールした5.16.2を利用する設定をする。

$ plenv global 5.16.2

shellを再起動すれば…

$ perl -v
This is perl 5, version 16, subversion 2 (v5.16.2) built for i686-linux-thread-multi

無事に5.16.2が利用できる環境が構築できました。

Mac(Mountain Lion)の場合はエラーするので…

MacにOSに付属しているPerlのモジュールModule::Metadataのバージョンが低いため、plenv install中に下記の様にエラーを発生する。(homebrewからのインストールだったら、この辺の問題は解決してくれているのかな…?)

$ plenv install 5.16.2 -Dusethreads
Creating /var/folders/jg/kx4b7v1d2x792nk4kyrk7kx00000gn/T/perl-build-20130216-23142597760(building directory)
Install 5.16.2 to /Users/hirocaster/.plenv/versions/5.16.2
Fetching 5.16.2 as /var/folders/jg/kx4b7v1d2x792nk4kyrk7kx00000gn/T/Qi677TqPu3/perl-5.16.2.tar.bz2
Downloaded http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/perl-5.16.2.tar.bz2 to /var/folders/jg/kx4b7v1d2x792nk4kyrk7kx00000gn/T/Qi677TqPu3/perl-5.16.2.tar.bz2.
rm -f config.sh Policy.sh
/usr/bin/perl -Mlib=/Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5/ /Users/hirocaster/.plenv/bin/../share/plenv/bin/patchperl
version version 0.87 required--this is only version 0.82 at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Module/Metadata.pm line 20.
BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Module/Metadata.pm line 20.
Compilation failed in require at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Module/Load/Conditional.pm line 14.
BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Module/Load/Conditional.pm line 14.
Compilation failed in require at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//IPC/Cmd.pm line 50.
BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//IPC/Cmd.pm line 50.
Compilation failed in require at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Devel/PatchPerl.pm line 13.BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5//Devel/PatchPerl.pm line 13.
Compilation failed in require at /Users/hirocaster/.plenv/bin/../share/plenv/bin/patchperl line 12.
BEGIN failed--compilation aborted at /Users/hirocaster/.plenv/bin/../share/plenv/bin/patchperl line 12.
Installation failure: /usr/bin/perl -Mlib=/Users/hirocaster/.plenv/bin/../share/plenv//lib/perl5/ /Users/hirocaster/.plenv/bin/../share/plenv/bin/patchperl at /Users/hirocaster/.plenv/bin/../share/plenv/lib/perl5/Perl/Build.pm line 208.

しかたないので、CPANモジュールをOS付属側にインストールする。

$ sudo /usr/bin/cpan
(省略)
cpan > install Module::Metadata

cpanm

最近はCPANのモジュールをcpanmで導入するらしいので、plenv環境で利用できるようにする。
plenvで専用のコマンドが用意されているので実行する。

$ plenv install-cpanm
Installing cpanm to current perl
--> Working on App::cpanminus
  Fetching http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.5021.tar.gz ... OK
  Configuring App-cpanminus-1.5021 ... OK
  Building and testing App-cpanminus-1.5021 ... OK
  Successfully installed App-cpanminus-1.5021
  1 distribution installed
$ cpanm -v
  cpanm (App::cpanminus) 1.5021 on perl 5.016002 built for i686-linux-thread-multi
  Work directory is /home/hirocaster/.cpanm/work/1360988857.2069
  You have make /usr/bin/make
  You have /usr/bin/wget
  You have /bin/tar: tar (GNU tar) 1.26

carton

RubyでいうところのBundlerのように、ディレクトリ以下に記述されたバージョンのCPANモジュールを管理してくれるcartonを導入する。

$ plenv exec cpanm Module::Install
$ plenv exec cpanm carton
$ plenv exec carton
  Usage: carton <command>
  where <command> is one of:
    bundle, check, exec, help, install, list, show, tree, uninstall, update, usage, version
    Run carton -h <command> for help.

cartonでModule::Installを利用するようなので、一緒にインストールする。

$ plenv exec cpanm Module::Install

plenv+cpanm+carton

これでplenv+cpanm+cartonで環境ができた。
plenvで好きなバージョンのPerlを利用して、cartonで指定した必要なCPANモジュールを導入すれば、OSのPerl環境に依存することなくPerlを動作させることができる。

初めてのPerl 第6版

初めてのPerl 第6版

Randal L. Schwartz、brian d foy、Tom Phoenix、近藤 嘉雪

タイトルとURLをコピーしました