はじめに
こんにちは。嫌われエンジニアの西村(@Sixeight)です。
さいきん Kyoto.rb というコミュニティを始めました。
どうぞよろしくお願いします。
今日はさいきん巷で話題だった(乗り遅れた感ありますね) rbenv について取り上げたいと思います。
弊社ではまだRVMが主流なのですが、アルバイトの若者をたぶらかして少しずつシェアを増やしています。
rbenv ってなに
https://github.com/sstephenson/rbenv
インストール済の複数のRubyをよしなに切り替えてくれるべんりツールです。
37signalsのsstephensonことSam Stephensonさんによるプロダクトです。
他にもかっこ良いプロダクトを書きまくられています。
最初にREADME.mdから抜粋。
rbenvがしてくれること
rbenvは3つのことを提供してくれます。
- ユーザ毎に使用するRubyのバージョンを変更できます -> たとえば 1.9.3 と 2.0.0-dev をインストールしていると、これらを好きな時に切り替えて使用できます
- プロジェクト毎にRubyのバージョンをを指定出来ます -> .rbenv-version というファイルを読み取って特定のディレクトリ以下のRubyのバージョンを指定できます。
- 環境変数によってRubyのバージョンを指定出来ます -> RBENV_VERSION を指定しておくとその環境変数が有効な範囲でだけRubyのバージョンを指定できます。
rbenv がしてくれないこと
rbenvはRVMと比較して以下のことはしないとしています。 RVMの問題点を改善するために産まれた経緯からもこの“しないこと"は重要です。
- シェルに変なスクリプトをロードする必要はありません -> rbenvが採用しているShimを使った方法では
$PATH
にディレクトリを追加するだけで動作します。 - シェルのコマンドを上書きしません -> たとえば
cd
とか。これは大変危険だし、バグの温床になります - 設定ファイルを必要としません -> 必要なのはRubyのバージョン番号だけ!
- Rubyのインストールはしません ->
rvm install 1.9.3
みたいなことは出来ません。rbenvがやることはあくまでインストールされたRubyのバージョンの切り替えです。代りにruby-buildを使うことでrvm install
と同様のことを実現しています。 - Gemsetの管理はしません -> BundlerはGemsetより良いGemの管理方法なので、Bundlerを使うべき。まだBundlerを導入していないプロジェクト向きにrbenv-gemsetもあります。
- 相性が良くないべつのRubyライブラリを変更する必要はありません -> CapistranoでRVMを使うためには結構たいへんだけど、rbenvではそんなことは起りません。
- バージョンを切り替えるときに警告を出しません -> RVMのように任意のコードを実行できるようにはなってなくて、バージョン番号しか指定しないので、そもそも信頼する必要がありません。
インストール方法
ふつうのプログラマのみなさんはMacユーザだと思いますので、当然のようにHomeBrewを使います。
RVMのアンインストール
RVMをインストールされている場合は競合して問題が起きないようアンインストールしておく必要があります。 以下のコマンドをタイプしてRVMをアンインストール後、~/zshrcなどに書いていたRVM関連のスクリプトを削除してください。
$ rvm seppuku
rbenv と ruby-build のインストール
rbenv本体とRubyをインストールするのに使用するruby-buildをインストールします。 Rubyは手動でコンパイルするという方はrbenvのみどうぞ。
$ brew install rbenv ruby-build $ echo 'eval "$(rbenv init -)"' >> ~/.zshenv
Bashの方は~/.zshenvの代りに~/.bash_profileに追記してください。
以上です。簡単でしょ。
Ruby 1.9.3-p194 を入れてみる
これでRubyを管理する準備が整いました。
さっそく1.9.3をインストールしてみましょう。
HomeBrewでインストールしたReadlineとOpenSSLをリンクするように指定しています。
$ brew install readline openssl $ brew link readline $ brew link openssl $ CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=/usr/local" rbenv install 1.9.3-p194
以上でインストール完了です。rbenv versions
と入力してちゃんとインストール出来ているか確認してみてください。
私の環境では以下のように表示されました。(他のバージョンもインストールしています)
$ rbenv versions 1.8.7-p358 1.9.2-p290 * 1.9.3-p194 (set by /Users/tomohiro/.rbenv/version) 2.0.0-dev
via: https://gist.github.com/50aa2ed60c2cec3d49d3
Rubyを切り替える
rbenvを使ってRubyを切り替える方法は3つあります。(rbenvがしてくれること参照)
- 通常使用するRubyのバージョンを指定する(global)
- プロジェクト毎(特定のディレクトリ以下)で使用するRubyのバージョンを指定する(local)
- そのシェル内でのみ使用するRubyのバージョンを指定する(shell)
通常使用するRubyのバージョンを指定する(global)
広く使用するRubyのバージョンを指定します。基本的にはここで指定したバージョンのRubyが使用されることになります。
$ rbenv global 1.9.3-p194
ここで指定したバージョンは~/.rbenv/version
ファイルに書き込まれて保持されます。
このバージョンは後述する、.rbenv-version
か$RBENV_VERSION
によって上書きされます。
プロジェクト毎(特定のディレクトリ以下)で使用するRubyのバージョンを指定する(local)
あるディレクトリ以下にいるときのRubyのバージョンを指定するにはrbenv local
を使用します。
$ rbenv local 1.9.3-p194
このコマンドを実行したディレクトリに.rbenv-version
というファイルが作成され、そこにバージョン番号が記述されます。
今後、このファイルがあるディレクトリ以下に移動すると、ファイルに記述されたバージョンのRubyが使用されることになります。
また、このバージョンは$RBENV_VERSION
によって上書きされます。
そのシェル内でのみ使用するRubyのバージョンを指定する(shell)
実行中のシェル内でのみ有効なRubyのバージョンを指定するにrbenv shell
を使用します。
$ rbenv shell 1.9.3-p194
これによって、RBENV_VERSION
という環境変数がセットされ、global/localどちらの指定も上書きすること出来ます。
設定した環境変数をリセットするには--unset
オプションを使用します。
$ rbenv shell --unset
仕組み
さて、使い方は分かりましたでしょうか。次は仕組みをみていこうと思います。 詳しい解説はsugyanさんのrbenvの切り替えの仕組み…と、他言語での実験を見て頂くとして、ざっくり概要をまとめたいと思います。
HomeBrewでインストールしたrbenvのユーザ側のディレクトリ構成は以下のようになっています。
$ tree -L 1 .rbenv .rbenv ├── shims ├── version └── versions
rbenvではRuby関連の実行ファイルを全て~/.rbenv/shims
以下のラッパスクリプトを経由して実行します。
~/.rbenv/shims
以下にはインストールしている全てのバージョンのRubyに関連する実行ファイルのラッパスクリプトが配置されています。
(中身は全て同じです)
当然Rubyインタプリタ自体もここに収められており、which ruby
の結果は私の環境の場合/Users/tomohiro/.rbenv/shims/ruby
となります。
このラッパスクリプトが実行されると、rbenvはrbenv-which
を使って実際の実行ファイルの場所を探しに行きます。rbenv-which
は~/.rbenv/versions/#{rbenv-version}/bin
以下を探索します。
$ tree -L 2 .rbenv/versions .rbenv/versions ├── 1.8.7-p358 │ ├── bin │ ├── lib │ └── share ├── 1.9.2-p290 │ ├── bin │ ├── include │ ├── lib │ └── share ├── 1.9.3-p194 │ ├── bin │ ├── include │ ├── lib │ └── share └── 2.0.0-dev ├── bin ├── include ├── lib └── share
ここで言うrbenv-version
は、rbenv version
の実態であり現在使用しているRubyのバージョンを返してくれます。
つまり、1.9.3-p194を使用しているときは~/.rbenv/versions/1.9.3-p194/bin/ruby
が実行されて、2.0.0-devを使用しているときは~/.rbenv/versions/2.0.0-dev/bin/ruby
が使用される仕組みです。
単純ですよね。
これはインストールしているGemの実行ファイルについても同様で、たとえばBundlerなら~/.rbenv/versions/#{rvenv-version}/bin/bundler
が実行されます。
これはインストールのときにした、rbenv init -
によって、$PATH
に~/.rbenv/shims
が追加されているため実現できています。
つまり
思い切りはしょってまとめると以下のようになります。
ruby
を実行すると~/.rbenv/shims/ruby
が実行される~/.rbenv/shims/ruby
は実際の実行ファイルを探して実行しようとする- 実際のファイルは
~/.rbenv/versions/#{rbenv-version}/bin
に配置されていることが分っているためrbenv-version
を決定する - 実行ファイルが見つかったので実行する
rvenv-version
は3ステップでバージョンを確定します。
$RBENV_VERSION
が設定されているか確認する- 設定されていなければ、
.rbenv-version
が存在しているか確認する - 存在していなければ
~/.rbenv/version
を見る
Shimは誰が作るか
大変重要な役割をしているShimたちは一体誰が作るのでしょうか。答はrbenv-rehash
です。
そう、あの毎回実行しなくてはならなくて面倒くさいrbenv rehash
の実体です。
これを実行すると、~/.rbenv/versions/*bin/
以下を探索して~/.rbenv/shims/
以下のShimを再生成してくれます。
とてもめんどうくさいのですがこれを怠るとインストールしたべんりツールが実行できなくなってしまうのです。
(理由を知ってもそれでも面倒だと思うかたはgem i rbenv-rehash
しておくとしあわせになれるようです)
ちなみに今まで上げてきたrbenv-*
というスクリプトはHomeBrewでインストールした場合は/usr/local/Cellar/rbenv/#{version}/libexec
以下にインストールされています。
$ ls /usr/local/Cellar/rbenv/0.3.0/libexec rbenv rbenv-exec rbenv-hooks rbenv-prefix rbenv-sh-shell rbenv-version-file rbenv-version-name rbenv-whence rbenv-commands rbenv-global rbenv-init rbenv-rehash rbenv-shims rbenv-version-file-read rbenv-version-origin rbenv-which rbenv-completions rbenv-help rbenv-local rbenv-root rbenv-version rbenv-version-file-write rbenv-versions
ちょっと便利にする
現在のRubyのバージョンはrbenv version
で確認することが出来ますが、私みたいに面倒くさがりな方にはシェルのプロンプトに現在のバージョンを表示しておくことをお勧めします。
Zshの場合は以下のようにして実現します。
まずはバージョンを文字列として返す関数を定義します。
function rbenv_version() { echo -n "${$(rbenv version)%% *}" }
あとはこれを良い感じにプロンプトに表示します。例えば以下のようにすると1.9.3-p194 >
のようなプロンプトを表示できます。
PROMPT='$(rbenv_version) >'
さいごに
rbenvの欠点はrvmに比べてタイプ数が多く左側に集中しているため非常に入力が困難な点です。
一時期はあまりの苦行に耐え切れずにalias rvm=rbenv
などとしていましたが、さすがに気がひけたので最近は入力できるように訓練しています。
貴重なネームスペースを消費しないためにキラキラネームが推奨されているとはいえ、入力しやすい名前をつけるのは重要なことだと思いました。
最後まで読んで頂きありがとうございました。
追記
「rb<tab>
で補完すれば良いのでは???」というご意見を頂きました。
たしかにと思って確認したら、rb<tab>
だとrb[space]
に補完されました。そういえばこれのせいでrbenvとフルで入力することになっていたのでした。
このrbって一体なんだと思って調べると、何にことはない、自分で定義した使ってないaliasでした。
ということ、rbをaliasから削除して、快適に補完できるようにしました。
一緒に働きたい方、絶賛 募集中
京都で開発してみたいというエンジニアの皆さん、ご応募お待ちしています!
技術力を伸ばしたい学生さん、アルバイトも可能なのでご応募お待ちしています!
大阪、滋賀、神戸から通勤実績あり
Thanks for sharing, nice post!
返信削除Đến với dịch vụ mua hộ hàng Nhật và vận chuyển gửi ship hàng Nhật về Việt Nam uy tín và vận chuyển hàng từ nhật về việt nam giá rẻ tốt nhất hiện nạy, hay dịch vụ mua hộ hàng Nhật và dịch vụ ship hàng từ nhật về việt nam giá rẻ uy tín nhất hiện nay.
Pil Aborsi Asli Cytotec Misoprostol, dijual dengan merk dagang Cytotec 400mcg, adalah Cara menggugurkan kandungan 6 bulan dengan makanan yang digunakan untuk memicu kehamilan, melakukan aborsi Cara menggugurkan kandungan 8 bulan , mencegah dan menangani ulkus peptikum, dan juga untuk menangani pendarahan postpartum akibat kontraksi uterus yang buruk. Untuk keperluan aborsi, obat telat datang bulan paling manjur ini sering digunakan bersama dengan cyrux atau obat pendorong janin. Keefektivannya untuk melakukan aborsi sendiri berkisar antara 80% hingga 99%. Andalankuret.com Klinik Aborsi cara menggugurkan kandungan
削除kuliseo cara menggugurkan hamil
Cara Menggugurkan Kehamilan
Pil Aborsi Cytotec
Jasa Pembuatan Website MLM
Jasa web MLM
Jasa Maklon Herbal
Jasa Maklon Suppliermlm.com
Alat Pembesar Penis
返信削除Vakum Pembesar Penis
Procomil Spray
Vimax Spray
Obat Kuat Semprot
Obat Kuat Herbal
Obat Kuat Pria
Cream Pembesar Penis
Minyak Pembesar Penis
Oil Pembesar Penis
Minyak Lintah Hitam
返信削除Obat Kuat Cialis
Obat Kuat Viagra
Obat Kuat Levitra
Obat Pelangsing Badan
Obat Pelangsing
Obat Penggemuk Badan
Obat Penggemuk
I was told to be successful person in my childhood. So it's very important for me that now I write nursing essays using this source all working day. So it's a kind of success for me.
返信削除このコメントは投稿者によって削除されました。
返信削除Thanks for sharing, nice post! Post really provice useful information!
返信削除Giaonhan247 chuyên dịch vụ mua hộ hàng hàn quốc và mua hộ order hàng hàn quốc cũng như hướng dẫn cách order hàng hàn quốc về việt nam uy tín và tìm hiểu thêm aliexpress là gì và cách mua hàng như thế nào.
Situs Yang Banyak Membantu Kami
返信削除Vimax | Obat Vimax | pembesar penis
vimax
Obat Vimax
vimax canada
pembesar penis
obat pembesar penis
pembesar penis terbaik
pembesar penis permanen
jual Obat vimax
vimax asli
Erogan Pills
返信削除Obat Pembesar Penis Erogan Asli
Erogan Asli
Obat Erogan
Erogan
Obat Erogan Usa Asli
Jual Obat Kuat Viagra Usa Di Jakarta
Jual Viagra Di Jakarta
Jual Vimax Asli Di Jakarta
Agen Vimax Canada Di Jakarta
Obat Pembesar Penis Asli Ampuh Aman
Hammer Of Thor
Penirum
Penirum
I found your website on Google. I was really lucky to be able to find an interesting website like this
返信削除Pantangan Makanan Untuk Penderita Asma
Cara Mengatasi Susah Menelan
Obat Stroke Ringan
Cara Mengobati Penyakit Stroke
Obat Penyakit Tipes
Sites like these I'm looking for
返信削除Thanks for the information, in tunggua keep the latest news
obat tradisional anemia aplastik
penyebab mata bintitan
Very clean web site, appreciate it for this post.
返信削除Obat Hipertensi
Obat Infeksi Ginjal
cara menyembuhkan maag kronis
cara menyembuhkan asma
Here I am here to provide information about health that can increase your knowledge
返信削除Stroke Non Hemoragik dan Cara Mengobatinya
Obat Laringitis Tradisional
Obat Leukoplakia Alami
Obat Benjolan Di Payudara
The content of this article make me enjoy to read more. Many good informations have gotten by this article. Thanks a lot and visit my articel too
返信削除Cara Mengobati Gatal-Gatal Akibat Gagal Ginjal
Obat Hepatitis A
Walatra Lycopene Softgel
Obat Kista Rahim
Obat Fatty Liver
返信削除It's true that happiness when sharing small things but can be of great benefit to people including this article is very useful.
Cara Alami Menurunkan Asam Urat
Cara Alami Mengobati Stroke Sebelah Kanan
Cara Mengobati Wasir Secara Alami Pada Ibu Hamil
Khasiat Daun Ungu Untuk Wasir dan Cara Mengolahnya
Cara Menghilangkan Benjolan di Anus Akibat Wasir
the article that you wrote is very useful, besides that we as readers are also very easy to understand, I hope information like this continues to be updated
返信削除Obat Untuk Infeksi Saluran Pencernaan Pada Anak Dan Dewasa
Obat Anyang Anyangan Setelah Berhubungan Intim
Cara Alami Menghilangkan Benjolan Di Dalam Hidung
Obat Kelenjar Getah Bening Bengkak Yang Ampuh
Obat Luka Lecet Pada Kemaluan Pria
Cara Cepat Menyembuhkan Luka Bakar Secara Alami
Thanks for the information presented on your website
返信削除Very in waiting for other information
obat infeksi pencernaan
obat tradisional kanker hati
obat radang batu empedu
It's true that happiness when sharing small things but can be of great benefit to people including this article is very useful.
返信削除obat hipertiroid alami
obat batu ginjal manjur
cara mengatasi hipertiroid
Cara Alami Mengeluarkan Batu Ginjal Tanpa Operasi
nice information,,,
返信削除Obat Tradisional Nyeri Sendi Dan Otot Kaku
Pantangan Penyakit Kerumut
Tenggorokan Terasa Mengganjal Tapi Tidak Sakit
Cara Menyembuhkan Cedera Engkel
Ramuan Obat Hernia Alami
Always we refer to the articles you present today.
返信削除Obat Untuk Henti Jantung Mendadak Secara Alami
Obat Tradisional Skoliosis
Obat Susah BAB Alami
Obat Alami Hidrokel
Obat Migren Alami
This article contains a lot of information needed by the general public, so it is very interesting to read by anyone who needs that information.
返信削除Obat Herbal Penyakit Kuning
The composition of the writing is good and interesting to be explored further about the contents contained therein. Thank you for the contents of the article that contains many benefits and certainly motivates me to be able to do the things you do.
返信削除Pengobatan Kista Rahim Secara Herbal
The article is good and easily trusted by us readers, thanks also for the guest book, nice to visit on this site ... don't forget to visit our site at this ... good luck
返信削除Obat Perut Kembung Dan Susah Buang Angin
The composition of the writing is good and interesting to be explored further about the contents contained therein. Thank you for the contents of the article that contains many benefits and certainly motivates me to be able to do the things you do.
返信削除Bahaya Akibat Penyakit Gagal Ginjal
Congratulations reactivities ,, highly awaited new information from this site
返信削除Good luck !!
pola makan penderita syaraf kejepit
obat kanker hati ampuh
the information presented on this page is very interesting to see, hopefully useful
返信削除Infeksi Paru-Paru Karena Rokok Dan Cara Mengatasinya
Nyeri Kaki Pada Anak Di Malam Hari
Cara Mengolah Jahe Untuk Nyeri Sendi
Pantangan Pengapuran Tulang Tumit
Cara Mengatasi Karotenemia
information related to how to reduce high blood pressure with herbal ingredients
返信削除Obat Herbal Tekanan Darah Tinggi
Makanan Pantangan Tekanan Darah Tinggi
Bahaya Darah Tinggi Di Usia Muda
8 Makanan Penurun Tekanan Darah Tinggi
Cara Menurunkan Tekanan Darah Tinggi Semasa Mengandung
Sayuran Yang Dilarang Penderita Darah Tinggi
Cara Menurunkan Tekanan Darah Tinggi Di Usia Muda
Cara Alami Penurun Darah Tinggi
Makanan Sehat Bagi Penderita Darah Tinggi
we are waiting for the latest information
返信削除Makanan Yang Bisa Mencegah Kanker Tenggorokan
Obat Herbal Kista Ateroma
Lemah Jantung Dan Pengobatannya
Cara Mengobati Vulvitis
Cara Mengatasi Lutut Kopong
Wow, you are very good in the social field and your website is interesting and up-to-date
返信削除don't forget to visit our website :) :)
Khasiat Tanaman Obat Khusus Ginjal Bocor
Pantangan Anda Yang Menderita Ginjal Bengkak
Jus Untuk Penderita Ginjal Bengkak
Ramuan Untuk Penderita Ginjal Bengkak
Cara Mengatasi Batu Ginjal Yang Paling Manjur
Gejala Penyakit Batu Ginjal Dan Pencegahannya
Penyebab Penyakit Batu Ginjal Pada Pria Dan Wanita
Obat Tradisional Untuk Mengobati Stroke Ringan
Gejala Penyakit Stroke Ringan
Bahaya Penyakit Stroke Ringan Pada Remaja Maupun Orang Tua
Saved as a favorite, I really like your blog!
返信削除Cara Mengobati Mata Episkleritis
Cara Mengatasi Nyeri Dada Akibat Asam Lambung Tinggi Dengan Cepat
Faktor Penyebab Kanker Mata Yang Jarang Diketahui
Cara Mengatasi Kebas Di Kaki dan Tangan
I see your point, and I completely love your article.
返信削除Obat Blefaritis / Radang Kelopak Mata Tradisional
Cara Menyembuhkan Dakriosistitis Secara Tradisional
Gejala Kanker Sumsum Tulang Belakang
Jual obat aborsi - Obat aborsi asli - Pesan obat aborsi - Obat aborsi Murah - Aborsi - Obat Aborsi
返信削除Good post Jual Obat Aborsi. I learn something new Obat aborsi and challenging on Obat Penggugur Kandungan blogs I stumbleupon every day of Aborsi. It will always be exciting to read content from other writers and use a jual cytotec and Jual obat aborsi cytotec little something from their Klinik aborsi You’ve written nice Jual obat aborsi asli post , I am gonna bookmark this Cara Menghindari penipuan penjual obat aborsi Palsu page , thanks for info. I actually appreciate your own pil peluntur janin position and I will be sure to come back here. Jual aborsi his is a really good post. Must admit that you are among the best bloggers I have obat aborsi read of harga cytotec Thanks for posting this informative article of obat aborsi murah . You may havce a lot of obat aborsi, as well aborsi.
Thank you for providing Jual obat aborsi information from your Obat Aborsi di Apotik. On of the good Obat penggugur di apotik website in search results obat telat bulan. Well, Thanks a lot of cytotec for such a wonderful post of Penggugur Kandungan, the stuff posted were really obat aborsi 2 bulan interesting and useful. Obat aborsi 3 bulan. - Cara menggugurkan kandungan - Toko jual obat aborsi - cara aborsi aman cepat - Obat aborsi - Jual obat aborsi - jual cytotec - cytotec - Penggugur kandungan - Jual Obat aborsi Cytotec - Cytotec obat aborsi - Obat aborsi cytotec - Aborsi cepat - Aborsi Tuntas - Cytotec manjur - Obat aborsi janin - Jual cytotec
返信削除