レポート

日本初開催JSConf!「JSConf JP 2019」参加レポート[後編:2日目]

この記事を読むのに必要な時間:およそ 6 分

2019年11月30日,12月1日の2日にわたり開催された,JSConf JP 2019。その模様をピックアップしてレポートします。後編の今回は2日目のレポートです。

「Webの自重」

はじめに,JxckさんのセッションWebの自重(じじゅう)を取り上げます。

画像

Jxckさんはまずこのセッションの背景から話を始めました。最初に,半年前に会長(古川さん)から,ブラウザの多様性が減っていることについて問題提起をしてほしいとの無茶ぶりがあったこと。これは重いテーマで30分ではとても話せないと考えて,ぎゅっと縮めたら「自重」の話になったと語ります。

Webとは何か?

はじめに,⁠Webとは何か?」という問いは避けて通れないと話しました。ティム・バーナーズ=リーが最初にハイパーメディアシステムを作ったころから考えると,いま我々が作ったり使ったりしているWebはその技術の延長だけで全部は説明できなくなっているとの認識を示します。

「Webはこうである」という仕様はRFCにもWHATWGにもないと言及し,仕様策定の場ではWebが何をするものか,何をしてはいけないかではなく,その提案が「今のWebのモデル上で正しく設計できるか」にフォーカスして議論されていると説明しました。そして互換性を壊さないか,新しく追加したときにセキュリティイシューにならないかに焦点があてられるそうです。また,仕様を考えるコアの人たちは,誰もユースケース自体を否定しようとはしません。

そのため,⁠我々は仕様ではなくユースケース自体をWebであると言っていると考えても,あながち間違いではない」と言います。

ブラウザが減ってしまう不安の正体

続けて,ブラウザが減ってしまうことへの不安について,Jxckさんは次のように見解を示しました。

「ユースケースは,みんな欲張りなので時代とともに増えていきます。Webのモデル上で実現できるのであれば,ユースケースが増えれば仕様も増えるのがHTML5以降のWebの流れです。そうしてユースケースがどんどん増えていき,我々はブラウザに実装しろと言います。実装しないとモダンブラウザと認められなくなるため,ブラウザベンダーは頑張ってキャッチアップしなければならないし,互換性も壊してはいけません。すごい無茶なことをやり続けていて,ブラウザは肥大化するしかありません。

もはや,ブラウザをゼロから作れません。メジャーブラウザーが4つあったとして,どれかが体力尽きて消えて,失われていく以外にはありません。EdgeがChromiumがベースになったことから分かったことは,問題なのはUIを持つブラウザの多様性ではなく,その下にあるブラウザエンジンの多様性がなくなることだったということです。

多様性が減っても作れば良いのですが,それが新しく作れないことのほうが問題だと思います。つまり,新規参入ができない,今あるものをなんとかかんとかメンテナンスして走り続けなくければなりません。体力がなくなった人から減っていくだけだとしたら,それはWebが自重で潰れてしまう,ということを意味するのではないかと思います。

だから漠然とした不安の正体はこちらだったのです」⁠Jxckさん)

Webを小さくするための方法

ではWebを小さくするためにどうすれば良いかについて,2つの方法を提示しました。

  1. 「ユースケースを減らし,仕様を減らす」こと。しかし,これは今のWebの流れからはできないと言います。
  2. 「仕様を低レイヤーに下げることで,ブラウザエンジンの責務を減らす」こと。この考え方が,もう動き出しています。

例えばborderのスタイルをいろいろ規定するのではなく,替わりにCanvasを用意して好きなように引くことにすれば,borderのスタイルの仕様策定は終わったと考えることができます。このようにユーズケースを分解して低レイヤー化することでワークするかもしれません。これがExtensible Webと言っていたものの本質的な部分ではないかと語ります。

仕様のレイヤーを下げることは,ユーザーランドで自分で実装するように,相対的にアプリに責務を移すことになります。これで,Webの仕様つまりブラウザエンジンが持つべき部分はある程度小さく保てる可能性があります。ただ,単に減らしてあとは自分でやってくださいだと困る場面があます。パフォーマンスやセキュリティの考え方も変わってきます。そういうプリミティブもAPIとして外に出してあげるブリッジを用意すれば,アプリ側が責務を担えると説明しました。

