tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

ルールには2種類ある

ルールには2種類ある。そんなことを思った。

ひとつは法律やスポーツのルールみたいなやつ。もうひとつが、Ruby on Rails の CoC のConvention みたいなやつ。以降の記述がしやすいように、前者をAタイプ、後者をBタイプと呼ぶとしよう。

Aタイプは、ルールを守ることにインセンティブが働かないから、人はルールに触れないギリギリのところで勝負することになる。サッカーの FW はオフサイドラインギリギリで飛び出そうとするし、F1 のマシンは許される限界までパーツの幅を広げてダウンフォースを取ろうとする。

Bタイプの例は日常では多分あんまりないかなぁ。Rails のそれとか、「ソースプログラムを PerlCritic や lint みたいのにかけましょう」的な規約なんかが当てはまる。ルールを守ることにインセンティブが働くから、積極的にルールを守るし、そのためのアイデアなんかが出されたりする。hudoson 使って、コミット時にユニットテスト実行しようぜ、みたいな。*1

Aタイプのルールは自発的に守られることを期待できない。*2だから、守ってもらうためには、罰則か特典を用意するしかない。法律だったらたいていは罰則があるし、逆に何かを推進したい場合は補助金が用意されたりする。スポーツの場合もルールに違反したら何らかのペナルティーがある。

いや、結論とかはないんだけどね。今の職場で、Aタイプのめんどくさいルールが制定されて、でも報酬も罰則もないから、そんなのうまく守れねーだろ、ってそれだけの話をちょっと理論武装してみた。

*1:でも、Bタイプは規約がクソだと Aタイプになってしまうので注意が必要だ。「PBP に従いましょう」とか「単体テストで、自動テストを使いましょう」なんかはたいていの場合うまく運用できるけど、たとえば変数名に「UKTKKNSHINF」が使われるコーディング規約なんかは多分うまく守れない。

*2:オフサイドラインのギリギリで待つのは卑怯だからやめましょう。そんなことしなくても貴方なら点を取れるのだから」とかインザーギに言ったって、理解してもらえるわけがない。