はじめに
Ruby(on Rails)の環境を構築しようと思ったとき、Ruby、Rails、rbenv、ruby-build、Gem、bundlerといろんなものが登場する。それらが何のためにあるのか、どこに何があるのか、どういう順番で構築するのかなど、よくわからない。これらをまとめてみる。
それぞれの役割と関係性
まず押さえたいのは、Rubyは1つのサーバーの中で複数のRubyバージョンの環境をもつことができる。これを管理するのがrbenvだ。rbenvのプラグインとして、実際にrubyをインストールするのがruby-bildである。
Rubyをインストールすると、rubygemsが付随してインストールされる。これはgemをインストールしてくれる。gemとは、Rubyにアドオンするパッケージ的なもので、必要なgemを入れることでアプリに様々な機能を簡単に実装できる。
ただし、gem間にも依存関係があり、これを人で管理するのは難しい。そこでbundlerを入れる。bundlerを入れると、gemインストール時に依存関係のあるgemを合わせてインストールしてくれる。また、アプリケーション毎にgemを入れることも可能である。分かりにくいがbundler自体もgemである。よって、gemは本質的には同列であるが、抽象的にはbundlerの配下にいたほうが理解しやすい。
gemはrubygemsでもbundlerでもどちらでもインストールできる。ただ、実際はrubygemsで最初にbundlerを入れて、以降はbundlerを使ってgemを入れるのが一般的だ。
Railsはgemの1つであり、Webアプリケーションのフレームワークである。
コンポーネント導入の流れ
改めて説明すると、これらのコンポーネントは以下の順番で入れていく。
- rbenvを入れる
- rbenvにruby-buildを入れる
- ruby-buildでrubyを入れる(付随してrubygemsも入る)
- rubygemsでbundlerを入れる
- bundlerでgemsを入れる。(gemsの1つとしてRailsがある)
構成パターン
これらのコンポーネントは全て入ってないといけないわけではない。別になくてもいいものもある。一般的なパターン別に分けてみる。
パターン | rbenv | ruby-build | Ruby | rubygems | bundler | gem | 内容 |
---|---|---|---|---|---|---|---|
1 | × | × | 〇 | 〇 | × | 〇 | rubyアプリケーションが動く環境 |
2 | × | × | 〇 | 〇 | 〇 | 〇 | gemを使ったrubyアプリケーションが動く環境 |
3 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 複数バージョンのrubyアプリケーションが動く環境 |
インターネットでrubyのインストール手順を調べると各々自分のパターンで説明しているため、最初は何が必要なのかが分からないがいろんなパターンがあるのだ。
まとめ
環境構築についてはRubyは便利なゆえに複雑であるという印象だ。