bundle installの実行内容とは?bundle updateとの違いも解説します【初心者必見】

みなさんこんにちは!

今回の記事は、

悩みを抱えた人
・bundleってなに?
・bundle installの役割が知りたい!
・bundle installとbundle updateの違いってなに?

というお悩みを解決する記事になっています。


この記事の内容

・bundleの意味
・bundle installの役割
・bundle updateの役割
・bundle installとbundle updateの違い
・bundle installとbundle updateの使い分け方


Railsを使って開発を進める中で、”bundle install” と”bundle update” を実行することが多々あると思います。

しかし、「その両者の違いは?」と聞かれると、すぐには回答できない方も多いのではないでしょうか?

Railsでの開発にはGemが必須であり、そのGemの管理のためには「bundle」コマンドに関する知識が不可欠になります。

本記事を通じて「bundle」コマンドに関する知識を深め、適切なGem管理を心がけていきましょう!


レバテックフリーランス … 業界最大級の案件数業界トップクラスの高単価報酬を誇る最大手のサービスです。実績豊富なコーディネーターが丁寧な対応をしてくれるため、案件の無理な提案はありません。フリーランスで生きていくためにはまず登録しておきましょう。
MidWorks … フリーランス賠償責任保障生命保険の折半など、フリーランスでありながらも正社員並みの保障を受けられるのが特徴です。また、経験豊富なキャリアコンサルタントによる手厚いサポートも受けられるため、安定したフリーランス生活を送りたい方には特におすすめのサービスです。
ポテパンフリーランス … IT業界・技術に詳しいコンサルタントが担当してくれるため、こちらの要望をきちんと理解した上で案件を紹介してくれます。また、案件情報のみならず、フリーランスのイロハについても教えてくれるため、フリーランスとして初めて活動される方には特におすすめのサービスです。

レバテックキャリア … ITエンジニアが利用したい転職エージェントNo.1にも選ばれており、年収600万円以上のハイクラス求人を5,000件以上も保有しています。エンジニアが転職を考えた時にまず初めに登録しておくべきサービスです。
Tech Stars Agent … Tech Stars Agentでは、担当エージェントが全員エンジニア出身のため、スキルやキャリアを見据えたきめ細かな転職支援が受けられます。運営元の株式会社Branding Engineerは、独立支援サービス「MidWorks」も展開しているため、独立を視野に入れたサポートも受けられます
転職ドラフト … 年収UP率93.8%/平均年収UP額126万円と圧倒的な年収UP率を誇るイベント型のエンジニア向け 転職サービスです。毎月1回開催され、厳選された優良IT/Web系企業約150社からダイレクトスカウトを受け取ることができます。年収アップを目指す方は登録必須です。


そもそも、bundleってなに?

“bundle install” と”bundle update” の違いについてご説明する前に、まずはその”bundle”の正体についてご紹介しますね。

bundle“とはBundlerというGemが実行するコマンドであり、このコマンドによってアプリケーション全体のGemを管理することが可能となります。

通常、Railsでアプリケーションを開発する際には、複数のgemを使用することになります。

この時、「gemAのver1.0とgemBのver1.0を組み合わせたらうまく動くけど、ver2.0同士だとうまく動かない。」とか、「CさんとDさんの開発環境でgemAのバージョンが合っていない」などの問題が発生することがあります。

そうした状況下で、gem同士の互換性を保ちながらバージョンを調整し、各gemの導入・管理を担ってくれるのが

Bundlerになります。

bundle installの役割

それでは、”bundle install” を実行することで具体的には何をどうすることが可能になるのでしょうか?

bundle install” を実行することによって、RailsはGemfile.lockを元にGemをインストールしていきます。

この時、Gemfileには記載されているもののGemfile.lockに記載されていないGemがある場合には、そのGemとそのGemに関連するGemをインストールした後Gemfile.lockを更新することとなります。

ここで、新たに登場したGemfileGemfile.lockについて少しご説明させていただきます。

Gemfileとは

Gemfileとは、Railsプロジェクトで使用するGemを管理する「管理簿」のようなものであり、新たに必要となったGemがある場合には、このGemfileに以下のように追記していきます。

gem 'devise'

Gemfile.lockとは

一方、Gemfile.lockは、”bundle install” や “bundle update” を実行したことで実際にインストールされたGemを記載したものです。

ここで「実際にインストールされた」と強調したことには意味があります。

一口にGemとは言っても、Gemがそれ単体で成り立っていることは少なく多くのGemが他のGemを使用している(つまり、Gem同士が関連しあっている)ことが多いのです。

例えば、Gem1はその内部でGem2とGem3を使用しており、Gem3はその内部でGem4を使用している場合、Gem1はGem2とGem3、そしてGem4と関連している、ということになりますね。

