Masteries

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

plenvを使ったPerl環境構築 〜2018年度版〜

2013年頃に登場した plenvですが, 2018年となった今でもPerlの環境構築におけるデファクトスタンダードの立ち位置を維持しています.

github.com

この記事では, 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の部分は, 利用しているシェルに応じて適切な設定ファイル(bashなら~/.bash_profile, zshなら~/.zshrcなど)に書き込むように読み替えましょう.

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をインストールするのがおすすめです.

github.com

$ 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_VERSIONplenv 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のバージョンに既にインストールされているモジュールの一覧を表示できます.