読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【perl】plenvでperl x cpanm x carton環境を作る - mac編

perl mac plenv Homebrew carton

はじめに

perl環境はperlbrewで作っていましたが、plenv良さそうってことでplenvってみるメモ。

このメモのゴールは特定のディレクトリに特定のperlバージョンを入れて
ついでにcpanモジュールも入れてみるまでです。

アジェンダ

  1. homebrewインストール
  2. plenvとperl-buildのインストール
  3. plenv使ってみる
    • perlインストール前に確認
    • perlインストール
    • perlインストール後に確認
  4. plenvのバージョン切り替え挙動について
  5. cpanmインストールしてみる
  6. carton使ってみる

1. homebrewインストール

当然ですがhomebrewでインストールするので、homebrewが入っている前提です。
homebrewについては別途単体で書いてますのでそちらを参考に、、、ということで割愛します。

Mac OS XにHomebrewインストール。command line developer tools入れたり使い方メモったり(install、update、upgradeなど)

2. plenvとperl-buildのインストール

ここからが本題ですね。

plenvのインストール
※ お決まりのupdate
$ brew update

※ インストール
$ brew install plenv
補足

後述するperl-buildも合わせてインストールしないと動きません。
ためしにこの状態でplenv install -l(利用可能なバージョンを表示)をやってみると
こんな感じになります。

$ plenv install -l
plenv: Please install perl-build. See https://github.com/tokuhirom/plenv/blob/master/README.md#installation
perl-buildのインストール
$ brew install perl-build
補足)perl-buildとはなんぞや

Perlのインストールを実行するやつ。
こいつを入れることでplenvからperl-buildが使えるようになり
'plenv install'でPerlをインストールすることができるようになる。
参考:続・plenvを使ってみた

設定

シェルの起動時に'plenv init'コマンドを実行するように
~/.bash_profileあたりに設定を追記します。

$ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(plenv init -)"' >> ~/.bash_profile

3. 使ってみる

perlインストール前に確認
※ plenvのバージョン確認
$ plenv --version
plenv 2.1.0

※ インストール済みのperlバージョン一覧確認
$ plenv versions
* system (set by /Users/hoge/.plenv/version)

※ 現在使用しているperlバージョンを確認
$ plenv version
system (set by /Users/hoge/.plenv/version)

※ ~/.plenvディレクトリ内を確認
$ tree ~/.plenv -d -L 2
/Users/hoge/.plenv
└── shims

※ システムperlのバージョン確認
※ システムパールのバージョンなのでインストール後にも変わらないはず
$ perl -v
This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)

※ 利用可能なバージョンを表示
$ plenv install -l
Available versions:
 5.6.0
 5.6.1-TRIAL1
 5.6.1-TRIAL2
 5.6.1-TRIAL3
 ・・・省略・・・
 5.7.0
 5.7.1
 5.21.10
 5.21.11
perlインストール

perlのインストールなので時間かかりますが3分ほどでした。

$ plenv install 5.21.1

※ global設定(詳細は後述)
$ plenv global 5.21.1
perlインストール後に確認
※ インストール済みのperlバージョン一覧確認
$ plenv versions
  system
* 5.21.1 (set by /Users/hoge/.plenv/version)

※ 現在使用しているperlバージョンを確認
$ plenv version
5.21.1 (set by /Users/hoge/.plenv/version)

※ ~/.plenvディレクトリ内を確認
$ tree ~/.plenv -d -L 2
/Users/hoge/.plenv
├── build
│   └── perl-5.21.1
├── cache
├── shims
└── versions
    └── 5.21.1

※ システムperlのバージョンは変化しない
※ → 実際はsource ~/.bash_profileすると変わります
$ perl -v
This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)

4. plenvのバージョン切り替え挙動について

これは参考サイトのまんま引用させて頂きますが
plenvは以下の順番で使用するperlバージョンを決定するらしいです。

  1. 環境変数'PLENV_VERSION'
  2. 今のディレクトリか, 上位ディレクトリのローカル設定('.perl-version')
  3. グローバル設定('~/.plenv/version')
  4. システムのperl

今の時点でplenv versionと打った際に5.21.1と表示されているのは
3番目のグローバル設定によるものです。

plenv version5.21.1となる挙動を確認

これを確認するために1〜4を順番に確認します。
version番号の後ろのset by〜の記載でわかりますが目で確認したいので念のため。

※ plenv versionを確認
$ plenv version
5.21.1 (set by /Users/hoge/.plenv/version)

