amp-script の実用性について考える

AMP Conf 全体の感想は後回しにして(書かないかも)、 amp-script について

単に使ってみたい人は AMP で任意の JS を実行できる amp-script を試してみた - Qiitahttps://github.com/mizchi-sandbox/amp-script-preact

最初に

僕の amp に対するスタンスは http://ampletter.org/?lang=ja に示された懸念とだいたい同じで、基本的にAMPは邪悪なもの、現代のウェブの事情を考慮する必要悪と悪の中間ぐらいだと思っており、それと同時に極端にリソースが制約されたプログラミング環境というものが好きで、そういう点で AMP 由来の技術を追っている、という立場。

amp-script について知っていること

全然ドキュメントないので、コード読んで、書いて、触って、あと中の人達に直接聞いたりして知った知識

サイズ制限のせいで、いわゆる JS フレームワーク は preact(7kb) か lit-html(3kb) ぐらいしか選択肢にならない。もしかしたら svelte とか使えるかもしれないが…

複数コンポーネントは色々できそうな気がしたが、状態を共有しようとすると indexeddb を介したポーリングになると思って実験しようとしたが、 dexie を引っ張ってきたらその時点で 150kb オーバーした。webpack の minimize を常に有効にして watch させるとCPU負荷がかなり高くファンが唸りまくって、出先でやってたらバッテリ使い果たした。

preact も動いたり動かなかったりで、この Issue を見てる限り対応しようとしてるが、待つしかなさそう https://github.com/ampproject/worker-dom/issues/319

amp-bind との比較

AMP の動的コンテンツといえば amp-bind がある。これで専用のハンドラや mustache テンプレートの展開、 amp-live-list と組み合わせた動的コンテンツと組み合わせて、それっぽいものが作れる。

https://amp.dev/documentation/components/amp-bind

個人的な意見だが、これはよくある「プログラミング抜きで〜できる!」と称して一つの DSL 体系を一式覚えさせられるやつである。個人的に全くモチベーション上がらない。基本的には amp-script で全部済ませられるはずだが、amp-login でつくったセッション情報とかを amp-script 側に引き回せるか、まだよく調べてない。できたら同等の表現力になるはずだが。

コールバックで AMP.setState({counter: 1}) みたいな JS みたいなコードを書けるように見えるが、これは正規表現で使える表現が決まっている。また 1 行あたりの発行可能な文字列制限もある。

AMP Bento

カンファレンス中で発表されたもので、まだどこにも情報が上がってないのだが、AMP CDN 下になくても amphtml project の機能を使える、というやつである。 amp 制約下で全部これから作れと言われるとウッとなるのだが、逆に普通のウェブサイトでも使うと便利なウィジェットなどが色々あるので、これは普通に歓迎したい。

AMP の方向性

元来単純なものはAMP、複雑なものはPWAという棲み分けを意図していたように思うが、今回のカンファレンスで示された方向性からは、AMPがPWAやSPAという領域もカバーしようとしている、という印象を受けた。

どうせ Google のことだし内部で明確な方向性定めず部署ごとに競い合ってる状況だと思うが、個人的には邪悪に寄りすぎない範囲でやれることが増えると、ステークホルダーを説得する方便としては便利な技術であると思うので、邪悪ではない限りで応援したい。邪悪だと思っているが。