console.blog(self);

技術、読んだ本、いろいろ。

Web Componentsについて、いま思うこと

第49回 HTML5とか勉強会

第49回 HTML5とか勉強会に行ってきた。テーマは「HTML5最新情報 @Google I/O」だけど、Web Components祭りだったと思う。スタッフなので受付の案内したり、ピザやビールを並べたり、ピザやビールを食べたり飲んだりした。

動画が上がってる。はやい!

セッションはこんな感じ。

  • Web Componentsが変えるWeb開発の未来 泉水翔吾 @1000ch

Web Componentsは4つの仕様から成り立っている。それぞれの現在のW3Cの仕様はこんな感じ。

さくっと概要を掴むのなら、えーじさんのエントリがいいと思う。すてきなエントリ。

こちらのエントリも好き。

この先は、勉強会の内容とは関係なく、さいきんつらつらと考えたりすること。

Web Componentsを使うか?

Web Componentsは革新的だと思う。ただ、爆発的に普及したり、自分がWeb Componentsを使うようになるのかわからない。

爆発的な普及というのは、jQueryと同じくらい使われるようになるのか?といった感じ。

Web Componentsを使うようになるのかというのは、一部分で使うというより、もうWeb Componentsに依存しているような状態になるのか?といった感じ。

Web Componentsなんて流行らないよ、と言いたいのではなくて、自分ががっつり使うようになるのかなー、どうなんだろう?わからないな。と思っている。期待と不安が同居する。

Web Componentsの作りやすさ

すべてブラウザでWeb Componentsに関連する技術が実装されていて、たくさんのコンポーネントが提供されている状態を想像する。そこに自分の使いたいものがあるだろうか。

ソーシャルボタンなんかは、コンポーネント化されているとうれしい。便利だ。カレンダーはどうだろう。日付を選択するだけのカレンダーを簡単に使えるとうれしい。じゃあ日付ごとに○とか△や☓が入っていて、それぞれに凡例があって、それぞれにリンク先が違うような、特定の用途に特化したカレンダーはコンポーネントとして提供されるだろうか。たぶんされない。じゃあ自分でtemplateを書いてCustom Elementsを使えばいい。

いまはそれをRailsのPartialとかで実現している。AngularJSはすでに使える、作れる。jQuery Mobileにもすてきなコンポーネントたくさんあった。でも僕は使っていない。

ほんとうに汎用的なパーツはコンポーネントとして提供されるとうれしい。jQuery UIや、jQueryプラグインを利用する感覚で、あるいはもっと簡単に使えるといい。業務に特化したようなものなら、簡単に作れるといい。

いま、Web Componentsで注目されているのは、簡単に使える、というところにフォーカスした解説が多いと思う。でも普及していくためには、簡単に作れるほうが大切だと思う。みんなが使うよりも、みんなが作れる、といった世界。コンポーネントを簡単に作る方法が増えていくといいな。

技術とエコシステム

コンポーネント化や再利用って、もう何度も聞いてきたよね。Web Componentsはどうなんだろう?

Javaと、Rubyと、JavaScriptについて考えてみる。いろいろあるけど、どれも広く使われている技術だと思う。JavaAppletだけでは、tDiaryだけでは、Prototype.jsだけでは、ここまで広く使われることはなかったと思う。JavaにはStrutsが、RubyにはRailsが、JavaScriptにはjQueryがあった。

それぞれの技術の本質や根幹が、フレームワークやプロダクトによって変わるかというと、そんなことはないと思う。ただそれぞれを取り巻く環境はフレームワークやプロダクトによって大きく変わり、エコシステムができることにより、広く使われるようになっていった。

素晴らしい技術が、技術が素晴らしいからといって流行るとは限らない。だからWeb Componentsにもすてきな潮流ができるといいな。

宣言と命令

Web Componentsがどういった未来をたどるのかはわからないけど、Webに関連する技術は、宣言的(declarative)な記述から、命令的(imperative)な記述になると思う。こっちのほうが変化の本質じゃないかと思っている。宣言的から命令的に。この言葉を知り、意識したのは、Mike Smithさんのお話を聴いたのがきっかけ。去年のW3C Meetupでは資料の翻訳(主に妹が)をしたりした。

JavaScriptなどから操作するのは命令的と言える、HTMLに定義するのは宣言的と言える、と思う。もっと単純化すれば、命令的って、コードで操作するようなことだと思う。

Web Componentsと宣言的な記述から、「求めるな、命じよ(Tell, Don't Ask.)」というオブジェクト指向の原則を思い出す。「求めるな、命じよ」はクエリ(参照)とコマンド(処理)を分けましょうという原則。コンポーネント化し、DOMとロジックを分ける。って感じを想像した。

宣言的プログラミング、命令的プログラミング、オブジェクト指向プログラミングについては、Wikipediaに載っている。

こういった流れとともにWeb Componentsがある気がする。Web Componentsのさらに先には、よりオブジェクティブで、メタプログラミングやCoC(設定より規約 / Convention Over Configuration)を駆使したものがあるかもしれない。

タグは書かず適切なクラス名やdata-attributeがあれば、いい感じに変数が展開され、タグとコンポーネントが展開されるとか。いい感じのファイル名だと、routingがいい感じになるとか。いまでもAngularJSを使えばある程度できている。

そう考えれば、ネイティブアプリは命令的と言えるかもしれない。いまは実装コストが高いから、HTMLやJavaScriptCSSを使うことも多い。実装コストが下がれば、よりネイティブアプリに近づく気がする。

ひとまわりすれば、より高度で洗練されWeb標準に準拠したFlashのようなものができあがるかもしれない。

まとめ

HTMLにはWeb Componentsがあり、CSSにはCSS Variables、SCSS、OOCSSがある。またインフラではInfrastructure as Codeという流れがある。それぞれ異なるけど、全体的には命令的になってきてると思う。

興味をもったら、Web Componentsに関するSpecを読んでみるのもいいし、Polymer触ってみるのもいいし、Material Designのドキュメントや動画を眺めるのもいいと思う。

Must read!って言われたから、去年くらいにこれを読んだ。もう内容忘れちゃったけど。ちょっと古いバージョンへのリンク。最新版は中身がほとんどなくなってWikiを読めって書いてるけど、Wikiがあんまりまとまってない…。

特に理由はないけど、個人的には総体としてのWeb Componentsより、Shadow DOMに興味ある。

正直さ、最新の技術や仕様って、ほんとうに好きだったり興味がなかったら、とても追っていけない。なので気に入ったものがあれば、流行るとかどうかとか気にせず追ってみればいいと思う。

それが流行ろうと廃れようと、特定の技術にコミットすることは、いいことだと思う。変化に対応しようとすれば、無駄にはならないはず。

Webは変化していくし、たくさんの技術が生まれてくる。取捨選択をしながら、変化を楽しんでいけるといいな。未来を妄想するのはなかなか楽しい。