9 YAGNI

YAGNIは、「You Ain't Gonna Need It.(どうせ要らないって)」の略です。
アジャイル開発の「スローガン」のようなもので、
いい加減な推測を基に開発をすることを戒めています。
「いずれ必要になる機能だから、今のうちから実装しておこう」
というような考え方で開発をするな、ということです。
そうした考え方は非常に危険です。
それよりも、いま、本当に必要なものだけを作る、というアプローチをとるべきでしょう。

おおお。

これ自分が心掛けていることで、
例えばあるプロパティに対するゲッターだけ定義してあるとして、
セッターも実装しなきゃいけないけど今のところいらないとしたら、
自分はセッターの実装を見送ります。
必要なAPIだけ実装します。

実際にはゲッターがあるのにセッターがいらないということはないはずなので
例として不適切かもしれませんが、だいたいの意味は掴んでもらえるかもしれません。

最悪の場合、この傾向により新しいフレームワークが生まれてしまうことがあります。
フレームワーク自体は特に悪いものではないのですが、
「推測に頼る開発」という病気にかかった時、
その症状として「フレームワークの作成」が現れることが多いのです。

フレームワークもだいたいの場合は便利なので、
ちゃっちゃと完成度の高いものを作りたい場合は便利です。
しかしスピードを求める場合には使いません。
あと、本当にいいフレームワーク(たとえばMoose)だったらいいのですが、
適当なフレームワークを沢山でっち上げられても
いちいち習得に時間がかかって大変です。


自分も今vice.vimという
ある種のフレームワーク的なものを作っているのですが、
これは「『推測に頼る開発』という病気にかかった」わけじゃなく、
ちゃんと目的があって作られました。
それはvimスクリプトOOPをする際の

  • DSL
  • オブジェクトシステム

を提供するためのものです。

ただ、eskk.vimというVimでのSKK実装、
つまりIMで使う予定なので、速度も重視しています。
IMはキーボードからの入力ごとに処理をするからです。
キーボードの入力に追いつけるようでないといけません。

これはShougoさんの作るneocomplcacheでもそうで、
これは自動補完プラグインなのですが、
速度を向上させるためにありとあらゆる努力をしています。


vice.vimはそれなりにいいインターフェースだと思います。
このおかげでvimスクリプトを書くのがさらに楽しくなりました。
(あといまさらオブジェクト指向の強力さに気付きました)
オレオレ言語を作る感覚と似ている気がします。作ったことないですが。

もちろんその勢いで余計な機能を実装してしまうと
YAGNI(どうせ要らない)なのでダメですが、
実際これだけでも書いた価値はあるというものです。