LoginSignup
9
9

More than 3 years have passed since last update.

Railsアプリケーションの環境構築周りのまとめ

Last updated at Posted at 2020-02-24

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. 関係図

言葉だけだと見返した時に意味わかんなくなりそうなので、イメージ図を貼っておく。

30672.jpg

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をつけるべき。
9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9