Cygwinにrbenvをインストールする

2013年11月17日 22時11分

201311172211PRBW00.png

はじめに

Rubyは、国産のプログラミング言語として世界中で使われている言語で、ウエブ開発だけで無く、スタンドアローンプログラムなど様々な開発環境で利用されています。
今回は、複数のRubyをインストールして、環境に応じて切り替えることができる便利なRuby環境の構築方法を解説します。

rbenvとは

rbenvは、Sam Stephensonさんが開発しており、複数のRubyの環境を切り替えることができます。
通常、CygwinやUNIX環境にインストールされたRubyは、/usr/binや/usr/local/binなどシステムの一部としてインストールされますが、rbenvはシステムにインストールされたRubyと共存させて、ローカルな環境で使用することができます。
また、複数バージョンのRubyをrbenv環境にインストールして、実行するプログラムごとに動的に切り替えることもできますので、システムごとにRubyのバージョンを変えたマシンを用意する必要も無くなります。

前提条件

作業の前提条件は、下記のとおりです。

ソフトウエアバージョン
OSWindows 7 Ultimate 32bit
CygwinSetup Version 2.831

rbenvのインストール

  1. gitのインストール

    apy-cygを使用して、gitをインストールします。

    $ apt-cyg install git
    
  2. rbenvのダウンロード

    公式サイトから、ダウンロードします。

    $ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
    $ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
    
    Cloning into '/home/punio/.rbenv'...
    remote: Counting objects: 1743, done.
    remote: Compressing objects: 100% (749/749), done.
    remote: Total 1743 (delta 1131), reused 1517 (delta 962)
    Receiving objects: 100% (1743/1743), 254.66 KiB | 223 KiB/s, done.
    Resolving deltas: 100% (1131/1131), done.
    
    Cloning into '/home/punio/.rbenv/plugins/ruby-build'...
    remote: Counting objects: 2547, done.
    remote: Compressing objects: 100% (1432/1432), done.
    remote: Total 2547 (delta 1147), reused 2272 (delta 911)
    Receiving objects: 100% (2547/2547), 362.92 KiB | 268 KiB/s, done.
    Resolving deltas: 100% (1147/1147), done.
    
    201311172211PRBW01.png
  3. PATH設定

    .bashrcにrbenv設定を追加します。

    export PATH=/cygdrive/c/Windows/system32                       # for Windows
    export PATH=~/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:$PATH # for Cygwin
    
    if [ -d ~/.rbenv ]; then
      CC=/usr/bin/gcc
      PATH=~/.rbenv/bin:$PATH
      eval "$(rbenv init - bash)"
    fi
    
    export PATH=~/sbin:$PATH                                       # for Packer
    export PATH=/cygdrive/c/HashiCorp/Vagrant/bin:$PATH            # for Vagrant
    export PATH=/cygdrive/c/Program\ Files/Oracle/VirtualBox:$PATH # for VirtualBox
    
    201311172211PRBW02.png

    編集が終了したら、bashを再起動するか、Cygwin Terminalを新しく起動します。

    $ exec bash
    

    rbenvが有効になると、PATHは下記のようになります。
    見やすくしていますが、実際は1行です。

    $ echo $PATH
    
    /cygdrive/c/Program Files/Oracle/VirtualBox
    /cygdrive/c/HashiCorp/Vagrant/bin
    /home/punio/sbin
    /home/punio/.rbenv/shims
    /home/punio/.rbenv/bin
    /home/punio/bin
    /bin
    /usr/bin
    /usr/sbin
    /usr/local/bin
    /cygdrive/c/Windows/system32
    

Rubyのインストール

