macOS用のRubyバージョンマネージャーの比較

この記事では、Macで最も人気のあるRubyのバージョンマネージャを比較します。Chruby、Rbenv、RVM、そして複数の言語向けのバージョンマネージャであるAsdf、そしてRustで書かれた新しいバージョンマネージャであるFrumを取り上げます。あなたが最も必要とするものに基づいて推奨事項を提供します。

プリインストールされたRubyは開発者向けではありません

Rubyに初めて触れる人々は、macOSにRubyがプリインストールされていることに喜びを感じます。しかし、より経験豊富な開発者に「MacのシステムRubyを使うな」と言われると、彼らはしばしばがっかりします。私はその他の場所でその理由について書いています。要するに、システムRubyはmacOSのためにあり、あなたのためにはありません。ユーティリティスクリプトを実行するためには問題ありませんが、開発のためには、システムRubyは古く、ジェムのインストールに注意が払われないと、頭痛の種になります(システムセキュリティの侵害を含む)。

HomebrewのRuby問題

Homebrewは、macOSに開発者向けソフトウェアを追加するためのパッケージマネージャとしてほぼ標準的なものになりました。Homebrewを使って新しいRubyのバージョンをインストールし、システムRubyに依存しないようにすることは簡単です。しかし、Homebrewには2つの問題があります。まず、他のHomebrewパッケージがインストールされると、HomebrewのRubyバージョンが自動的かつ予期せずに新しいバージョンに置き換えられることがあります(この問題はbrew pin rubyで解決されます)。より重要なのは、Homebrewでは1つのバージョンのRubyしかインストールできないことです。Rubyで1つ以上のプロジェクトを開発または維持している場合、おそらく複数のRubyバージョンを切り替える必要があります。そこでバージョンマネージャが必要になります。

Asdf for Multiple Languages

Asdfは複数の言語を対象とするバージョンマネージャーです。Rubyを使用してRails 6でWebアプリケーションを開発する場合、Railsスターターアプリケーションを構築するためにNodeとYarnをインストールする必要があります。(Rails 7はNodeの必要性を排除する可能性がありますが、現時点では確定していません。)

したがって、Rails開発者にとってAsdfは理想的なバージョンマネージャーです。Python、Elixir、その他多くの言語(サポートされている言語のリストを参照)でアプリケーションを開発する場合にも適しています。Asdfを使用する弊害はあるでしょうか?2つあります。一般的なコマンドを傍受するためにシムを使用するため、トラブルシューティングが難しくなることがあります。また、いくつかの操作において少し遅くなることがあります。複数の言語で開発を行っている場合、Asdfを試してみてお気に入りかどうか確認してください。Asdfが遅く感じる場合は、Rustで書かれたRuby専用のバージョンマネージャーであるFrumに切り替えてください。

Ruby専用のバージョンマネージャー

Rubyのみを使用してアプリケーションを開発する意向の場合、Chruby、Frum、Rbenv、RVMの4つのRuby専用バージョンマネージャーから選択してください。これら4つの違いは、速度、複雑さ、それぞれがRubyのバージョンを切り替える方法にあります。最も古いものから見てみましょう: RVM.

RVM

RVMはRubyの最初の人気あるバージョンマネージャーでした。現在も維持されており、広く使用されています。RVMは、ディレクトリを変更する際に環境変数を設定するシステムcdコマンドを変更します。cdコマンドをオーバーライドするため、RVMのインストールスクリプトはシェルの設定ファイル(新しいMacでは~/.zshrcファイル)を変更します。

RVMは環境変数を適切に表示し、Rubyとgemのバージョンと場所を明らかにし、問題の診断に役立ちます。しかし、RVMにはgemsetsなどの追加機能が含まれており、これらはバンドラーがコアRubyに追加されてgem依存関係を管理するようになったため、もはや必要ありません。追加の複雑さは必要ないため、多くの開発者はRbenv、Chruby、Frumなどの新しいバージョンマネージャーに切り替えています。

Rbenv

