153
113

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【初心者向け】bundler、Gemfile、Gemfile.lockの関係性について図でまとめてみた

Last updated at Posted at 2019-07-27

Ruby on RailsでWebアプリケーション(以降ではRailsアプリと略します)を開発をするにあたり、gemの活用は開発効率をあげるために重要です。

Railsアプリ開発でgemを利用する機会は多くありますが、どのようにgemが管理されているかということについて理解をする機会は少ないかもしれません。

今回は『bundler』『Gemfile』『Gemfile.lock』といった、gemの管理を理解する上で重要な役割をもつ概念について紹介をしたいと思います。

2019年7月27日追記
@scivola さんにコメントで補足説明をしていただきました。
非常に参考になる内容ですので、こちらのコメントもぜひ読んでいただければと思います。

bundlerとは

『bundler』は依存関係にあるgemの依存関係やバージョンを管理してくれるgemです。

インストールしようとしているgem自身もほかのgemを利用しているケースがあります。その場合、依存関係にあるgemもあわせてインストールする必要があります。

また、各gemにはバージョンが設定されているのですが、同じgemでもバージョンが異なるとRailsアプリの挙動を変えてしまったり、他のgemに影響を与えてバグを発生させたりする可能性があります。

これらの問題を解決してくれるのがbundlerです。

bundlerを利用することで『依存関係にあるgemの一括インストール』『gemのバージョン管理』ができるようになります。

Gemfileとは

『Gemfile』とはRailsアプリで利用するgemの一覧を管理するファイルです。

『bundlerによってインストールされるgemはどこで管理されているのか?』
それが今から紹介するGemfileの役割です。

bundle installというコマンドでgemをbundlerを利用してインストールするのですが、その際にはGemfileに記載されているgemの一覧を参照し、まだインストールされていないgemがあればインストールを行います。

ですので、Railsアプリで新しくgemを追加したいという場合はGemfileにgemの名前を追記していくことになります。

Gemfile、bundleコマンド、gemの関係性および処理の流れを図で表現すると以下のようになります。
gemfile-overview-880.png

Gemfile.lockとは

『Gemfile.lock』はGemfileをもとに実際にインストールされたgemの一覧とバージョンが記載されたファイルです。

Gemfile.lockには依存関係にあるgemも含め、bundlerによってインストールされた全てのgemとそのgemのバージョンが記載されています。

Gemfile.lockはGemfileをもとにbundlerによってインストールされたgemの結果を出力するファイルです。そのため、基本的には手動で更新することはありません。
bundle installもしくはbundle updateをすることでGemfile.lockは自動で更新されます。

Railsアプリにインストールされたgemと、Gemfile.lockの関係性を図で表現すると以下のようになります。

gemfilelock-overview-1024x780.png

GemfileとGemfile.lockの比較

GemfileとGemfile.lockの違いについて表にすると以下のようになります。

Gemfile Gemfile.lock
記載されているgem bundlerでインストールするgem bundlerでインストールしたgem
更新タイミング bundleコマンド実行前 bundleコマンド実行後
更新方法 手動更新 自動更新

『Gemfileの内容をもとにbundlerがgemをインストール → インストールしたgemの結果をGemfile.lockに記載』という一連の流れを図としてまとめると以下のようになります。

bundle-gem-overview-880.png

さいごに

以上でRailsアプリにおける、bundler、Gemfile、Gemfile.lockの役割の紹介および図解を終わります。

詳細については『Gemfile?bundler?Rails開発するなら理解しておきたいgem管理の基礎知識』で紹介していますので、興味のある方はご覧になってください。

ツイッター(@nishina555)やってます。フォローしてもらえるとうれしいです!

153
113
2

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
153
113

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?