rbenvのインストールが終了しましたので、Rubyをインストールします。

  1. インストール可能なバージョンの確認

    インストール可能なRubyのバージョンを確認します。

    $ rbenv install -l
    
    Available versions:
      1.8.6-p383
      1.8.6-p420
      1.8.7-p249
      1.8.7-p302
      1.8.7-p334
      1.8.7-p352
      1.8.7-p357
      1.8.7-p358
      1.8.7-p370
      1.8.7-p371
      1.8.7-p374
      1.9.1-p378
      1.9.1-p430
      1.9.2-p0
      1.9.2-p180
      1.9.2-p290
      1.9.2-p318
      1.9.2-p320
      1.9.3-dev
      1.9.3-p0
      1.9.3-p125
      1.9.3-p194
      1.9.3-p286
      1.9.3-p327
      1.9.3-p362
      1.9.3-p374
      1.9.3-p385
      1.9.3-p392
      1.9.3-p429
      1.9.3-p448
      1.9.3-preview1
      1.9.3-rc1
      2.0.0-dev
      2.0.0-p0
      2.0.0-p195
      2.0.0-p247
      2.0.0-preview1
      2.0.0-preview2
      2.0.0-rc1
      2.0.0-rc2
      2.1.0-dev
      2.1.0-preview1
      jruby-1.5.6
      jruby-1.6.3
      jruby-1.6.4
      jruby-1.6.5
      jruby-1.6.5.1
      jruby-1.6.6
      jruby-1.6.7
      jruby-1.6.7.2
      jruby-1.6.8
      jruby-1.7.0
      jruby-1.7.0-preview1
      jruby-1.7.0-preview2
      jruby-1.7.0-rc1
      jruby-1.7.0-rc2
      jruby-1.7.1
      jruby-1.7.2
      jruby-1.7.3
      jruby-1.7.4
      jruby-1.7.5
      jruby-1.7.6
      jruby-1.7.7
      jruby-1.7.8
      maglev-1.0.0
      maglev-1.1.0-dev
      maglev-2.0.0-dev
      mruby-dev
      rbx-1.2.4
      rbx-2.0.0
      rbx-2.0.0-dev
      rbx-2.0.0-rc1
      rbx-2.1.0
      rbx-2.1.1
      ree-1.8.6-2009.06
      ree-1.8.7-2009.09
      ree-1.8.7-2009.10
      ree-1.8.7-2010.01
      ree-1.8.7-2010.02
      ree-1.8.7-2011.03
      ree-1.8.7-2011.12
      ree-1.8.7-2012.01
      ree-1.8.7-2012.02
      topaz-dev
    
    201311172211PRBW03.png
    201311172211PRBW04.png
  2. Rubyのインストール

    今回は、2.1.0-preview1をインストールします。

    $ LANG=C rbenv install 2.1.0-preview1
    $ rbenv rehash
    
    Downloading ruby-2.1.0-preview1.tar.gz...
    -> http://dqw8nmjcqpjn7.cloudfront.net/9df4f546f6b961895ba58a8afdf857da
    Installing ruby-2.1.0-preview1...
    Installed ruby-2.1.0-preview1 to /home/punio/.rbenv/versions/2.1.0-preview1
    
    201311172211PRBW05.png

    rehashコマンドは、rbenv環境に変更を加えた際に必ず実行する必要があります。

  3. インストールされたバージョンの表示

    rbenv環境にインストールされているRubyのバージョンを表示します。

    $ rbenv versions
    
      2.1.0-preview1 (set by /home/punio/.rbenv/version)
    
  4. 使用するバージョンの指定

    rbenv環境で使用するRubyのバージョンを指定します。

    $ rbenv global 2.1.0-preview1
    
  5. インストールされたバージョンの確認

    再度、バージョンを確認すると使用しているバージョンに*(アスタリスク)が付いているのが確認できます。

    $ rbenv versions
    
    * 2.1.0-preview1 (set by /home/punio/.rbenv/version)
    
  6. rehashパッケージのインストール

    rbenv環境に変更を行った際に、毎回rehashコマンドを実行するのは面倒なので、代行してくれるrbenv-rehashgemパッケージをインストールします。

    $ gem i rbenv-rehash --no-ri --no-rdoc
    $ rbenv rehash
    

    rbenv-rehashパッケージをインストールした後、rehashコマンドを実行すると、今後はrehashコマンドを実行する必要はありません。

  7. Bundlerのインストール

    Rubyのお約束との言えるBundlerをインストールします。

    $ gem i bundler --no-ri --no-rdoc
    
  8. バージョン確認

    これまでにインストールした、gemパッケージのバージョンとパッケージリストを確認します。

    $ ruby -v && gem -v && bundle -v
    
    ruby 2.1.0dev (2013-09-22 trunk 43011) [i386-cygwin]
    2.2.0.preview.1
    Bundler version 1.3.5
    
    $ gem list
    
    DL is deprecated, please use Fiddle
    
    *** LOCAL GEMS ***
    
    bigdecimal (1.2.1)
    bundler (1.3.5)
    io-console (0.4.2)
    json (1.7.7)
    minitest (4.7.5)
    psych (2.0.1)
    rake (0.9.6)
    rbenv-rehash (0.3)
    rdoc (4.1.0.preview.1)
    test-unit (2.1.0.0)
    
    201311172211PRBW06.png

    なお、DL is deprecated, please use Fiddleは、user32.dllなどのWindows DLL内に定義されているWindows APIを使用する際に、Ruby 2.0系から実装されたFiddleライブラリを使用するようにメッセージを表示しているだけですので、実行上問題はありません。

Rebase問題への対処

rbenv環境だけで無く、Cygwin全般に言える事ですが、Cygwinではコマンドの実行中に

child_info_fork::abort: address space need by ..

child_info_fork::abort: unable to remap ..

といったエラーメッセージが表示されることがあります。

201311172211PRBW07.png

このような問題が発生した場合、下記の手順でCygwin環境を修正します。

  1. DLLリスト作成

    Cygwin環境とrbenv環境で使用しているDLLおよび、so(Shared Object)のリストを作成します。

    $ find /usr/bin -name "*.so" -o -name "*.dll" > /tmp/rebase.lst
    $ find ~/.rbenv -name "*.so" -o -name "*.dll" >> /tmp/rebase.lst
    
  2. ash.exeの起動

    ファイル名を指定して実行(Windowsキー + R)から、C:\cygwin\bin\ash.exeを起動します。

    201311172211PRBW08.png
  3. rebaseallの実行

    ash Terminalが起動したら、rebaseallを実行します。

    rebaseallを実行する際には、Cygwinの全てのサービスを停止しておく必要があります。

    /bin/rebaseall -v -T /tmp/rebase.lst
    
    201311172211PRBW09.png

    ash.exeを終了して、Cygwin Terminalを実行すると正常に動作すると思います。
    まだ、エラーが発生するようでしたら、再度手順1から実行し直して下さい。