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管理を心がけていきましょう!


フリーランス案件を探すならこのエージェント!

運営会社 レバテック株式会社 株式会社Branding Engineer 株式会社Hajimari
対応エリア 東京・神奈川・埼玉・千葉
大阪・兵庫・京都・愛知・福岡
東京・神奈川・埼玉・千葉
大阪・兵庫・京都・奈良・和歌山・滋賀
東京・神奈川・埼玉・千葉
茨城・大阪・兵庫・福岡
案件数 約28,000件 約3,300件 約4,200件
平均単価 68.2万円 72.2万円
最高月収 145万円 200万円 176万円
支払いサイト 15日(月末締め翌月15日支払い) 20日
手数料(中間マージン) 非公開 非公開
※実質20%
非公開
特徴高単価な案件が多い
福利厚生サービスが受けられる
・首都圏の案件が中心
給与保証制度で安定した収入を得られる
・税務処理のサポートあり
・マージン率は実質20%
週2/週3の案件が多い
在宅/リモート案件が多い
・スタートアップ企業やベンチャー企業の案件が多い
紹介企業例 ・株式会社Gunosy
・株式会社バンダイナムコホールディングス
・株式会社ユーザベース
・Sansan株式会社
・株式会社一休
・株式会社FiNC Technologies など
・クックパッド株式会社
・株式会社カオナビ
・株式会社Kaizen Platform など
説明記事
公式サイト


転職を考えているならこのエージェント!

運営会社 レバテック株式会社 株式会社Branding Engineer 株式会社リブセンス
対応エリア 東京・神奈川・埼玉・千葉
大阪・兵庫・京都・愛知・福岡
東京・神奈川・埼玉・千葉
大阪・兵庫・京都・奈良・和歌山・滋賀
東京・神奈川・埼玉・千葉
茨城・大阪・兵庫・福岡
案件数 約13,000件 約800件
※非公開求人が多い

※ドラフト制のため、対象外
年齢層 20代:◎
30代:〇
40代:〇
20代:〇
30代:〇
40代:△
20代:〇
30代:〇
40代:〇
特徴エンジニア・デザイナーを専門としている
・カウンセリングに時間をかける
年収アップ率60%の実績
IT/Web/ゲーム業界専門の転職エージェント
・業界経験者がキャリアコンサルタントを務める
・丁寧なカウンセリングで入社後の離職率1%以下を実現
ドラフト制による採用を叶える特殊なサービス
スキル・経験重視で評価してもらえる
・他エンジニアの入札結果を見ることで
自分の市場価値が分かる
紹介企業例 ・サイボウズ株式会社
・株式会社サイバーエージェント
・Chatwork株式会社 など
・DMM.com
・Money Forward
・SmartHR など
・メルカリ
・ZOZOテクノロジーズ
・freee など
説明記事
公式サイト



そもそも、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” の違いについてご説明してきましたがいかがでしたか?

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

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

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