Railsの案件に携わって最初めちゃ苦しんだ。
まとめておいて後から振り替えれるようにしておく。
1. 各パッケージ管理ソフトの概要
パッケージ管理ソフト | 概要 |
---|---|
rbenv | 複数のRubyバージョンを管理するツール。バージョンを指定してrubyをインストールできる。インストール後は各バージョンごとに利用するgem置き場が提供される。Railsアプリケーションごとに使用するRubyバージョンを指定できるようになる。 |
RubyGems | Rubyライブラリのgemのパッケージ管理ツール。現在利用しているバージョンのrubyに対してgemをインストールできる。rubyをインストールすると付属してくるツール。目的のgemをインストールする時に別のgemが必要になる(=依存関係がある)場合、それもインストールして目的のGemを使える状態にすることができる。 |
Bundler | RubyGemsをより高機能に使うgem。RailsプロジェクトごとにGemfileというファイルで使用するgemを明示的に管理できる(PC全体を汚さず、Railsプロジェクトで完結する)。こいつ自体がRubyGemsによってインストールされるgemであるが、RubyGemsを操って各Railsアプリケーションに必要なgemをGemfile, Gemfile.lockというgem一覧ファイルに基づいてインストールできる。 RubyGemsの説明を見てるとそれで十分じゃね?と思うかもしれないが、Gemfile.lockが一番重要な機能。例えばgem「A」をインストールする場合にgem「B」が必要だったとする。そんなgem「A」をRubyGemsでインストールしたとする。このときgem「B」もインストールされる。ここまではよい。しかし時が流れてなにかの拍子にgem「B」のバージョンを上げたとする。このとき、gem「A」を利用するには実はgem「B」の特定のバージョンが必要であり、互換性がなくなってしまった場合、gem「A」は使えなくなってしまう。gem「B」のどのバージョンが必要なのかももうわからなくなってしまう。Bundlerを使ってgemをインストールして使用する場合は、Gemfile.lockに具体的にどんなgemをどんなバージョンでインストールしたのかが細かく記録されるため、この問題へ対処できるのだ。また、複数人で開発するときに対象のRailsアプリケーションが使用するgemの一覧をバージョン含めて共有する時にも役に立つ。 |
補足
rbenv
- 関係するディレクトリ
# rbenv周り
~/.rbenv/
versions/
X.X.X/ # Ruby(Ver X.X.X)の各種ファイルを管理するディレクトリ
bin/ # 当該Rubyバージョンの標準ライブラリ、RubyGems経由でインストールしたコマンドの実行ファイル
include/
lib/ # 標準ライブラリ、RubyGems経由でインストールしたライブラリ
openssl/
share/ # マニュアル類
shims/
<各コマンドの実行ファイル>
version # PC全体で使うruby環境のバージョン番号が書かれている
# Railsプロジェクト周り
<Railsプロジェクト用ディレクトリ>/
.ruby-version # このRailsプロジェクトで使うRuby環境のバージョン番号が書かれている(優先順位は version < .ruby-version)
2. 関係図
言葉だけだと見返した時に意味わかんなくなりそうなので、イメージ図を貼っておく。
3. よく使うであろうコマンド
3.0. rbenvのインストール・設定
# rbenv自体のインストール
brew install rbenv
# rbenvにパスを通す
## .bash_profileオープン(zsh使ってるなら.zshrc)
vi ~/.bash_profile
## 以下書き込んで保存
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
## 設定を即反映
source ~/.bash_profile
## パスが通っていることを確認
which ruby
=>/Users/<自身のユーザー名>/.rbenv/shims/ruby
になってればOK
3.1. rbenv
コマンド | 説明 |
---|---|
rbenv install --list | インストール可能なRubyのバージョンを表示。無印のバージョンが最も高くてdevとかついてないやつが最新の安定版みたい。 |
rbenv install <バージョン> | バージョン指定してRubyをインストール |
rbenv rehash | インストールしたRubyへパスを通す(新しくバージョン指定してインストールした場合に必須で必要になる。rbenv install とセット) |
rbenv versions | インストール済みのrubyのバージョンを表示する。*がついてるやつがカレントディレクトリで使用しているRubyのバージョン。後述のruby -vの結果と同じ。 |
rbenv global <バージョン> | 特段の指定がない場合に本マシンで使用するRubyのバージョンを設定 |
rbenv local <バージョン> | カレントディレクトリ配下で使用するRubyのバージョンを指定。このコマンドを実行するとカレントディレクトリに.ruby-versionというファイルができ、開くと<バージョン>が記載されている。後述のGemfileではRailsアプリケーションが使うRubyバージョンは指定できない(Bundler自体が現在使っているRubyを親とするため)ため、なかなか重要なファイルである |
3.2. RubyGems
基本的にgemはBundlerを使ってアプリケーションごとにインストール、管理するため、RubyGemsのコマンドを使用することは少ない。
コマンド | 説明 |
---|---|
gem install bundler | 現在使用しているバージョンのRubyへBundlerをインストールする。 |
gem list -ra <gem名> |
イントール可能なgemのバージョンを確認。には正規表現も使えるため、例えばrailsならば^rails$とすると表示がすっきりする |
gem update --system | RubyGems自体のバージョンをあげる。 |
gem uninstall <gem名> |
gemをアンインストールする |
3.3. Bundler
コマンド | 説明 |
---|---|
bundle install | 1. Gemfile.lockを確認してgemをインストール。 2. Gemfileを確認してGemfile.lockに存在しないgemをインストールし、Gemfile.lockに追記・更新。 |
bundle update <特定のgem名> | Gemfile.lockを無視してGemfileに書いてある条件に基づいて特定のgemをインストール。一部のgemをアップデートしたいときに影響範囲を小さく抑えるために使用する。<特定のgem名>を省略してしまうと、Gemfile.lockの内容をすべて無視して、イチからGemfileに基づいてgemをインストールし直してしまうため、これまで動いていたRailsアプリケーションが動かなくなった、ということが起きうる。基本的に使っちゃダメなコマンド。 |
bundle exec <各種コマンド> | Gemfile.lockに書いてあるバージョンのgemを使用して<各種コマンド>を実行。bundle execがないと意図せぬバージョンのgemが使われたりして大変なことになる。railsアプリケーションを操作するときには絶対にbundle execをつけるべき。 |