耳馴染み

昨今, Simple/Easyというマーケティング用語がよく使われる.
今回は他の具体的な言語やフレームワークについて言及するつもりはない.
あくまでVue.jsとの向き合い方についての物語だ.

Vue.js is Easy

このフレーズを聞いたことがあるだろうか?
私は何度も聞いた.
そして, それと同じくらい「Vue.jsにはルールがないからダメだ」という言葉もたくさん聞いてきた.

誤謬

私がVue.js / Webを触り始めたのはおおよそ2020のQ4頃で, それ以前の世界がどうであったかは知らない.
そして, どのタイミングからこのフレーズが流行り始めたのかも知らない.
しかし, 「今」の自分の感覚として, この言葉を使うのが適切なのかどうかについてはいつも疑問を感じている.

Vue.js is Easy」は私が思うに, 今も限られたコンテキストであれば正しいだろう.
しかしそのコンテキストを理解している人たちはいったいどれくらいいるだろうか.

昨今は「ルールを持つ存在(Webフレームワークに限らず)」の流行もあり, 彼らは彼らで「〇〇 は △△ である(Easyではないけれど)」というマーケティングをよくやる.

そしてそれに飛来して,

Vue.jsにはルールがないからダメだ
目先の簡単さを求めて堅さを捨てている
ルールがないことは, コードをメチャクチャにする

などの言説が生まれる.

抽象的なマーケティングは抽象的なマーケティングで打ちのめされるのだ.

トレードオフ

先ほども言ったように, 確かに「Vue.js is Easy」というのは一部のコンテキストで正しい.
Vue.jsには明確なルールがないので, 何かルールを学んだりしなくても フレームワークの立場としては間違いではない という意味では正しい.

しかし実際にプロダクトを作るには, いろんなことを考える必要がある.
そしてここには トレードオフ がある.

おそらく多くの人たちはこのトレードオフを考えずに, 「ルールはあった方が良い」という意志を先行させ, プログラミングと向き合っている.
もちろん, 「ルールがあった方がいい」ということにすらトレードオフは存在するが, 今日話したいのはここではない.
ある状況下で, 「ルールがあった方が良い」という結論になったことを想像しよう.

ここで考えるべきなのは,

  • なんのためのルールなのか (そのルールがあると何が嬉しいのか)

  • 今(未来)のチーム(自分)にとって適切なものか (括弧書きにしているのは, コンテキストによって変わるからだ.)

  • そのルールがどのようなトレードオフを生むのか

と言ったことだ.

Webアプリケーションはあまりにも多種多様だ.
バックエンドから得たデータにUIを実装し, 単純に表示するだけのものもあれば,
複雑なDOMオペレーションと組み合わせてリッチなUIを提供するものもある.

そしてこれらに必要なルールは全く異なっている.
設計とはかなりアドホックなもので, 銀の弾丸はない のだ.

責任者

ここで重要なのは「誰がそのルールの責任を持つのか」ということだ.
私はWebアプリケーションの場合, 必ずしもフレームワークがルールを持つことが良いとは思わない.
もちろん, 場合によってはフレームワークがルールを持つことが良いユースケースもあるだろう.

しかし「フレームワーク」という我々の基礎となる部分がこの責任を負うというのはやはりトレードオフを含むものだ.
フレームワークがここの責任を持った場合, ほとんどの場合ではそれに準拠することが望まれる.
例えそれが我々のプロダクトにとって重要じゃないことであってもだ.

そして同時に, それによって失われた他のトレードオフについても考えてはおくべきだ (学習コストなど).
加えて「誰がそのルールの責任を持つのか」というのと, 「ルールが必要であるかどうか」というのは全く別の話であることに注意したい.

言葉による抽象化

ここまでの話で私が話したい本質的なことは済んだ.
しかし, どうしても言い切り方の言葉遊びがしたくなるのが私達だ.

Vue.js is Easy」に対してネガティブな誤謬が含まれやすく, 適切でないならばなんと言えばいいだろうか.
私はVue.jsの公式ドキュメントに登場する「Approachable」という言葉が大好きだ.

https://vuejs.org/

先程も言った通り, 「Vue.js is Easy」は「フレームワークとしての責任」の範囲であれば正しいが,「Webアプリケーションの実装 (・保守運用)」の話に拡大されると間違った判断をする可能性を含んでいる.

何かしらの課題 (需要) があるなら規約や設計を考えるというのは当たり前のことだ.
Easyという言葉は,ここをあたかも考えなくても良いものが作れるものだ,という誤謬を与えかねない.

Vue.jsはApproachableなのだ.
何かを考える時,邪魔にならない.

しかし,それと引き換えに実装者は少しの責任を負う.
これはトレードオフなのだ.


これは私の単なるエッセイであり,Vue.js Teamの公式見解ではありません.