僕はどうしてウェブコンポーネントに執心しているんだろう?

ブリコラージュできるソフトウェア、それがウェブコンポーネントなのでは

僕はウェブコンポーネントに執心している。

それは技術的に微妙だなとは思う。スタイリングをShadow DOMに閉じ込められると言うけど、そのせいでかえって管理が面倒になっている。複数のコンポーネントでスタイルを共有したい時、非本質的に手順が多い。複雑な(complex。複合的。複数の物を組み合わせた)コンポーネントを使う時には細部のスタイルを微調整したくなる物だけど(カルーセルのボタンの位置とか)、その為にはよく考えてカスタムプロパティを決める必要がある。最近ではHTMLウェブコンポーネントなんて考え方が出てきていて、それは初期の喧伝の間違いの証左みたいだ。コンポーネント間のやりとりも面倒くさい。親から子へは属性で渡すことになるが、文字列のみになってしまうし、子から親へはイベントを使うことになり、親の定義の中で addEventListener を呼ぶことになって面倒な上に汎用的に作るには手間がかかる。アクセシビリティを担保しながらフォームと連携させようと思うと悲惨なことになる。更に、JavaScript無しでは動かないから、プログレッシブエンハンスメントが殆どできない(再び、HTMLウェブコンポーネントが出て来た背景だ)。

それはコミュニティ的に微妙だなとは思う。Reactなどを使ってしまう。そういったフレームワークとは活きる場所が違う、同じコンポーネントという言葉を使うが指している物が微妙に違うのだという主張を見たことがある。それは正しい。でもそういう風に分けてしまうと、ウェブコンポーネントが活きる場所なんて物には殆どの開発者は遭遇しないことになる。それに、プロジェクトでウェブコンポーネントを「採用」することにしたのなら、作るコンポーネントに秩序を与える必要があり、それはウェブコンポーネントフレームワークを作ることになる。だったら、やはりReactなどのフレームワークと比べることになり、自作のフレームワークなんて大抵は敵わない。

会社内の事業横断の共通コンポーネントには使える、という話もある。それもその通りだと思う。そういう話を見た時は、ウェブコンポーネントに執心している僕は、ささやかな快さを覚える。でも、そんな状況に立ち会える開発者はやっぱり少ない。

それなのに、何か新しく(小さな、個人的な)プロジェクトを始める時に、ウェブコンポーネントをまずは使おうとしてしまう。僕はウェブコンポーネントに執心している。何故? 第一には(というのは重要さのことではなくて思い付く順番のこと)、それがウェブ標準で出来ていて、よく謳われるように、フレームワークを問わず、また使っていないような所でもどこでも使えるからだ(Reactもバージョン19でようやく対応した)。でも誰が? ウェブコンポーネントが出て来るのは遅過ぎた。現代でウェブページやサイト、アプリケーションを作る時にHTMLを書く人は、専門家としてのエンジニアしかいない。ノンエンジニアのためにはもっと抽象化された物が色々あって、そっちを使えばいい。そしてエンジニアは、上に書いたような理由から、フレームワークを使うだろう。

ここに僕の執心の報われなさ(という言い方をすると自己憐憫みたいで恥ずかしいけど)がある。意識では使う意味が無いと理解しているのに、心では使いたがっている。

僕は何故ウェブコンポーネントに執心しているんだろう? 第二に、ノンエンジニアがHTMLを書くことを諦め切れないからだ、と思う。ウェブへの(潰えてしまった)夢とも言えるかも知れない。誰もが自由に発信できるウェブ。特定の企業にロックインされないのは勿論、特定の技術スタックに縛られないで発信できるウェブ。ノーコードツールやフレームワークの作法をよく分からなくても、HTMLとCSSが分かれば、他所から拾って来た物の継ぎ接ぎで、最上とは言えずともまずまず用を為す物を作れる、そういうウェブへの夢を支える、ツールボックスに入るような物としての期待をウェブコンポーネントに持っていて、そしてウェブコンポーネントへしか持ち得ないからなんだと、これを書きながら思うに至った。

本当はこんなこと、HTMLみたいな人間が書く向けじゃない物ではなく、もっと上のレイヤーで存在していたらいいのだけど現状無いので、ウェブコンポーネントなのだ。