BundlerとGemfileについて、全く意識しないまま、ここまで来てしまったが、気になってしまったのでここらで調べておく。
たいして理解できていなくても、何となくアプリができてしまう「フレームワーク」というものは、すごいものなのだと今更ながらに気づくw
Rubyのライブラリのことをgemを呼ぶが、この多くのgemたちはrubygems.orgというリモートリポジトリで管理されている。
RubyGemsは、gemたちのパッケージ管理システムで、関連するgemの依存関係を解決してくれる。
RubyGemsのガイドはココ。
例えば、deviseというログイン認証機能を実装するためのgemを検索してみる。
検索結果のdeviseをクリック
関連するgemのバージョンとの依存関係が定義されていることが分かる。
Bundlerとは?
ここで登場するのが、構成管理ツールである「Bundler」。
これだけたくさんのgemがあるので、依存関係を考えながら1つ1つインストールしていくのは現実的ではない。
様々なgemがどのバージョンと依存関係にあるのかを一元管理できるBundlerを使ってインストールすることで、必要なgemをバージョンも含めて管理することが可能になる。
開発の際は、複数人で行うことが多いので、Bundlerを利用することで、全員が同じgemを同じバージョンで使うことができる。
Bundlerは、下記のコマンドでインストールできる。(Bundlerもgemの1つ)
gem install bundler
自分のPCにも実はbundlerがインストールされているのだが、全く記憶にないww
おそらく、何かの工程の途中で、いつの間にかインストールしていたのであろう。(怖)
Bundlerを使うためには、いくつかコマンドを打つ必要がある。
bundle init
プロジェクトフォルダの下で、このコマンドを叩くと、Gemfileができる。
なんか、これはやったような気がする。
※Gemfileができている時点で、絶対やっているw(記憶喪失なだけ)
bundle install
Gemfileに記載されているgemをインストールする。
Gemfile.lockができる。この先、gemのバージョンが変わっても、bundlerがバージョンをロックしているため、勝手にバージョンアップすることはない。(bundlerすげぇ。)
bundle update
gemのバージョンを最新まで更新したい場合に実行するコマンド。
Gemfile.lockが更新される。
特定のgemだけをバージョンアップしたい場合は、
bundle update [gem名]
とすると、そのgemのバージョン+依存関係のある関連emのバージョンを更新してくれる。
どのgemがどのバージョンに更新されたのかは、確認しておく必要がありそうだ。
Gemfileとは?
bundle initコマンドによって、プロジェクトフォルダ直下に生成される、gemの依存関係を記載したファイル。
BundlerはGemfileに記載された内容に従って、gemをインストールする。
Gemdileは下記のように、gem ''gem名, 'バージョン'という書き方になっている。
バージョンを指定しないと、最新のgemがインストールされる。
Gemfileを更新すると、bundle updateコマンド実施の際に、Gemfileに記載してあるバージョンのgemをインストールできる。
なお、bundle update後に更新されるGemfile.lockをプロジェクトメンバーと共有しておくことで、同じバージョンのgemで統一することが可能。