2021-07-10

ちゃんと理解するrbenv : (1) 概念理解

はじめに

本記事は、Rubyで開発している人にとってほぼ必須ツールと言ってよいであろう rbenv について、ちゃんと理解して使えるようになることを目指して解説・整理したものです。少し長くなるため、読みやすい単位で記事を分けるつもりです。

rbenvはとてもシンプルで洗練されたツールなので、READMEをさっと読むだけで雰囲気で使えてしまうと思います。また、仕事で使うようなケースではアプリのセットアップ手順にrbenvを使うように書かれているので深く考えず導入して使っている、というような人も多いのではないでしょうか。

こういったよくできたツールだからこそ、ちゃんと仕組みを理解して使っている人は少ないのではないかと思い、このような記事を書いてみることにしました。

本記事ではまず、rbenvの概念を理解するために「rbenvとはなにか」「rbenvがあると何が嬉しいのか(どんな問題を解決するのか)」といった点について整理します。

想定読者

  • rbenvを雰囲気で使っていると感じている人
  • rbenvをこれから使おうとしている人

rbenvとはなにか

rbenvとは アプリケーションのRuby環境を整えるツール です。rbenv公式のGitHubリポジトリ の説明文にも次のように書かれています。

Groom your app’s Ruby environment

しかし、この定義だけだとピンと来ないと思うので「rbenvができること」も一緒に抑えておくのが良いでしょう。
rbenvを使うと、次のようなことができるようになります。

  • アプリケーションごとに適切なバージョンのRubyに切り替える
  • 1つのマシン上で複数のバージョンのRubyを扱える

以下、これらの機能が具体的にどう嬉しいのかを掘り下げていきます。

rbenvがあるとなにが嬉しいのか

1つのマシン上で複数バージョンのRubyアプリを開発している人
1つのマシン上で複数バージョンのRubyアプリを開発している人の図

上の画像は、ある開発者が自分のPC上で3つのアプリを開発しており、またそれぞれのアプリが利用しているRubyのバージョンが違うという状況を示しています。

通常1つのマシン上にインストールして使えるRubyは1つなので、もしこの状況下で適切なバージョンのRubyを利用して開発しようとすると、Rubyを都度インストールし直すとか仮想マシンを使うなど何かしら手間のかかる工夫をしなければなりません。

rbenvを使うと、上述のとおり1つのマシン上で複数のバージョンのRubyを扱えるようになり、またそのバージョンの切り替えがかんたんになるため上記のような問題が一度に解決できます。

本番で稼働するRubyと手元のマシンのRubyのバージョンが違う
本番で稼働するRubyと手元のマシンのRubyのバージョンが違う図

もう1つ、別の例を考えてみましょう。上の画像は本番環境ではRuby3.0.1で稼働する App 1 を、システムに直接インストールしたRuby2.6.7を使って実装している状況を示しています。

こうなるともし App 1 に Ruby3.0.1 で導入された新機能が使われていた場合、この開発者の手元ではエラーとなりアプリを正常に動かすことができません。またもし、3.0.1で消された機能を使って実装をしてしまうと開発者の手元では動くものの本番環境ではエラーで動かない、といった惨事が起きてしまいます。

rbenvがあると、アプリごとにどのバージョンのRubyを使うかを明示することができ、1度明示するとほぼ意識することなく自動でバージョン切り替えをしてくれます。よって、適切なバージョンのRubyが見つからない場合はその状態にすぐ気づくことができるようになり、上のようなバージョンのズレに起因する問題が起こりづらくなります。

まとめ

本記事ではrbenvとはなにか、そしてrbenvがあると何が嬉しいのか・どんな問題が解決されるのかについて整理しました。

  • rbenvとアプリケーションのRuby環境を整えるツールである
  • rbenvを使うと..
    • アプリケーションごとに適切なバージョンのRubyに切り替えることができる
    • 1つのマシン上で複数のバージョンのRubyを扱えるようになる

rbenvの概念をおおよそ理解したところで、次の記事では「rbenvの基本的な使い方」について整理します。