Gemfile の書き方を見直した
Gemfile を記述するときの自分のルールを見直したので言語化しておく。
ルール
- 決まった順序で定義しなければいけない Gem は上部に書く
- 順序に依存しない Gem は名前の辞書順に書く
- コメントも含めて 1 つの Gem あたりに 1行使う
- group が必要なものは group メソッドを使って下部に書く
- group も辞書順に書く
サンプルコード
実際のアプリケーションでは、もう少し込みいったコードになるはず。
source "https://rubygems.org"
# Fixed order
gem "rails", "5.1.4"
# Alphabetical order
gem "aaa"
gem "bbb", "1.2.3" # https://github.com/bbb/bbb/issues/123
gem "ccc"
group :xxx do
gem "ddd"
gem "eee"
gem "fff"
end
group :xxx, :yyy do
gem "ggg"
gem "hhh"
gem "iii"
end
group :yyy do
gem "jjj"
gem "kkk"
gem "lll"
end
背景
以下のようなことを念頭に置いたルールになっている。
- 誰が書いても同じようなコードになる
- 編集するときにどう書けば良いか迷わない
順序に関する注釈
Bundler は Gemfile に書かれている順に require していくので、例えば if defined?(Rails) のようなコードが require したときに実行される Gem が存在する場合、それより前に Rails を読み込んでおく必要が出てくる。そのため、上例のように辞書順のルールを超えて先に読み込むべき Gem が存在するケースが出てくる。