DHH流ルーティングについて(Rails)

【結論】

・DHH(David Heinemeier Hansson)は、Ruby on Railsの生みの親

・DHH流ルーティングとは、DHHが推奨しているRailsのルーティング手法

・具体的には、コントローラはデフォルトのCRUDアクション(index、show、new、edit、create、update、destroy)のみを使うという内容

【目次】

【本題】

DHHについて

DHHとは、Ruby on Railsの生みの親であるDavid Heinemeier Hansson(デイヴィッド・ハイネマイヤー・ハンソン)の略称です。

DHHは、2004年にRuby on Railsオープンソースとして公開しています。

DHH流ルーティングとは

DHH流ルーティングとは、DHHが推奨しているRailsのルーティング手法です。

考え方としては、RESTの原則に従って、新しいコントローラーを作るタイミングを決めるというものです。

もう少し掘り下げると、コントローラはデフォルトのCRUDアクション(index、show、new、edit、create、update、destroy)のみを使って、それ以外のアクションが必要になった場合は、別のコントローラーに分けるという内容です。

例えば、PostsControllerというユーザーから投稿された記事を扱うコントローラーがあったとします。

そこに、全ての記事を一覧表示するindexアクションと、お気に入りにした記事のみ一覧表示するfavoritesアクションが定義されています。

class PostsController < ApplicationController
  def index
  end
 
  def favorites
  end
end

DHH流ルーティングの場合、これら2つのアクションは、以下のように別のコントローラーに分けます。

class PostsController < ApplicationController
  def index
  end
end

class Posts::FavoritesController < ApplicationController
  def index
  end
end

メリット

コントローラーの肥大化を防げる

もし際限なくアクションを追加していった場合、コントーラーの行数が増えていき、可読性が落ちてしまいます。

コントローラーを分けることで、この問題を回避することができます。

コントローラーの責務が明確になる

コントローラーに、特定のリソースに対する操作を全て記述した場合、もしコードの改修が必要になった際、その中から目的のアクションを探すのに時間が掛かってしまいます。

全てのコントローラーがデフォルトのCRUDアクションしか使用していないと分かっていれば、どのコントローラーが「どのリソース」の「どういった操作」を担当しているのか明確になります。

これにより、コントローラーの中から、目的のアクションを探し回る手間が省けます。

一貫性のあるルーティングが実現できる

チームで開発を行っている場合、コントローラーを分けるタイミングが開発者ごとに異なっていると、ルーティングに一貫性がなく、可読性が落ちてしまいます。

デフォルトのCRUDアクションしか使わないというのは非常にシンプルなルールなので、誰もが遵守しやすく、ルーティングの一貫性を保つことが出来ます。

参考情報

DHH流のルーティングで得られるメリットと、取り入れる上でのポイント - KitchHike Tech Blog

DHHはどのようにRailsのコントローラを書くのか | POSTD

DHH流ルーティングの導入しようとした際にハマったこと - Qiita