subtitle

RaiseTechの各種コースをはじめとしたイロイロな学習の記録

BundlerとGemfileとRubyGems

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で統一することが可能。