GemfileとGemfile.lockの関係性

以上を踏まえると、GemfileGemfile.lockの関係性は以下の通りになります。

ファイル用途
GemfileRailsプロジェクトで導入するGemのみを記載する
Gemfile.lockGemfileに記載した「Railsプロジェクトで導入するGem」を使用するために必要な(=関連している)他のGemも含めて、インストールされた全てのGemを記載する

【まとめ】bundle installがすること

以上を踏まえると、”bundle install” の役割は以下のようになります。

  1.  Gemfile.lockに記載されているGemをインストールする
  2.  GemfileとGemfile.lockを比べ、Gemfileに記載されているもののGemfile.lockに記載されていないGemがあれば、そのGemと関連するGem全てををインストールする
  3.  上記1, 2でインストールしたGemを踏まえてGemfile.lockを更新する

bundle updateの役割

続いて”bundle update” の役割を見ていきましょう。

簡潔にはなりますが、”bundle install” と同様の形でまとめると以下のようになります。

  1.  Gemfileに記載されているGemをインストールする
  2.  上記1でインストールしたGemを踏まえてGemfile.lockを更新する

bundle installとbundle updateの違い

ここまで”bundle install” と”bundle update” それぞれの役割について見てきましたが、それらを踏まえると、両者の主な違いは以下の通りです。

コマンド役割
bundle installGemfile.lockに記載されているGemをインストールする
bundle updateGemfileに記載されているGemをインストールする

これだけでは分かりづらいため、具体例を出してご説明していきますね。

例えば、現時点で”devise” というGemを既にインストールしている(Gemfileに 「gem ‘devise’, ‘2.0.0’」という記載があり、既に一度 “bundle install” を実行している)こととします。

その後、Gemのバージョンを変更(Gemfileを「gem ‘devise’, ‘4.0.0’」という記載に変更)した場合、それぞれのコマンドを実行した結果は以下の通りになります。

コマンド結果
bundle install ・2.0.0バージョンのdeviseがインストールされる
※既存のGemについては、Gemfileの変更はGemfile.lockには反映されず、Gemfile.lockに記載されているバージョン(2.0.0)をそのままインストールするため
bundle update ・4.0.0バージョンのdeviseがインストールされる
※Gemfileに記載されているバージョン(4.0.0)をインストールするため

bundle updateでbundle intallがカバーできるのでは?

以上を踏まえると、バージョンを変更する時だけでなく、新しくGemを導入した時も“bundle update” だけで十分なのではないかと思われる方も多いのではないでしょうか。

しかしここで一つ注意しておくべきことがあります。

それは、”bundle update” を実行すると「バージョンを変更したいGem以外のGemのバージョンも変更してしまう」ということです。

本記事の最初の方でご説明した通り、Gemというのはそれ単体で成り立っているものは少なく、他のGemを使用している(関連し合っている)Gemも多く存在しています

そのため、”bundle update” を実行すると意図しないGemのバージョンも変更されてしまい、それによって思わぬところでシステムが動かなくなってしまう(バグが発生してしまう)恐れが出てきてしまうのです。

もちろん、古いGemを使用していてはセキュリティリスクを上げてしまうことになるため、定期的に”bundle update” を実行することは必要となりますが、それは「Gem全体をアップデートする」というタスクの際に実行するようにしましょう。

新しくGemを導入する際にはそのGemとそのGemに関連するGemのみを追加する(他の既存のGemには影響を与えない)ようにし、不要なトラブルは避けるようにしたいですね。

【結論】bundle installとbundle updateはこう使い分ける

ここまでを踏まえると、両者の使い分けはズバリ以下の通りとなります。

コマンド結果
bundle install Gemfileに新たにGemを追加したり、或いはGemfileからGemを削除した場合に実行する
bundle update Gemfileに記載されているGemのバージョンを変更した場合に実行する

お仕事の途中ですが、少し一休みして、転職独立について考えてみませんか🙌?

現役エンジニアが選ぶおすすめの転職エージェント11選【成功談・失敗談もあります】

レバテックフリーランスの評判ってどう?【現役エンジニアが徹底解説します】

MidWorks(ミッドワークス)の評判ってどう?【現役エンジニアが徹底解説します】

日々の業務に追われて自分を見失わないよう、
定期的にキャリアを振り返るようにしておきましょう🤲

最後に

ここまで、”bundle install” と”bundle update” の違いについてご説明してきましたがいかがでしたか?

両者を曖昧なまま使用されている方も多いかと思いますが、両者を混在してしまうと不要なバグを生んでしまうこともあるため、その違いをしっかりと把握しておきましょうね。

このブログを通じて少しでも「傍(はた)を楽(らく)にする」ことができていれば嬉しく思います。

最後まで読んで頂きありがとうございました。