RVMとともに、Rbenvは長らくRubyの最も人気のあるバージョンマネージャーでした。Rbenvはshimsを使用して一般的なRubyコマンドを傍受します。(Asdfもshimsを使用します。)

RbenvをHomebrewでインストールした後、Rbenvのshimsが通常のRubyコマンドより優先されるように~/.zshrcファイルを変更する必要があります。shimはrbenv execコマンドを呼び出し、どのバージョンのRubyを使用するかを決定した後、任意のRubyコマンドを実行します。

シムスには二つの欠点があります。まず、シムスは実際のコマンドを隠すことでトラブルシューティングを難しくします。例えば、which rubyコマンドはRbenvのシムを表示し、実際のRubyバージョンではありません(実際のRubyコマンドを見たい場合はRBENV_DEBUG環境変数を設定する必要があります)。第二に、シムはRubyコマンドの実行にマイクロ秒の遅延を加える可能性があります。(RbenvはRubyコマンドを実行するたびに介入しますが、RVMのようにディレクトリを変更するときだけ介入します。)遅延に気付いたり、シムのアイデアが気に入らない開発者にはChrubyやFrumがあります。

Chruby

ChrubyはRVMやRbenvほどよく知られていませんが、いくつかの著名なRuby開発者に支持されています。RVMとは異なり、cdコマンドを上書きしません。RbenvやAsdfとは異なり、シムを使用してコマンドを傍受しません。Chrubyをローカルシェル環境で実行するために~/.zshrcファイルを変更する必要があります。Chrubyは選択したRubyバージョンに基づいて$PATHを変更するため、手動で変更する必要はありません。

ChrubyはRubyのために特定の環境変数も設定します。これでChrubyが複数のRubyバージョン間を切り替えるために必要なすべてです。whichでトラブルシューティングも問題なく行えます。私は数年間Chrubyを使用し、問題はありませんでした。Chrubyは素晴らしい選択ですが、最新のRubyバージョンマネージャであるFrumを試してみることもできます。

Frum

FrumはRustで書かれており、システムソフトウェアの高速なコマンドライン実行に適した言語です。Frumは新しく(2021年初頭にリリース)、Asdf、Chruby、Rbenvとは異なり、Rubyインストーラーコマンドが組み込まれているため、Rubyをインストールするための追加プログラムは必要ありません。インストーラーは高速で、Frumは依存関係を必要としない(HomebrewでインストールできるワンストップのRust実行ファイルです)。

Frumをインストールした後、あなたの~/.zshrcファイルを編集して、ローカルシェル環境でFrumを実行する必要があります。他のバージョンマネージャと同様に、プロジェクトディレクトリ内の.ruby-versionファイルを確認し、プロジェクトにバージョンが指定されていない場合は、グローバルなRubyバージョンをデフォルトにします。シムはありません(AsdfやRbenvとは異なり)、cdコマンドをオーバーライドしません(RVMとは異なり)。新しくても、ワンストップで高速なためお勧めです。

Rubyのバージョンマネージャをインストールする

I’ve written a complete guide to installing Ruby on Mac. In the guide, I provide instructions for:

RVMやRbenvを探求したい場合は、以下を参照してください:

A Note about Docker

ルビーのバージョンマネージャーについて話すと、誰かが「私はDockerを使っている」と言うことでしょう。Dockerは、一部の開発者がバージョン管理に使用するコンテナ化ツールです。Dockerの主な使用ケースは、アプリケーションを実行するために必要なソフトウェアの依存関係(言語、データベース、メッセージキューなど)を含む再現可能な仮想サーバーを作成することです。そのため、サーバーへのデプロイのために開発環境の「凍結」バージョンを作成するのに最適です。

また、コンテナ内でローカルに開発することもできますが、バージョンマネージャーと比較して、遅くなり、より多くのメモリが必要になり、設定の複雑さが増します。シンプルを保つために、アプリケーションが非常に複雑でない限り、Dockerはローカル開発に使用しません。

結論

複数のRubyプロジェクトに取り組んでいるのであれば、あなたはただのルビーのエンジニアではありません。ローカル開発環境に優れたバージョンマネージャーをインストールすることをお勧めします。

