Runner in the High

技術のことをかくこころみ

Opinionatedなライブラリとチーム開発

 GitHubなどで作者がライブラリ(やフレームワーク)をopinionatedであると形容しているのを見ることがある。Opinionatedというのは直訳すると「意固地な」「意志のかたい」のような雰囲気になるが、意固地なライブラリというのは正直意味が通らない。ではどういう意味なのかというと、そのライブラリが、作者によって強く方向付けられていることを意味する。言い換えれば、利用者がある種のルールを強制されるものだ。

 フロントエンドのはなしをするが、たとえばElmはとてもopinionatedな言語(このケースはライブラリではないが)であると言える。創造神エヴァンによって、言語自体にSPA開発用のフレームワークが内蔵されているし、JSによくあるような裏技やハックを使うことが言語仕様上できなくなっている。TEAというアーキテクチャによって、アプリケーションの構造やデータの流れが統一されている。これはまさに彼自身の思想そのものだ。

 他のものでいうと、Vue.jsも比較的フレームワークという観点では微妙にopinionatedだと言えるが、細かい部分ではそうではない。一方、Reactはビューのみに責務を絞っているという点でless opinionatedに見える。ReduxはJavaScriptなライブラリの中では最もopinionatedだろう。

ライブラリと思想

 ちゃんとした意図や背景があって作られたものには、公式のページかどこかに丹精込めて作者が思想を説明しているページがあるケースが多い。たとえばReduxのMotivationROM.rbのCore Conceptsはすごくいい例で、既存の解決策やアプリケーション・アーキテクチャのどこがイケてないのかを説明した上で、自分たちの思想を実装したライブラリがどう優れているのかを説明している。

 思想が弱いライブラリというのは、使っているうちに思わぬところで綻びが出るものが多い。とくに誰彼構わずいい顔しようとするタイプのものに顕著な印象がある。オールインワンだとか、初心者に優しいと謳うもの、easyやsimpleなどのフレーズを使うものが怪しい。パフォーマンスが優れていることをアピールして、肝心な思想を煙に巻くケースも多い(もちろん、パフォーマンスに優れていることがそのライブラリ自体の思想ならおかしくはないが)

 Less opinionatedなライブラリは利用者にルールを強いない代わりに、ルールを作りを委ねてくる。小規模な開発では問題にならないが、チームが大きくなる頃には必ずコンセンサスゲームをすることになる。ライブラリを使う我々側に、それなりの思想を持つことが期待される。しかもチーム開発ともなれば、チーム全体で思想が共有されている必要がある。運用に乗せるのも頑張らねばならない。これがまた、人が増えたときに骨が折れるのだが...