Ruby をコンパイルして direnv で使う

あえて rbenv (+ruby-build) を使わないという道を往きます。

Ruby のインストール

わけあって 2.3.3 をインストール。 ~/.rubies/2.3.3 に置きます。

$ wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.3.tar.gz
$ tar xf ruby-2.3.3.tar.gz
$ cd ruby-2.3.3/
$ sudo zypper in openssl-devel readline-devel tk-devel
$ mkdir ~/.rubies/2.3.3
$ ./configure --with-readline --with-openssl --prefix=$HOME/.rubies/2.3.3
$ make && make install

direnv をインストール

direnv とは環境変数を cd したディレク トリに応じて変えるツールで、要は rbenv や pyenv の代わりになるもの。

コンパイルに golang が要るのでインストールします。

$ sudo zypper in go
$ mkdir -p ~/golang/src
$ export GOPATH=$HOME/golang
$ cd ~/golang/src

GitHub からソースを clone してビルド、~/bindirenv を置きます。

$ git clone https://github.com/direnv/direnv
$ cd direnv
$ make
$ cp direnv ~/bin

できたら ~/.bashrc に以下を追記。 この辺は公式ドキュメント参照。

eval "$(direnv hook bash)"

direnv で特定バージョンの Ruby を使う

direnv edit . すると、エディタが開くので以下のようにシェルスクリプトを書く。

export PATH=$HOME/.rubies/2.3.3/bin:$PATH
echo 'welcome to ruby-2.3.3 world!'

保存すると .envrc というファイルができる。direnv reload すると、 .envrc の内容がロードされます。

$ direnv reload
direnv: loading .envrc
welcome to ruby-2.3.3 world!
direnv: export ~PATH

以降、このディレクトリに cd する度に .envrc がロードされるようになります。

.envrc の中身は環境によって変わるので、 .gitignore に追記したほうがよいと 思います。

おまけ: Python の virtualenv と一緒に使う

direnv は virtualenv との相性もいい。cd した後に自動で activate できる。

.envrc に virtualenv の activate を呼び出す1行を書いておく。

# .envrc
. .venv/bin/activate

すると、cd するだけで virtualenv の環境がロードされるようになる。

$ which python
/usr/bin/python
$ cd blog/
direnv: loading .envrc
direnv: export +VIRTUAL_ENV ~PATH
$ which python
/home/jsaito/Projects/blog/.venv/bin/python

上位のディレクトリに移動すると自動的にアンロードされる。便利。

$ cd ..
direnv: unloading
$ which python
/usr/bin/python

social