※ 1. 環境変数'PLENV_VERSION'の確認
※ → まだ設定してないのでカラ
$ echo $PLENV_VERSION

※ 今のディレクトリか, 上位ディレクトリのローカル設定('.perl-version')の確認
※ → これも設定してないので無い
$ ls -l ~/.perl-ver*
ls: /Users/hoge/.perl-ver*: No such file or directory

$ ls -l ../.perl-ver*
ls: ../.perl-ver*: No such file or directory

※ 3. グローバル設定('~/.plenv/version')の確認
$ cat ~/.plenv/version
5.21.1

※ 4. システムのperlの確認
$ perl -v

This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)
PLENV_VERSIONの変更

環境変数PLENV_VERSIONを変更する方法は下記2つ。

  • export PLENV_VERSION=[バージョン番号]
  • plenv shell [バージョン番号]
PLENV_VERSIONを変更して確認してみる

と、その前に挙動の確認のために5.18.0もインストールしておきます。

$ plenv install 5.18.0

んで、確認

※ インストール済みのperlバージョン一覧確認
$ plenv versions
  system
  5.18.0
* 5.21.1 (set by /Users/hoge/.plenv/version)

※ 現在使用しているperlバージョンを確認
$ plenv version
5.21.1 (set by /Users/hoge/.plenv/version)

※ PLENV_VERSIONの変更
$ plenv shell 5.18.0

※ plenv versionを見ると変更されてる
$ plenv version
5.18.0 (set by PLENV_VERSION environment variable)

※ 設定を無効にする
$ plenv shell --unset

※ plenv versionを見るとglobal設定に戻っている
$ plenv version
5.21.1 (set by /Users/hoge/.plenv/version)
補足)plenv shell バージョン番号でplenv: no such commandと言われたら

plenv shell バージョン番号でplenv: no such commandと言われたら、
設定がまだ反映されてない可能性があります。
下記コマンドで設定を反映させてください。

※ ダメなとき
$ plenv shell 5.18.0
plenv: no such command `shell'

$ source ~/.bash_profile

※ OKなときは何も言われない
$ plenv shell 5.18.0
ローカル設定の変更

これも参考サイトまんまですが、plenv local [バージョン番号]
ディレクトリごとに設定ができるので変更して確認してみます。

※ インストール済みのperlバージョン一覧確認
$ plenv versions
  system
  5.18.0
* 5.21.1 (set by /Users/hoge/.plenv/version)

※ 現在使用しているperlバージョンを確認
$ plenv version
5.21.1 (set by /Users/hoge/.plenv/version)

※ ローカル設定の変更
$ plenv local 5.18.0

※ plenv versionを見ると変更されてる
$ plenv version
5.18.0 (set by /Users/hoge/.perl-version)

※ 設定を無効にする
$ plenv local --unset

※ plenv versionを見るとglobal設定に戻っている
$ plenv version
5.21.1 (set by /Users/hoge/.plenv/version)

5. cpanmインストールしてみる

これで最後ですがcpanmをいれてみます

※ インストール済みのperlバージョン一覧確認
$ plenv versions
  system
  5.18.0
* 5.21.1 (set by /Users/hoge/.plenv/version)

※ ローカル設定を5.18.0に変えてからインストールしてみる
$ plenv local 5.18.0

$ plenv version
5.18.0 (set by /Users/hoge/.perl-version)

$ plenv install-cpanm

※ インストールしたのでcpanのバージョン確認
$ cpanm -v
cpanm (App::cpanminus) 1.7033 on perl 5.018000 built for darwin-2level
Work directory is /Users/hoge/.cpanm/work/1430846400.68261

※ ローカル設定を消してからcpanm -vしてみる
※ 5.21.1では入れてないので怒られる
$ plenv local --unset

$ plenv version
5.21.1 (set by /Users/hoge/.plenv/version)

$ cpanm -v
plenv: cpanm: command not found

The `cpanm' command exists in these Perl versions:
  5.18.0
moduleを確認

補足的になっちゃいましたが、moduleの確認です。

$ plenv list-modules
Acme::FizzBuzz
App::cpanminus
Perl

6. carton使ってみる

この6はあとから追加したものですが一連でやったほうが楽なので載せておきます。
と、いうもののcartonだけ別記事に出したのでその参照だけ。
【perl】Perl module 依存マネージャーcartonをmac × plenv × cpanm環境で使うメモ

参考サイト

続・plenvを使ってみた

まとめ

plenvを使ってみました。
バージョンの切り替えも簡単だしディレクトリごとに設定できるのはすばらしい!