![[tips][Tool] MacでRubyとPythonとJavaとNodeとPerlの複数バージョンを管理する方法](https://casualdevelopers.com/wp-content/uploads/2015/09/office-2761159_1920-700x300.png)
iPhone6sですか?予約しました、Keidです。
今月で20代ラストの年になってしまいました。30代が目前になるといろいろと焦りますね。このままでいいのかなー的なやつです。割と真面目に未来予知できないかな(笑)
関係のない話はこのぐらいにして、今回はMacで5つのプログラミング言語(Ruby、Python、Java、Node、Perl)の複数バージョンの管理方法を紹介します。SCM的な意味ではなく、同じ環境内で同じ言語を複数バージョンインストールして、好きな時に好きなバージョンに切り替えれるようにします。Windowsを仕事でよく使う自分としてはWindowsの方法も紹介したかったのですが、このPCがMacという理由でMacに限定します。
<目次>
- rbenvによるRubyのバージョン管理方法
- pyenvによるPythonのバージョン管理方法
- jenvによるJavaのバージョン管理方法
- nodebrewによるNodeのバージョン管理方法
- perlbrewによるPerlのバージョン管理方法
1. rbenvによるRubyのバージョン管理方法
Rubyを複数バージョン管理するには「rbenv」を使用します。
まずはインストールしてみましょう。今回はhomebrewからruby-buid等の必要なパッケージと一緒にインストールします。パスは.bash_profileに設定します。
$ brew install openssl readline $ brew install rbenv ruby-build $ vi ~/.bash_profile if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi $ source ~/.bash_profile $ rbenv -v rbenv 0.4.0 $ ruby-build --version ruby-build 20150709 $ rbenv root /Users/user/.rbenv
rbenvのコマンドは以下です。
$ rbenv rbenv 0.4.0 Usage: rbenv [] Some useful rbenv commands are: commands List all available rbenv commands local Set or show the local application-specific Ruby version global Set or show the global Ruby version shell Set or show the shell-specific Ruby version install Install a Ruby version using ruby-build uninstall Uninstall a specific Ruby version rehash Rehash rbenv shims (run this after installing executables) version Show the current Ruby version and its origin versions List all Ruby versions available to rbenv which Display the full path to an executable whence List all Ruby versions that contain the given executable See `rbenv help ' for information on a specific command. For full documentation, see: https://github.com/sstephenson/rbenv#readme
それではRubyをインストールして使ってみましょう。基本的な使い方は「rbenv install -l」で特定のバージョンを探して、「rbenv install」からの「rbenv rehash」でインストールし、そして、システム全体で使用する場合は「rbenv global」、現在のシェルだけで使用する場合は「rbenv shell」、特定のフォルダで使用する場合は「rbenv local」を実行してRubyを切り替える、という感じです。
$ rbenv install -l $ rbenv install 2.2.2 $ rbenv rehash $ rbenv versions * system (set by /Users/user/.rbenv/version) 2.2.2 $ ruby -v ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12] $ rbenv global 2.2.2 $ rbenv version 2.2.2 (set by RBENV_VERSION environment variable) $ ruby -v ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] $ rbenv install 2.1.6 $ rbenv rehash $ rbenv versions system 2.1.6 * 2.2.2 (set by /Users/user/.rbenv/version) $ rbenv install 2.3.0-dev $ rbenv versions system 2.1.6 * 2.2.2 (set by /Users/user/.rbenv/version) 2.3.0-dev $ rbenv uninstall -f 2.3.0-dev $ rbenv rehash $ rbenv versions system 2.1.6 * 2.2.2 (set by RBENV_VERSION environment variable)
おまけですが、Rubyを使用する場合、gemを使用することが多いと思いますが、このままだとgemでパッケージをインストールするたびに「rbenv rehash」する必要があります。このrehashを不要にするには「rbenv-gem-rehash」をインストールすればOKです。
$ brew install rbenv-gem-rehash
実は、rbenv-gem-rehashはココの議論により、rbenvのmasterにマージされていますが、現在homebrewでインストールできるバージョン(rbenv 0.4.0 released this on 5 Jan 2013)にはマージされていないという状況です。まあ、入れておけばよいでしょう。gitで取得しても良いですけどね。
2. pyenvによるPythonのバージョン管理方法
Pythonを複数バージョン管理するには「pyenv」を使用します。ここで、名前に注目すると「〜env」となっていますが、これは「rbenvにインスパイアーされちゃってます=rbenvと使い方ほぼ同じです」という意味です。これを二郎にちなんで、rbenvインスパイアー系と勝手に言っています。パクリと言ってはダメです、あくまでインスパイアーです(笑)
それではインストールしてみましょう。今回はvirtualenvのプラグインとセットになっている「pyenv-virtualenv」をインストールします。もちろん、pyenv単独でもインストールできます。これもhomebrewからインストールして、パスを.bash_profileに設定します。
$ brew install pyenv-virtualenv $ vi ~/.bash_profile if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi $ source ~/.bash_profile $ pyenv -v pyenv 20150901
pyenvのコマンドは以下です。
$ pyenv pyenv 20150901 Usage: pyenv [] Some useful pyenv commands are: commands List all available pyenv commands local Set or show the local application-specific Python version global Set or show the global Python version shell Set or show the shell-specific Python version install Install a Python version using python-build uninstall Uninstall a specific Python version rehash Rehash pyenv shims (run this after installing executables) version Show the current Python version and its origin versions List all Python versions available to pyenv which Display the full path to an executable whence List all Python versions that contain the given executable See `pyenv help ' for information on a specific command. For full documentation, see: https://github.com/yyuu/pyenv#readme
使ってみましょう。
$ pyenv version system (set by /Users/user/.pyenv/version) $ pyenv versions * system (set by /Users/user/.pyenv/version) $ pyenv install -l $ pyenv install 3.4.3 $ pyenv rehash $ pyenv install 3.5.0rc2 $ pyenv rehash $ pyenv versions * system (set by /Users/user/.pyenv/version) 3.4.3 3.5.0rc2 $ pyenv global 3.5.0rc2 $ python --version Python 3.5.0rc2 $ pyenv version 3.5.0rc2 (set by /Users/user/.pyenv/version) $ pyenv versions system 3.4.3 * 3.5.0rc2 (set by /Users/user/.pyenv/version)
せっかくなので、一緒に入れたPython仮想環境を作れるvirtualenvも使ってみましょう。使い方は「pyenv virtualenv」で仮想環境を作り、アプリケーションのプロジェクトフォルダに対して「pyenv local」で割り当てます。後は、そのフォルダに入ると仮想環境がactivateされ、フォルダから出るとdeactivateされます。
$ pyenv virtualenv 3.5.0rc2 env350 $ pyenv versions system 3.4.3 * 3.5.0rc2 (set by /Users/user/.pyenv/version) env350 $ mkdir project $ cd project $ pyenv local env350 pyenv-virtualenv: activate env350 (env350) $ pyenv version env350 (set by /Users/user/project/.python-version) (env350) $ pyenv versions system 3.4.3 3.5.0rc2 * env350 (set by /Users/user/project/.python-version) (env350) $ python --version Python 3.5.0rc2 $ ls -a ./ ../ .python-version $ cat .python-version env350 $ cd .. pyenv-virtualenv: deactivate env350
使いやすいですね。
また、pyenvをインストールした場合、homebrewでウザいwarningが出てしまいます。以下のalias設定をすることで回避できます。(参考)
$ vi ~/.bashrc alias brew="env PATH=${PATH///Users/${USER}/.pyenv/shims:/} brew" $ source ~/.bash_profile
3. jenvによるJavaのバージョン管理方法
Javaを複数バージョン管理するには「jenv」を使用します。もちろん、rbenvインスパイアー系ですね。
インストールしてみましょう。これもhomebrewからインストールして、パスを.bash_profileに設定します。
$ brew install jenv $ vi ~/.bash_profile if which jenv > /dev/null; then eval "$(jenv init -)"; fi $ source ~/.bash_profile $ jenv --version jenv 0.4.3 $ jenv root /Users/user/.jenv
jenvのコマンドは以下です。
$ jenv jenv 0.4.3 Usage: jenv [] Some useful jenv commands are: commands List all available jenv commands local Set or show the local application-specific Java version global Set or show the global Java version shell Set or show the shell-specific Java version rehash Rehash jenv shims (run this after installing executables) version Show the current Java version and its origin versions List all Java versions available to jenv which Display the full path to an executable whence List all Java versions that contain the given executable See `jenv help ' for information on a specific command. For full documentation, see: https://github.com/hikage/jenv#readme
コマンドを見て気づいたと思いますが、今までのrbenvインスパイアー系と違い、Javaのインストールは残念ながらできません。「jenv add」でインストール先を指定することで、インストールされているJavaを切り替えられる程度です。では、使ってみましょう。
$ ls /System/Library/Java/JavaVirtualMachines ls: /System/Library/Java/JavaVirtualMachines: No such file or directory $ ls /Library/Java/JavaVirtualMachines jdk1.7.0_75.jdk/ jdk1.8.0_31.jdk/ $ jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home oracle64-1.7.0.75 added 1.7.0.75 added 1.7 added $ jenv rehash $ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home oracle64-1.8.0.31 added 1.8.0.31 added 1.8 added $ jenv rehash $ jenv versions * system (set by /Users/user/.jenv/version) 1.7 1.7.0.75 1.8 1.8.0.31 oracle64-1.7.0.75 oracle64-1.8.0.31 $ jenv version system (set by /Users/user/.jenv/version) $ java -version java version "1.8.0_31" Java(TM) SE Runtime Environment (build 1.8.0_31-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode) $ jenv global 1.7 $ jenv version 1.7 (set by /Users/user/.jenv/version) $ java -version java version "1.7.0_75" Java(TM) SE Runtime Environment (build 1.7.0_75-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode) $ jenv versions system * 1.7 (set by /Users/user/.jenv/version) 1.7.0.75 1.8 1.8.0.31 oracle64-1.7.0.75 oracle64-1.8.0.31 $ jenv global 1.8 $ jenv version 1.8 (set by /Users/user/.jenv/version) $ java -version java version "1.8.0_31" Java(TM) SE Runtime Environment (build 1.8.0_31-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode) $ jenv versions system 1.7 1.7.0.75 * 1.8 (set by /Users/user/.jenv/version) 1.8.0.31 oracle64-1.7.0.75 oracle64-1.8.0.31
おっと、「/System/Library/Java/JavaVirtualMachines」が無かったのはMountain LionからYosemiteにアップグレードした時にJava6が使えなくなってしまったからです。最新のMacを使っている人はJava8があると思います。
4. nodebrewによるNodeのバージョン管理方法
Nodeを複数バージョン管理するには「nodebrew」を使用します。ここでも名前に注目すると「〜brew」になっていますね。はい、homebrewインスパイアー系と勝手に言うことにしましょう。
インストールしてみましょう。今まで通り、homebrewからインストールして、パスを.bash_profileに設定します。
$ brew install nodebrew $ vi ~/.bash_profile export PATH=$HOME/.nodebrew/current/bin:$PATH $ source ~/.bash_profile $ nodebrew nodebrew 0.8.1
nodebrewのコマンドは以下です。
$ nodebrew nodebrew 0.8.1 Usage: nodebrew help Show this message nodebrew install Download and install a (compile from source) nodebrew install-binary Download and install a (binary file) nodebrew uninstall Uninstall a version nodebrew use Use nodebrew list List installed versions nodebrew ls Alias for `list` nodebrew ls-remote List remote versions nodebrew ls-all List remote and installed versions nodebrew alias Set alias to version nodebrew unalias Remove alias nodebrew clean | all Remove source file nodebrew selfupdate Update nodebrew nodebrew migrate-package Install global NPM packages contained in to current version nodebrew exec -- Execute specified Example: # install from binary nodebrew install-binary v0.10.22 # use a specific version number nodebrew use v0.10.22 # io.js nodebrew install-binary io@v1.0.0 nodebrew use io@v1.0.0
では、使ってみましょう。
$ nodebrew ls-remote $ nodebrew install-binary latest $ nodebrew ls v0.12.7 current: none $ nodebrew use v0.12.7 use v0.12.7 $ nodebrew ls v0.12.7 current: v0.12.7 $ node -v v0.12.7 $ nodebrew install-binary io@v3.3.0 $ nodebrew ls v0.12.7 io@v3.3.0 current: v0.12.7 $ nodebrew use io@v3.3.0 use io@v3.3.0 $ nodebrew ls v0.12.7 io@v3.3.0 current: io@v3.3.0 $ node -v v3.3.0 $ iojs -v v3.3.0 $ nodebrew use v0.12.7 use v0.12.7
こんな感じでnodeもiojsも両方扱えます。
ちなみに、環境依存だとは思いますが、今回実行した時に「nodebrew install-binary latest」でcurl失敗のエラーが出ました。原因はなぜか「~/.nodebrew/src」のフォルダが存在しなかったからです。もし同じ事象になったら「mkdir ~/.nodebrew/src」すれば解決します。
5. perlbrewによるPerlのバージョン管理方法
Perlを複数バージョン管理するには「perlbrew」を使用します。homebrewインスパイアー系です。そろそろラーメンが食べたくなってきました(笑)
perlbrewは残念ながらhomebrewのパッケージにないので、curlでインストールしましょう。パスは.bash_profileに設定します。ついでに、関連パッケージ「install-patchperl」と「install-cpanm」も入れておきましょう。
$ curl -kL http://install.perlbrew.pl | bash perlbrew is installed: ~/perl5/perlbrew/bin/perlbrew $ vi ~/.bash_profile source ~/perl5/perlbrew/etc/bashrc $ source ~/.bash_profile $ perlbrew --version /Users/user/perl5/perlbrew/bin/perlbrew - App::perlbrew/0.73 $ perlbrew install-patchperl patchperl is installed to /Users/user/perl5/perlbrew/bin/patchperl $ perlbrew install-cpanm cpanm is installed to /Users/user/perl5/perlbrew/bin/capping
perlbrewのコマンドは以下です。
$ perlbrew Usage: perlbrew command syntax: perlbrew [options] [arguments] Commands: init Initialize perlbrew environment. info Show useful information about the perlbrew installation install Install perl uninstall Uninstall the given installation available List perls available to install lib Manage local::lib directories. alias Give perl installations a new name upgrade-perl Upgrade the current perl list List perl installations use Use the specified perl in current shell off Turn off perlbrew in current shell switch Permanently use the specified perl as default switch-off Permanently turn off perlbrew (revert to system perl) exec exec programs with specified perl enviroments. self-install Install perlbrew itself under PERLBREW_ROOT/bin self-upgrade Upgrade perlbrew itself. install-patchperl Install patchperl install-cpanm Install cpanm, a friendly companion. install-multiple Install multiple versions and flavors of perl download Download the specified perl distribution tarball. mirror Pick a preferred mirror site clean Purge tarballs and build directories version Display version help Read more detailed instructions Generic command options: -q --quiet Be quiet on informative output message. -v --verbose Tell me more about it. See `perlbrew help` for the full documentation of perlbrew, or See `perlbrew help ` for detail description of the command.
perlbrewでは「perlbrew upgrade-perl」でマイナーアップデートができるので、フォルダのバージョンと中身が異ならないように「–as perl-5.XX」として、インストールするのが分かり易いです。ではでは、使ってみましょう。
$ perlbrew available $ perlbrew install --notest perl-5.22.0 --as perl-5.22 perl-5.22 is successfully installed. $ perlbrew install --notest perl-5.20.2 --as perl-5.20 perl-5.20 is successfully installed. $ perlbrew list perl-5.20 (5.20.2) perl-5.22 (5.22.0) $ perlbrew switch perl-5.22 $ perlbrew list perl-5.20 (5.20.2) * perl-5.22 (5.22.0) $ perl -v This is perl 5, version 22, subversion 0 (v5.22.0) built for darwin-2level $ which perl /Users/user/perl5/perlbrew/perls/perl-5.22/bin/perl $ perlbrew upgrade-perl This perlbrew environment (perl-5.22) is already up-to-date.
おまけですが、perlbrewには「lib」という仕組みがあり、パッケージをlibごとに分けて管理できます。
「perlbrew lib」のコマンドは以下です。
$ perlbrew lib Usage: perlbrew lib perlbrew lib list perlbrew lib create perlbrew lib delete The `lib` command is used to manipulate local::lib roots inside perl installations. Effectively it is similar to `perl -Mlocal::lib=/path/to/lib-name`, but a little bit more than just that. A lib name can be a short name, containing alphanumeric, like 'awesome', or a full name, prefixed by a perl installation name and a '@' sign, for example, 'perl-5.14.2@awesome'. Here are some a brief examples to invoke the `lib` command: # Create lib perl-5.12.3@shizuka perlbrew lib create perl-5.12.3@shizuka # Create lib perl-5.14.2@nobita and perl-5.14.2@shizuka perlbrew use perl-5.14.2 perlbrew lib create nobita perlbrew lib create shizuka # See the list of use/switch targets perlbrew list # Activate a lib in current shell perlbrew use perl-5.12.3@shizuka perlbrew use perl-5.14.2@nobita perlbrew use perl-5.14.2@shizuka # Activate a lib as default perlbrew switch perl-5.12.3@shizuka perlbrew switch perl-5.14.2@nobita perlbrew switch perl-5.14.2@shizuka # Delete lib perl-5.14.2@nobita and perl-5.14.2@shizuka perlbrew use perl-5.14.2 perlbrew lib delete nobita perlbrew lib delete shizuka # Delete lib perl-5.12.3@shizuka perlbrew lib delete perl-5.12.3@shizuka Short lib names are local to current perl. A lib name 'nobita' can refer to 'perl-5.12.3@nobita' or 'perl-5.14.2@nobita', depending on your current perl. When "use"ing or "switch"ing to a lib, always provide the long name. A simple rule: the argument to "use" or "switch" command should appear in the output of "perlbrew list".
最後に「perlbrew lib」を使ってみましょう。
$ perlbrew use perl-5.20 $ perlbrew lib create lib520 lib 'perl-5.20@lib520' is created. $ perlbrew use perl-5.22 $ perlbrew lib create lib522 lib 'perl-5.22@lib522' is created. $ perlbrew lib create perl-5.22@lib522-test lib 'perl-5.22@lib522-test' is created. $ perlbrew lib list perl-5.20@lib520 perl-5.22@lib522 perl-5.22@lib522-test $ perlbrew list perl-5.20 (5.20.2) perl-5.20@lib520 * perl-5.22 (5.22.0) perl-5.22@lib522 perl-5.22@lib522-test $ perlbrew switch perl-5.22@lib522 $ perlbrew list perl-5.20 (5.20.2) perl-5.20@lib520 perl-5.22 (5.22.0) * perl-5.22@lib522 perl-5.22@lib522-test $ perlbrew lib list perl-5.20@lib520 * perl-5.22@lib522 perl-5.22@lib522-test $ perlbrew lib delete lib522-test lib 'perl-5.22@lib522-test' is deleted. $ perlbrew lib list perl-5.20@lib520 * perl-5.22@lib522 $ perlbrew lib delete perl-5.20@lib520 lib 'perl-5.20@lib520' is deleted. $ perlbrew lib list * perl-5.22@lib522 $ perlbrew list perl-5.20 (5.20.2) perl-5.22 (5.22.0) * perl-5.22@lib522 $ perl -v This is perl 5, version 22, subversion 0 (v5.22.0) built for darwin-2level
以上で5つの説明終了です。おつかれ!
<環境>
OS : OS X Yosemite 10.10.5
homebrew : 0.9.5
curl : 7.43.0