おそらくはそれさえも平凡な日々

plenvを使ってプロジェクト用のPerlをビルドする方法とそのスクリプト

ローカル開発の環境ではあんまcarton使う必要ないなーとか思っていて実際僕は使っていないんですが、みんなまじめにCarton入れて、いちいち% carton execとか打ったりとか独自エイリアス作ったりしてて大変そうだなーとか思っていたので以下の様なスクリプトを書いた。

#!/bin/sh
# 開発用にプロジェクト用のperlをbuildするやつです
set -e
cd $(dirname $0)
MYPROJ_PERL='perl518-myproj'
if [[ $(plenv versions | grep "$MYPROJ_PERL") ]] ; then
echo "$MYPROJ_PERL already installed"
else
plenv install 5.18.2 --as=$MYPROJ_PERL -DDEBUGGING=-g -j 4
echo $MYPROJ_PERL > .perl-version
plenv rehash
plenv install-cpanm
fi

プロジェクトリポジトリの直下なりに置いておいて叩いてもらうと、プロジェクト用のPerlがインストールされる。適当に-j 4してるけど結構早くて手元の環境だと10分位でビルドできた。

以下の2点がミソ。

  1. plenv--asオプションを使いプロジェクト固有の名前でPerlをビルドする
  2. .perl-versionファイルをプロジェクトディレクトリに配置して上の名前を指定する

これで、プロジェクトディレクトリに入れば自動的にプロジェクト用のPerlを見てくれるようになります。.perl-versionはリポジトリにコミットしないほうが良いのでignoreしておく。

あとは、% carton installとかしないでも、% cpanm --quiet --with-develop --notest --installdeps .とかやってそのPerlのsite_perlにガンガンCPANモジュールをinstallしていくことができる。

これで

  • ちょっとした作業をPerlでやるときに、このモジュール、グローバルの方のPerlに入ってなかったわー
  • carton execとか打つのタルいわー

みたいなところから解消される。多少はローカル開発環境用のPerlが汚れてしまう的な問題は出てきてしまうと思うけど、その辺はCIサーバーに任せればいいのかなーと思う。

% cpanm --quiet --with-develop --notest --installdeps .とかはシェル履歴とかからたどってもいいけど、Daikufileにtaskとして登録してる。Daikuの話はまた次回。

created at
last modified at

2014-05-09T20:03:07+0900