plenvを使ってプロジェクト用のPerlをビルドする方法とそのスクリプト
ローカル開発の環境ではあんまcarton使う必要ないなーとか思っていて実際僕は使っていないんですが、みんなまじめにCarton入れて、いちいち% carton exec
とか打ったりとか独自エイリアス作ったりしてて大変そうだなーとか思っていたので以下の様なスクリプトを書いた。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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点がミソ。
plenv
の--as
オプションを使いプロジェクト固有の名前でPerlをビルドする.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の話はまた次回。