Ruby で gem 管理に使われる Bundler. その Bundler で依存関係を解決するために使われるファイルには,
- gemspec
- Gemfile
- Gemfile.lock
の 3 つがあります.これら 3 つのファイルの区別を意識することはあまりありませんが,それぞれ異なる役割を担っています.
3 つのファイルの役割
各ファイルの役割を簡単にまとめます.
gemspec
- gem の依存関係を記述します.
Gemfile
- 依存する gem の取得先を記述します.
- 通常は取得先は
source
行一行だけでよいはず. - GitHub リポジトリなどから edge バージョンを取得する場合は,その場所をここに書く.
- 通常は取得先は
Gemfile.lock
- 開発環境と運用環境とで同じ gem をインストールするために使います.
-
bundle
などで自動で生成されます. - 依存 gem のバージョンと取得先が記録されます.
-
Gemfile.lock の扱いについて
Gemfile.lock については,これをリポジトリに含めるかどうかが議論されるのですが,前節で述べたように,「開発環境と運用環境とで同じ gem をインストール」したいかどうかで決めればよいかと思います.すなわち,
- 確実動作が期待されるアプリでは Gemfile.lock をリポジトリに含める.
- デプロイの自由度を確保したいライブラリは Gemfile.lock をリポジトリに含めない.
- (そうでないものは,開発環境=運用環境としたい気持ちの強さでどちらかに倒す)
とするのがよいでしょう.
参考
-
http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
- この記事は↑を読んで考えたことをまとめたものです.
- 元記事と異なる主張があるかもしれません.