【Rails】ruby、gem、rbenv、rails、bundler関係等適当まとめ。特にbundler

  • 6
    いいね
  • 0
    コメント

Macを触り始めて数ヶ月、Railsを使ってWebサービスを開発しようと思ったが一番最初にぶち当たった壁がRubyの関係や構成、運用方法だったりを適当にまとめます。
完璧私用メモとなってます。。。
Railsは最下層なので説明は省きます

参考記事
bundle install と updateの違い
Rails開発環境の構築(複数バージョン共存可能)(Homebrew編)

位置関係

位置関係を図で適当に表したらこうなります

bundlerでプロジェクトGemファイルを管理しない場合

rbenv
rbenv-->ruby
rbenv-->ruby-->gem
rbenv-->ruby-->gem-->rails

bundlerでプロジェクトGemファイルを管理する場合

rbenv
rbenv-->ruby
rbenv-->ruby-->bundler
rbenv-->ruby-->bundler-->gem
rbenv-->ruby-->bundler-->gem-->rails

各種説明

Ruby

・全ての元となる言語そのも
・これは説明は必要無いですね

$ ruby -v
>>ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]

gem

・Rubyの内部に組み込まれているRubyでのパッケージ管理システムのようなもの(apt-get等)
・Rubyの一部なのでRubyをインストールすると自動的にこのコマンドも使用することができる。
・Rubyの一部なので複数のRubyをインストールした場合、Gemはそれぞれ独立して存在している。
つまり、Ruby 2.2.2のGemにRailsをインストールしてもRuby 2.3.1にはインストールされない。

$ gem -v
>>2.5.1
$ gem install rails
>>↑でRailsがインストールされます。

rbenv

・Rubyのバージョンを管理する→Rubyの内部には無くRubyとは独立した存在である
・当然これでrubyのバージョンを切り替えると使用するgemも変わる
・ruby をインストール場合rbenvで管理できるためにrbenv install 2.3.1等でインストールする。

$ ruby -v
>>ruby 2.3.1p112

$ rbenv global 2.2.2
$ ruby -v
>>ruby 2.2.2p95

$ rbenv local 2.4.0-dev
$ ruby -v
>>ruby 2.4.0-dev

bundler

・gemを管理するやつ
・特徴として異なる開発環境上(複数人開発)で開発する場合Railsのバージョンなどに違いがあれば正常に動かないことが多いので、プロジェクトフォルダの中にRailsなどのパッケージファイルをインストールして、それを使用して開発を行うことが容易になるヤツ

下記に初期の手順を
"bundler init"でGemfileというパッケージリストを生成する(この中に記述されるパッケが使用される)
"bundler install"でGemfileのリストのパッケージをダウンロードインストール
これで仮にrailsをインストールした場合は、
"bundler exec rails s "でrailsサーバー起動が起動します。
※別途ファイルパスを設定する必要があったりします。

$ bundler init
$ bundler install
$ bundler exec rails s

・"bundler exec"経由で起動することでプロジェクトフォルダ内部にあるパッケージを利用します。これをせずにやると、PCにインストールされているものが利用されます。
下記の例だと、現在Ruby 2.3.1を使用していますが2.3.1のgemにはrailsはインストールされていなくRuby 2.2.2にはインストールされていますという警告が出てます。
ですが、bundler exec経由でコマンドを実行するとそのプロジェクトフォルダ内部のrailsを参照しているため使用することができるのです

$ ruby -v
>>ruby 2.3.1p112

$ rails -v
>>rbenv: rails: command not found

The `rails' command exists in these Ruby versions:
  2.2.2

$ bundler exec rails -v
>>Rails 5.0.0.1

バカヤロウ全然ちげーじゃねぇかって思ったすごい方のコメント等指摘お願いします。。。