この記事では、《Rails初心者が知っておきたい基礎知識》について、
業務を通して学習した内容をまとめています。
- gem とは…?
- Gemfile とは…?
- Gemfile.lock とは…?
- Bundler とは…?
こういった疑問についてまとめています。
※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。
__『gem』__は・・・
Rubyのライブラリ(パッケージともいいます)です。
__『ライブラリ』__とは…
プログラムの部品で、__便利な機能をひとまとめにしたもの__です。
ライブラリを利用することで、__自分で1からコードを書くことなく機能を実装することができるので、効率的に開発することが可能__です。
Rubyのgemには便利なものがたくさんあり、例えば…
- Rails(Webフレームワーク)
- Devise(ログイン機能)
- Kaminari(ページネーション)
- unicorn(アプリケーションサーバ)
- Active Admin(管理画面)
などがあります。
gemを使うことでログイン機能やページネーションといった機能も、簡単に実装可能です。
##Gemfile とは…?
__『Gemfile』__は・・・
gemをインストールするための『設計書』のようなもので、基本的にこのGemfile
に自分のアプリケーションに必要なgemを記述します。
##Gemfile.lock とは…?
__『Gemfile.lock』__は・・・
gemをインストールした後の『ログ、記録』のようなもので、インストールしたgemの一覧とバージョンが記載されています。
###【比較】Gemfile と Gemfile.lock の違い
Gemfile | Gemfile.lock | |
---|---|---|
更新方法 | 手動 | 自動 |
更新タイミング | コマンド実行前 | コマンド実行後 |
内容 | インストールするgem | インストールしたgem |
【余談】なぜ Gemfile.lock が必要なのか…?
gemは、インストールした時期によってバージョンが変わってしまう可能性があるため…
例えば、__本番環境と開発環境でインストールされるgemのバージョンが異なってしまう可能性__があります。
しかし・・・
Gemfile.lock
が使用するgemのバージョンを管理してくれるため、__仮にgemがアップデートされても、使用するgemのバージョンは変更させないということが可能__になります。
ちなみに・・・
Gemfile.lock
を更新したい時は、bundle update
を使います。
##Bundler とは…?
__『Bundler』__は・・・
gemを管理するためのgemで、Bundlerを使用することで…
bundle install
bundle update
などのコマンドが使用できるようになります。
gem同士は関連し合っていることが多いので、実際はGemfile
に書いてあるgemの他にも、gemが必要になります。
そこで・・・
Bundler
は、それらも自動でインストールし、Gemfile.lock
に記述してくれます。
Bundler
は、__特定のRailsアプリケーションに必要なgemパッケージをリストアップし、複数のコンピュータ間で簡単に同期が取れるようにするもの__です。
例えば・・・
上記の図のように開発者Bさんが、開発者AさんからRailsアプリのソースコードを受け取ったとします。
この時、Bさんはbundle install
を実行するだけで、必要なgemをインストールすることができ、簡単に環境を構築できます。
###【一覧】 よく使う Bundlerコマンド のオプション
コマンド | 概要 |
---|---|
bundle init | Gemfileを生成 |
bundle install | Gemfileに記述したgemをインストール |
bundle update | インストール済みのgemのバージョンを更新 |
bundle list | インストール済みのgemを一覧表示する |
bundle exec | Bundlerでインストールしたgemを使用して、 コマンドを実行 |
###【コマンド】 bundle install とは…?
bundle install
上記を実行すると・・・
Railsは、Gemfile.lock
を元にgemのインストールを行います。
この時…
『Gemfile.lock
に記述されていなくて、且つGemfile
に記述されているgem』
がある場合、__『該当するgem』と『該当するgemに関連するgem』をインストールした後、Gemfile.lock
を更新__します。
反対に、Gemfile.lock
に記述されていれば・・・
__そこに記述されたgemを見て、それがGemfileの内容に矛盾していない限り、Gemfile.lock
の内容に従いインストール__します。
###【コマンド】 bundle update とは…?
bundle update
上記を実行すると・・・
Bundlerは、Gemfile
を元にgemのインストールを行い、その後Gemfile.lock
を更新します。
bundle update
は・・・
その言葉通り、gemのバージョンを更新する時に使用します。
なぜなら・・・
bundle install
コマンドでは、条件に矛盾が生じない限りGemfile.lock
に存在するgemに関しては、更新作業を行わないからです。
※bundle update
は、本番環境で安易に実行しないように注意しましょう。場合によっては、gemのバージョンにズレが発生し、クラッシュする可能性があります。
ですので・・・
bundle update
は、必ずローカル環境で実行してください。
また、bundle install
に関しては・・・
__Gemfile
に新しくgemを記述した際に使用__します。