I like Asdf because I develop in Ruby and JavaScript and Asdf gives me one version manager for both languages. However, Asdf uses shims (like Rbenv) so occasionally it’s slower than I like. I also find it annoying that Asdf hides the actual command from troubleshooting with the which command. If these drawbacks outweigh the convenience of managing multiple languages, I recommend using Frum to switch among your Ruby versions. Version managers should be simple and stay out of your way when you’re working.

MacOSにおけるRubyバージョンマネージャーに関するよくある質問(FAQ)

RVMとrbenvの主な違いは何ですか?

RVM (Ruby Version Manager)とrbenvは、システム上で複数のRubyバージョンを管理するためのツールです。主な違いはそれぞれのアプローチにあります。RVMはより機能豊富で、特定のRubyアプリケーション用のgemset(一連のgems)を管理することができます。一方、rbenvはシンプルで、Rubyバージョンの切り替えにのみ焦点を当てています。gemsetはサポートされていませんが、ruby-buildというプラグインを使用して類似の機能を実現できます。

RVMを使用して特定のバージョンのRubyをインストールする方法は?

RVMを使用して特定のバージョンのRubyをインストールするには、’rvm install’コマンドにバージョン番号を続けて実行します。例えば、Ruby 2.6.3をインストールするには、’rvm install 2.6.3’というコマンドを使用します。インストールが完了したら、’rvm use’コマンドを使用してこのバージョンに切り替えることができます。例: ‘rvm use 2.6.3’。

RVMとrbenvを同じシステム上で使用できますか?

技術的には同じシステム上にRVMとrbenvの両方をインストールすることは可能ですが、一般的にはお勧めしません。両方のツールはシェル環境を変更し、両方を持つと予期しない動作を引き起こす可能性があります。必要に応じて一方を選択し、それに固執することをお勧めします。

rbenvを使用してRubyバージョンをアンインストールする方法は?

rbenvを使用してRubyバージョンをアンインストールするには、’rbenv uninstall’コマンドにバージョン番号を続けて実行します。例えば、Ruby 2.6.3をアンインストールするには、’rbenv uninstall 2.6.3’というコマンドを使用します。

RVMでデフォルトのRubyバージョンを設定する方法は?

RVMでデフォルトのRubyバージョンを設定するには、‘rvm –default use’コマンドにバージョン番号を続けて使用します。例えば、Ruby 2.6.3をデフォルトに設定するには、‘rvm –default use 2.6.3’コマンドを使用します。

rbenvとそのプラグインをどのように更新すればよいですか?

rbenvとそのプラグインを更新するには、gitを使用します。ターミナルでrbenvディレクトリ(通常は‘~/.rbenv’)に移動し、‘git pull’を実行します。次に、各プラグインディレクトリに移動して同じ操作を行います。

RVMやrbenvは他のプログラミング言語でも使用できますか?

RVMとrbenvはRubyバージョン管理用に特化して設計されています。他のプログラミング言語のバージョンを管理する必要がある場合は、PythonのpyenvやNode.jsのnvmなどのツールを検討すると良いでしょう。

rbenvでインストールされた全てのRubyバージョンをリストアップするにはどうすればよいですか?

rbenvでインストールされた全てのRubyバージョンをリストアップするには、‘rbenv versions’コマンドを使用します。これにより、rbenvが使用できる全てのRubyバージョンのリストが表示されます。

RVMでgem依存関係をどのように処理すればよいですか?

RVMではgemsetを使用してgem依存関係を管理できます。‘rvm gemset create’コマンドでgemsetを作成し、‘rvm gemset use’コマンドでそれに切り替え、必要に応じてgemをインストールします。

rbenvで新しいRubyバージョンをどのようにインストールすればよいですか?

rbenvで新しいRubyバージョンをインストールするには、‘rbenv install’コマンドにバージョン番号を続けて使用します。例えば、Ruby 2.6.3をインストールするには、‘rbenv install 2.6.3’コマンドを使用します。

Source:
https://www.sitepoint.com/ruby-version-managers-macos/