akishin999の日記

調べた事などを書いて行きます。

pik を使ってみた

Windows 環境で複数の Ruby 処理系を管理できる pik を使ってみました。


vertiginous's pik at master - GitHub
https://github.com/vertiginous/pik

インストール

インストールは gem から行えます。
また、下記ページにて配布されている msi インストーラでインストールすることもできるようです。

Downloads for vertiginous's pik - GitHub
https://github.com/vertiginous/pik/downloads


ここでは、既に導入済みの Ruby 環境から gem でインストールすることにしました。

C:\src\ruby>gem install pik


これで gem としてインストールされました。
次に、pik のコマンド類をインストールするフォルダを作成します。

C:\src\ruby>md C:\Programs\pik


作成したフォルダのフルパスを引数に、pik_install コマンドを実行します。

C:\src\ruby>pik_install C:\Programs\pik
Thank you for using pik.

mkdir -p C:\Programs\pik
mkdir -p C:\Users\akishin/.pik
Installing to C:\Programs\pik

cp C:/Programs/ruby-1.8.7-p302-i386-mingw32/lib/ruby/gems/1.8/gems/pik-0.2.8/tools/pik_runner.exe C:\Programs\pik
cp C:/Programs/ruby-1.8.7-p302-i386-mingw32/lib/ruby/gems/1.8/gems/pik-0.2.8/tools/pik.bat C:\Programs\pik
cp C:/Programs/ruby-1.8.7-p302-i386-mingw32/lib/ruby/gems/1.8/gems/pik-0.2.8/tools/pik.ps1 C:\Programs\pik

creating C:\Users\akishin/.pik/.pikrc

pik is installed

The directory you installed to is not in the sytem path.
C:\Programs\pik

You will need to add it.


if you want to use pik with git bash, add the following line to your ~/.bashrc:

  [[ -s $USERPROFILE/.pik/.pikrc ]] && source $USERPROFILE/.pik/.pikrc


メッセージにあるように、環境変数 PATH に pik をインストールしたフォルダを追加します。

ここでは、コマンドプロンプトの再起動が面倒だったので、set コマンドを使います。
set コマンドでの変更はコマンドプロンプトを終了すると破棄されてしまうので、後でちゃんとシステムのプロパティの方にも追加しておきます。

C:\src\ruby>set PATH=%PATH%;C:\Programs\pik


これで pik の導入は完了です。
試しに、pik で管理されている Ruby 処理系を一覧する「pik list」コマンドを実行してみると、pik のインストールに使用した処理系が登録されている事が分かります。

C:\src\ruby>pik list
** Adding:  187: ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
 Located at:  C:\Programs\ruby-1.8.7-p302-i386-mingw32\bin
* 187: ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]

新たな処理系のインストール

pik では、システムに新たな Ruby 処理系をインストールすることができます。
インストール可能な Ruby 処理系は「pik list -r」で確認できます。

C:\src\ruby>pik list -r
---
DevKit:
  3.4.5r3: http://rubyforge.org/frs/download.php/66888/devkit-3.4.5r3-20091110.7z
IronRuby:
  0.3.0: http://rubyforge.org/frs/download.php/53552/ironruby-0.3.0.zip
  0.5.0: http://rubyforge.org/frs/download.php/57126/ironruby-0.5.0.zip
  0.6.0: http://rubyforge.org/frs/download.php/59717/ironruby-0.6.0.zip
  0.9.0: http://rubyforge.org/frs/download.php/61382/ironruby-0.9.0.zip
  0.9.1: http://rubyforge.org/frs/download.php/64504/ironruby-0.9.1.zip
  0.9.2: http://rubyforge.org/frs/download.php/66606/ironruby-0.9.2.zip
  "1.0": http://rubyforge.org/frs/download.php/70179/ironruby-1.0.zip
  1.0-rc1: http://rubyforge.org/frs/download.php/67955/ironruby-1.0-rc1.zip
  1.0-rc2: http://rubyforge.org/frs/download.php/69180/ironruby-1.0-rc2.zip
  1.0.0rc: http://rubyforge.org/frs/download.php/69853/ironruby-1.0.0rc.zip
  1.0rc3: http://rubyforge.org/frs/download.php/69665/ironruby-1.0rc3.zip
  1.0v4: http://rubyforge.org/frs/download.php/70181/ironruby-1.0v4.zip
JRuby:
  1.4.1: http://jruby.org.s3.amazonaws.com/downloads/1.4.1/jruby-bin-1.4.1.zip
  1.5.3: http://jruby.org.s3.amazonaws.com/downloads/1.5.3/jruby-bin-1.5.3.zip