レイヤーをどこまで下げるか?

さらにJxckさんは,今はどこまで下げるのが良いのかをハイレイヤーからちょっとずつ下げながら探っている時期だと,続けました。

そもそも開発者は今のスタックに満足しているのかを考えてみようと言います。例として,ドキュメントから派生したユースケースの対極にあるものとしてゲームを取り上げ,ゲームをやるためには今のスタックは全然足りていないことを最近議論していると紹介しました。

また,ゲームに付随して,もっと下のレベルのデバイスのアクセスも対象になっています。およそWebでやると思っていなかったところまで下がってきていて,今本当に必要なのは,任意のデータ/バイナリーを任意のトランスポートで好きなように転送して,それがCanvasに展開できて,そしてこれらを好きな言語からコンパイルしたWASMを使って制御し,必要に応じでデバイスにアクセスすることです。そうすることで,コントローラーをつないでゲームができるようになります。

デバイスにアクセスするとなると,既存のモデルの上でユーザーが安全にアクセスできるようにするためにFeature Policyによる制御だったり,ユーザによるパーミッションなどが必要になることを指摘しました。

Jxckさんは,次のようにここまでの話をまとめました。

「最初はハイパーメディアとして始まったシステムが,Ajaxが発見された以降から,みんながアプリケーションを作るようになりました。その上でさらにゲームがしたいしデバイスにもアクセスしたい,みたいになっています。それぞれが全部互換性を保った状態で先に進んで行き,包含関係になっているのが今のWebの全体像なのではないかという気がしています。

もしWebがOSのレイヤーまで下がっていくとしたら,真ん中のところは使っても使わなくても良いです。DOMが使いにくければ,Canvasの上に自分でUI Toolkitを作って描画すればよいでしょう。

またJavaScriptが気に入らない場合は,好きな言語でコンパイルしてWASMを使うことができます。そうすれば,アプリケーション側に責務を委譲できます。その責務の一端をSDKやUI Toolkitで担保し,そのうえで自分がやりたいユースケースを実現できるかもしれません」⁠Jxckさん)

画像

Webの多様性問題の本質

そして多様性の問題の本質について,Jxckさんは次のようにまとめました。

  • Webが肥大化していて,⁠ブラウザエンジンを)新しくゼロから作ることができなくなってしまった
  • 今のようにユースケースを提案して仕様に落とすというやり方では,肥大化は続くので無視できない問題
  • (ブラウザエンジンの)レイヤーを下げることで,責務をアプリに移せば緩和する,ということを今のWebはやっている
  • それによってWebはWebではなくなるのかというと,そんなことはない。今までのWebの使い方もできる,互換を保っているのも重要なところ
  • 低レイヤーの上で(アプリが)自分でやるというのが,この肥大化を止めるカギになる

最後に,この真ん中のSDKはだれが作るのか,あったらどうなるのかについて,Jxckさんの想像する可能性を語りました。

「例えばFlutterはUnityみたいなことをやろうとしているらしいです。

自分でUI Kitを作って,全部のプラットフォームに展開するので,どこでも同じようにみえる。それが最近Webでも使えるようになりました。もしそういったSDKが本当にワークするなら,WebTransport,Canvas,WASMがあって,OSのデバイスマネージメントの橋渡しだけをするブラウザだったら,今から作れるのではないか,という気がしませんか?

OSがあってSDKがあってどんなユースケースも展開できるのなら,既存のスタックで作られたWebをここで展開することもできる。ならばブラウザをWASMにしてこの上で動かす,なんてこともできるのではないか? そういう世界もあるのではないかと考えると,Webを小さくするヒントはそこにありそうです。そんなことを考えると楽しいですよね」⁠Jxckさん)

そう言ってJxckさんは発表を締めくくりました。

著者プロフィール

がねこまさし

WebRTC Meetup Tokyo スタッフ。
インフォコム株式会社で研究チームのマネージャーをしている。

GitHub:https://github.com/mganeko
Qiita:https://qiita.com/massie_g