Gemfile の書き方を見直した

Gemfile を記述するときの自分のルールを見直したので言語化しておく。

ルール

  1. 決まった順序で定義しなければいけない Gem は上部に書く
  2. 順序に依存しない Gem は名前の辞書順に書く
  3. コメントも含めて 1 つの Gem あたりに 1行使う
  4. group が必要なものは group メソッドを使って下部に書く
  5. 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 が存在するケースが出てくる。