Ruby:
  1.8.6-p398-2: http://rubyforge.org/frs/download.php/71102/ruby-1.8.6-p398-i386-mingw32-2.7z
  1.8.7-p249-1: http://rubyforge.org/frs/download.php/71081/ruby-1.8.7-p249-i386-mingw32-1.7z
  1.8.7-p299: http://rubyforge.org/frs/download.php/71493/ruby-1.8.7-p299-i386-mingw32.7z
  1.8.7-p302: http://rubyforge.org/frs/download.php/72087/ruby-1.8.7-p302-i386-mingw32.7z
  1.9.1-p378-1: http://rubyforge.org/frs/download.php/71082/ruby-1.9.1-p378-i386-mingw32-1.7z
  1.9.1-p429: http://rubyforge.org/frs/download.php/71496/ruby-1.9.1-p429-i386-mingw32.7z
  1.9.1-p430: http://rubyforge.org/frs/download.php/72076/ruby-1.9.1-p430-i386-mingw32.7z
  1.9.2-p0: http://rubyforge.org/frs/download.php/72160/ruby-1.9.2-p0-i386-mingw32.7z
  1.9.2-rc1: http://rubyforge.org/frs/download.php/71498/ruby-1.9.2-rc1-i386-mingw32.7z
  1.9.2dev-preview3-1: http://rubyforge.org/frs/download.php/71175/ruby-1.9.2dev-preview3-i386-mingw32-1.7z


一覧の中からインストールしたい処理系が決まったら、「pik install」コマンドで実際にインストールを行います。
この時、7zip のコマンドがインストールされていない場合、確認の上そちらも自動でインストールしてくれるようです。
便利ですね。

C:\src\ruby>pik install ruby 1.9.2
** Downloading:  http://rubyforge.org/frs/download.php/71175/ruby-1.9.2dev-preview3-i386-mingw32-1.7z
   to:  C:\Users\akishin\.pik\downloads\ruby-1.9.2dev-preview3-i386-mingw32-1.7z

ruby-1.9.2dev-preview3-i...7z: 100% |oooooooooo|   5.7MB/  5.7MB Time: 00:00:26

You need the 7zip utility to extract this file.
Would you like me to download it? (yes/no)  |yes|

** Downloading:  http://downloads.sourceforge.net/sevenzip/7za465.zip
   to:  C:\Users\akishin\.pik\downloads\7za465.zip

7za465.zip: 100% |ooooooooooooooooooooooooooooo| 352.5KB/352.5KB Time: 00:00:00

** Extracting:  C:\Users\akishin\.pik\downloads\ruby-1.9.2dev-preview3-i386-mingw32-1.7z
   to:  C:\Users\akishin\.pik\rubies\Ruby-192dev-preview3-1
done

** Adding:  192: ruby 1.9.2dev (2010-05-31) [i386-mingw32]
 Located at:  C:\Users\akishin\.pik\rubies\Ruby-192dev-preview3-1\bin


pik によりインストールした Ruby は自動で pik list に追加されています。

C:\src\ruby>pik list
** Adding:  187: ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
 Located at:  C:\Programs\ruby-1.8.7-p302-i386-mingw32\bin
* 187: ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
  192: ruby 1.9.2dev (2010-05-31) [i386-mingw32]

既にインストールされている処理系の追加

pik を使ってみて特にいいな、と思った点でもあるのですが、既に導入済みの Ruby 処理系も管理対象として追加する事ができます。
追加するには「pik add」コマンドの引数に追加したい Ruby 処理系の ruby.exe のフルパスを指定します。

C:\src\ruby>pik add C:\Programs\ruby-1.8.7-p249-i386-mingw32\bin
** Adding:  187: ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32]
 Located at:  C:\Programs\ruby-1.8.7-p249-i386-mingw32\bin

C:\src\ruby>pik add C:\Programs\ruby-1.9.1-p378-i386-mingw32\bin
** Adding:  191: ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]
 Located at:  C:\Programs\ruby-1.9.1-p378-i386-mingw32\bin


「pik list」を実行すると追加されたことが確認できます。

C:\src\ruby>pik list
  187: ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32]
* 187: ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
  191: ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]
  192: ruby 1.9.2dev (2010-05-31) [i386-mingw32]

現在有効な Ruby 処理系を切り替える

現在有効な Ruby 処理系を切り替えるには、「pik use」コマンド、または「pik switch」、「pik sw」コマンドを使います。
pik list 実行時に左端に表示されているバージョン番号を引数に指定します。

C:\src\ruby>pik use 192

C:\src\ruby>pik list
  187: ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
* 192: ruby 1.9.2dev (2010-05-31) [i386-mingw32]

C:\src\ruby>ruby -v
ruby 1.9.2dev (2010-05-31) [i386-mingw32]


バージョン番号が同一で patchlevel が異なる処理系がインストールされている場合、バージョン番号と併せて patchlevel を指定することで明示的に切り替えることもできます。

C:\src\ruby>pik use 187 302

C:\src\ruby>pik list
  186: ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
  187: ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32]
* 187: ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
  191: ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]
  192: ruby 1.9.2dev (2010-05-31) [i386-mingw32]

pik を使用すると、このように非常に簡単に複数の Ruby 処理系を切り替えて使用する事ができます。
先にも書きましたが、個人的に既に導入済みの環境を管理対象に追加できる機能が特にお気に入りですね。
この機能のお陰で、InstantRails や RubyInstaller などを既に導入済みの場合でも、気軽に pik による管理を始める事ができます。


ちなみに LinuxMac などの方は RVM というほぼ同等のツールがあるので、使ってみると幸せになれるかと思います。