Rubyバージョン管理ツールの選択は、多くの場合、rbenvとRVMの二つのプレーヤーになります。 後者は、その幅広いツールキットのために、広く標準として受け入れられました。 しかし、rbenvは軽量なアプローチで強力な候補となっています。
ボンネットの下
では、これらのツールはどのように仕事を終わらせるのですか? これは、rvmで物事が少し怖いところです。 RVMは、現在のRuby環境変数をロードするために、cd
シェルコマンドをオーバーライドします。 上書きは予期しない動作を引き起こすだけでなく、ディレクトリを切り替えるときにルビーと宝石セットがロードされることを意味します。
rbenvは、shimを使用してコマンドを実行することによって、その場で物事を行います。
*シムのディレクトリ(~/.rbenv/shims
)がPATH
の前に挿入されます。
*ディレクトリには、すべてのRubyコマンドのshimが保持されます。
*オペレーティングシステムは、コマンドの名前と一致するshimを検索し、コマンドはそれをrbenvに渡し、実行するRubyのバージョンを決定します。
アプリケーションのrbenv設定はdirt simpleです:
# .ruby-version
2.3.0
また、RBENV_VERSION
変数を使用すると、コマンドラインからRubyのバージョンを簡単に指定できます。 これは、Rbenvが現在のRubyバージョンをチェックするときに最初に行になります。
ワークロードの委任
RVMには、より重いツールにするいくつかの機能があります。 RVMには独自のRubyインストールメカニズムが付属しています:
rvm install ruby-2.3.0
Rbenvを使用すると、Rubyを自分でインストールするか(~/.rbenv/versions
に保存することによって)、バージョンをインストールするプラグインruby-build
を使用することができます。 Rbenvと同様に、ruby-buildには自作のレシピがあります。
brew install ruby-build
rbenv install 2.3.0
RVMは、gemsetsを使用してプロジェクトごとに依存関係を分離する機能を提供します。 しかし、bundlerが広く使用されているおかげで、gemsetは過去のものです。
Bundlerを使用すると、プロジェクトのgemを簡単に管理できます。
gem install bundler
# Gemfile in root of application
source 'https://rubygems.org'
gem 'rails'
gem 'rspec'
bundle install
ほとんどのプロジェクトは現在Bundlerを使用していますが、プラグインrbenv-gemsets
はgemsetsに相当するrbenvです。
Light is Might
RVMの汎用性は機知に富んでいますが、Rubyのバージョン管理に関しては過剰になる可能性があります。 Rbenvを使用すると、物事をシンプルに保ち、他のツールにプロセスの他の側面を処理させることができます。 RbenvがRubyのバージョン管理に主に焦点を当てているのは、より開発者に優しい設定と設定につながります。 私たちは数年前から私たちのアプリでrbenvを使用してきました。 Capistranoと提携し、rbenv-capistrano
は、デプロイ可能な環境のRubyバージョンのメンテナンスを簡単にします。