Rails の思想

Rails でアプリを作ってみて、Rails の考え方が少しわかってきたのでまとめる。

CoC(Convention over Configuration)

設定より規約

ユーザーからすれば同じように見えるプログラムでも、その実装方法は無数にある。Rails では、合理的で効率的なプログラムが作れるようあらかじめさまざまな強力な機能が用意されている。それに従うことで、設定ファイル等を書く必要がなくなり、プログラマがよりクリエイティブな作業に注力することができる。チームで開発するときにも、基本的な部分があらかじめ決められていることでスムーズな連携が図れる。

Rails の規約の例

  • データベース名はモデル名の複数形(スネークケース)にする
  • データベースのテーブルの外部キーは、テーブル名の単数形_idにする

Active Record の基礎 - Railsガイド

DRY(Don't Repeat Yourself)

同じことを繰り返さない

同じコードを2回書かない。コードを DRY にしておけば、変更があったときも1箇所だけの修正で済む。たとえば Rails のビューでは、レイアウトやパーシャル(部分テンプレート)を使うことで、複数ページに共通する部分を切り出て1箇所にまとめて書くことができる。

Rails の基本原則

以上が特によくいわれることだが、Rails 生みの親である DHH(David Heinemeier Hansson)氏が発表した Rails の基本原則はもっと多い。

  1. プログラマの幸福度を最適化
  2. 設定より規約を重視する(CoC)
  3. メニューは”おまかせ”で
  4. パラダイムが1つではない
  5. 美しいコードを称える
  6. 統合システムを尊重する
  7. 安定性より進歩を重視する
  8. テントを押し上げる

Railsの基本理念 : Railsの生みの親が掲げる8つの原則 | POSTD

(後に「切れるナイフを提供する」が追加された)

考えたこと

3つ目の項目は、原文で "The menu is omakase" となっている。Ruby が日本発だから日本語にしたのだろう。これは、レストランに行ったときにシェフに「おまかせで」と頼めばおいしい食事が出てくるように、自分で最善の方法がわからない場合でも Rails に任せておけば最善の方法が自動的に選択されるということだ。

そうやって「レールに乗る」ことで面倒な設定作業を省くことができ、より重要な作業に集中することができる。他のフレームワークを使ったことがないのであまりメリットを実感できていなかったが、通常フレームワークを使用するときには多くの設定ファイルが必要だということを知った。

項目の中で特に面白いと思ったのが、「プログラマの幸福度を最適化」と「テントを押し上げる」の2つ。フレームワークの基本原則としては異質なものだと感じた。Ruby がプログラミングを楽しむことを最重要視して開発されたのと同様、Railsプログラマの幸せを重要視している。

「テントを押し上げる」は少しわかりにくいが、意見の違いを認め多様性を受け入れ、コミュニティ参加の敷居を低くしてささやかな貢献に対して感謝を伝えることだと書いてある。この原則に基づいているわけではないと思うが、 Ruby コミュニティは本当に初心者にも優しくて参加しやすいので、そういう感じのことかなと理解した。こういうことがフレームワークの原則として書かれていることがすごいと思った。

他にも、REST やオブジェクト指向など、Rails をやる上で大事な考え方がある。手を動かしながら、そういった「考え方」の部分についても理解を深めていきたい。