h3pei.tech
お仕事のご依頼
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 の基本的な使い方」について整理します。

h3pei's icon

h3pei

フリーランスのソフトウェアエンジニア。Ruby / Rails アプリケーションの開発が得意領域。設計・実装・運用まで含めてプロダクト開発が好きです。

Questalという目標達成コミュニティサービスを開発しました。仲間と一緒に目標達成に取り組みたい方はぜひご利用ください。

お仕事のご依頼
GitHubnoteX

関連記事