2013年頃に登場した plenvですが, 2018年となった今でもPerlの環境構築におけるデファクトスタンダードの立ち位置を維持しています.
この記事では, plenvを使ったモダンなPerlの環境構築の手法について紹介します.
またplenvのような形で, 様々な言語のために開発された**envを束ねて管理できるanyenvを利用して, plenvを導入する方法についても紹介します.
plenvのインストール
Git
$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv $ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/ $ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.your_profile $ echo 'eval "$(plenv init -)"' >> ~/.your_profile $ exec $SHELL -l
GitHubからplenvと, 実際にPerlのインストールを実施するときに必要なperl-buildをcloneしてパスを通し, シェルを起動する際にplenv init -を実行するように設定します.
なお, ~/.your_profileの部分は, 利用しているシェルに応じて適切な設定ファイルに書き込むように読み替えましょう.
Homebrew
macOSを使っている場合, Homebrewでのインストールも可能です.
$ brew update $ brew install plenv $ brew install perl-build
この後, Gitを利用したインストールと同じく,
eval "$(plenv init -)"
を, 適切な設定ファイルに書き込めばインストール完了です.
anyenvを利用したplenvのインストール
plenvはPerlの開発環境をするにあたって必須と言えるツールですが, 同様のツールがRubyの場合はrbenv, Pythonの場合はpyenv, Node.jsの場合はndenv... といった具合にそれぞれ開発されています.
それぞれ丁寧にインストールしてもいいのですが, **envを統一して管理できるように開発されたanyenvというツールが存在するので, Perl以外にもRubyやPython, Node.jsの環境も構築したいのであれば, anyenvを利用してplenvをインストールするのがおすすめです.
$ git clone https://github.com/riywo/anyenv ~/.anyenv $ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.your_profile $ echo 'eval "$(anyenv init -)"' >> ~/.your_profile $ exec $SHELL -l
続いて, anyenvを利用して, plenvをインストールします.
$ anyenv install plenv
これでplenvが利用できるようになりました. 実際の使い方については, GitやHomebrewで(anyenvを利用せず)plenvをインストールしたときと同様です.
使い方
ヘルプの確認: help
$ plenv help Usage: plenv <command> [<args>] Some useful plenv commands are: commands List all available plenv commands local Set or show the local application-specific Perl version global Set or show the global Perl version shell Set or show the shell-specific Perl version install Install a Perl version using the perl-build plugin uninstall Uninstall a specific Perl version rehash Rehash plenv shims (run this after installing executables) version Show the current Perl version and its origin versions List all Perl versions available to plenv which Display the full path to an executable whence List all Perl versions that contain the given executable list-modules List cpan modules in current perl migrate-modules Migrate cpan modules from other version install-cpanm Install cpanm See `plenv help <command>' for information on a specific command. For full documentation, see: https://github.com/tokuhirom/plenv#readme
plenv helpでヘルプを閲覧できます. また, plenv help <command>で, 任意のコマンドのヘルプを閲覧することができます.
plenvのバージョン確認: --version
$ plenv --version plenv 2.2.0-14-gb2ea2fd
plenv --versionで, 現在利用しているplenvのバージョンを確認できます.
Perlのインストール: install
利用可能なバージョンの確認
$ plenv install -l
Available versions:
5.6.0
5.6.1-TRIAL1
5.6.1-TRIAL2
5.6.1-TRIAL3
(中略)
5.26.0
5.26.1-RC1
5.26.1
5.27.1
5.27.2
5.27.3
5.27.4
5.27.5
5.27.6
5.27.7
5.27.8
5.27.9
plenv install -lで, 現在インストール可能なperlのバージョンを表示することができます.
インストールの実行
plenv install <version>で, 指定したバージョンのperlをインストールすることができます.
$ plenv install 5.26.1
このとき, --asオプションで別名を付けることが可能です.
$ plenv install 5.26.1 --as 5.26
このコマンドでは, Perlのバージョン5.26.1を, 5.26という名前でインストールします.
現在有効なPerlのバージョン
$ plenv version 5.26.1 (set by /home/username/.anyenv/envsplenv/version)
plenv versionで, plenvによってインストールされ, 現在有効になっているPerlのバージョン(perlコマンドを実行したときに呼び出されるPerlのバージョン)を表示します.
また, (set by ...)の部分は, 現在有効になっているPerlのバージョンが, どこで設定されたかを示しています(後述).
plenvが使用するPerlのバージョンの設定
plenvは, 以下の順番で使用するperlのバージョンを決定します.
- 環境変数
PLENV_VERSION - 今のディレクトリか, 上位ディレクトリのローカル設定(
.perl-version) - グローバル設定(
~/.plenv/version,anyenvを利用してplenvをインストールした場合は~/.anyenv/envs/plenv/version) - システムのPerl
環境変数: PLENV_VERSION
$ plenv version 5.26.1 (set by /home/username/.anyenv/envs/plenv/version) $ export PLENV_VERSION=5.26.0 $ plenv version 5.26.0 (set by PLENV_VERSION environment variable)
環境変数PLENV_VERSIONに使用したいバージョンをセットすると, 常にそのバージョンのperlが使用されるようになります.
また, 環境変数PLENV_VERSIONは, plenv shell <version>コマンドでセットすることができます.
$ plenv version 5.26.1 (set by /home/username/.anyenv/envs/plenv/version) $ plenv shell 5.26.0 $ plenv version 5.26.0 (set by PLENV_VERSION environment variable)
plenv shell --unsetで, 環境変数PLENV_VERSIONを無効にすることもできます.
$ plenv shell --unset $ plenv version 5.26.1 (set by /home/username/.anyenv/envs/plenv/version)
ローカル設定
$ cd ~/hoge/fuga $ pwd /home/username/hoge/fuga $ plenv version 5.26.1 (set by /home/username/.anyenv/envs/plenv/version) $ plenv local 5.26.0 $ plenv version 5.26.0 (set by /home/username/hoge/fuga/.perl-version) $ plenv local 5.26.0 $ cd ../ $ pwd /home/username/hoge $ plenv version 5.26.1 (set by /home/username/.anyenv/envs/plenv/version)
plenv local <version>で, ローカル設定を有効にします.
また, plenv localで, 今いるディレクトリで有効となるローカル設定を確認することができます.
このコマンドが実行されると, カレントディレクトリに.perl-versionというファイルが作成されます.
ローカル設定が有効となるのは, .perl-versionがあるディレクトリよりも下位のディレクトリなので, .perl-versionがあるディレクトリから1つ上のディレクトリに移動すると, そのローカル設定は適用されなくなります.
$ plenv version 5.26.0 (set by /home/username/hoge/fuga/.perl-version) $ plenv local --unset $ plenv version 5.26.1 (set by /home/username/.anyenv/envs/plenv/version)
plenv local --unsetで, ローカル設定を解除できます(つまり.perl-versionを削除します).
グローバル設定
$ plenv global 5.26.1 $ plenv global 5.26.1
plenv global <version>で, グローバル設定を変更できます.
また, plenv globalで, 現在設定されているグローバル設定を確認することができます.
環境変数PLENV_VERSIONやローカル設定が有効でない場合, このグローバル設定で設定されたバージョンのPerlが常に利用されます.
インストール済みのPerl一覧: versions
$ plenv versions system * 5.26.1 (set by /home/username/.anyenv/envs/plenv/version)
plenv versionsで, plenvによってインストールされたPerlのバージョンと, 現在どのバージョンが有効になっているか(prefixに*が付いているもの)を確認することができます.
設定ファイルの表示: version-file
$ plenv version-file /home/username/.anyenv/envs/plenv/version
plenv version-fileで, 現在のディレクトリで有効になるPerlが, どのファイルで指定されるかを表示することができます(.perl-versnionファイルがあればそのパスを, なければ(= グローバル設定が有効なら)/path/to/plenv/versionなどが表示されます).
これはあくまで, ローカル設定/グローバル設定がどのファイルで指定されているかを示すものなので, 環境変数PLENV_VERSIONやplenv shellなどでPerlのバージョンを指定している場合であっても.perl-versionないしversionへのパスが表示されます.
Perlのアンインストール: uninstall
$ plenv uninstall 5.26.0
plenv uninstall <version>で, plenvによって導入済みのPerlを削除することができます.
cpanmのインストール: install-cpanm
$ plenv install-cpanm
plenv install-cpanmで, 現在有効になっているバージョンのPerlに, cpanm(App::cpanminus)をインストールすることができます.
コマンドのフルパス確認: which
$ which cpanm /home/username/.anyenv/envs/plenv/shims/cpanm $ plenv which cpanm /home/username/.anyenv/envs/plenv/versions/5.26.1/bin/cpanm
plenv which <command>を使うことで, 現在有効になっているバージョンのPerlにインストールされた任意のコマンドへのフルパスを表示できます.
コマンドがインストール済みのPerlのバージョン: whence
$ plenv whence cpanm 5.26.1
plenv whence <command>で, 任意のコマンドが実行できる(インストール済み)のPerlのバージョンの一覧を表示できます.
上記のコマンドでは, cpanmが実行できる, つまりcpanmがインストール済みのPerlのバーションの一覧を表示しています.
バージョン間のモジュールの移動: migrate-modules
$ plenv migrate-modules 5.26.0 5.26.1
plenv migrate-modules <from> <to>で, <from>のバージョンのPerlにインストール済みのモジュールを, <to>のバージョンのPerlにインストールすることができます.
インストール済みのモジュール一覧: list-modules
$ plenv list-modules
Algorithm::Diff
Algorithm::Evolutionary
Algorithm::Permute
Amon2
(中略)
multidimensional
namespace::autoclean
namespace::clean
strictures
syntax
plenv list-modulesで, 現在有効なperlのバージョンに既にインストールされているモジュールの一覧を表示できます.