Convention over Configuration

「設定よりも規約」と訳される設計原則。「妥当な既定値を規約として埋め込み、開発者は規約から外れたい場所だけを記述する」 という考え方。rails が原則として明文化し、その後の Web フレームワーク全般に広がった。

何を解決するための原則か

2000 年代前半、エンタープライズ Java(J2EE / Struts / Hibernate)では「設定の地獄」が常態化していた。

この状況の根底にあった前提は「フレームワークは何も仮定してはならない、すべて開発者が明示的に書くべき」というもの。柔軟性は最大化されるが、立ち上げコストと精神的負荷も最大化される。

CoC は 「99% のケースで成立する妥当な仮定を規約として固定し、その規約を開発者と共有する」 ことでこの前提を反転させた。

rails における具体例

Rails は CoC を体系的に適用した最初の主要フレームワーク。

規約設定なしで動く理由
クラス Post ⇄ テーブル posts名前から英単語の単数化/複数化で対応付ける
クラス Post ⇄ ファイル app/models/post.rbsnake_case 化したファイル名で自動 require
PostsController#show ⇄ app/views/posts/show.html.erbコントローラ名・アクション名でテンプレートパスを推論
主キー id、タイムスタンプ created_at / updated_atカラム名を予約
has_many :commentscomments テーブル + post_id 外部キーを推論
resources :postsREST 7 アクションのルートを自動展開

これらはすべて「規約に従えば設定不要、外したい場合だけ書く」構造になっている。例えば日本語複数形の不規則な単語が必要なら Inflector.inflections で個別追加する、という具合。

「規約に従う限りコードは消える」 — これが Rails の生産性の正体であり、CoC の実装的本質。

CoC が成立するための前提

CoC は無条件に良いわけではない。次の前提が崩れると逆効果になる。

CoC 後の波及

Rails 以後、CoC は Web フレームワーク設計の事実上の前提になった。

つまり CoC は 2004 年から 10 年で「フレームワークがそうあるべき」という業界の常識 に昇格した。Rails が達成した最大のメタな成果はここにある。

限界と批判

押さえどころ(カード化候補)

関連

Graph