任意のJavaScriptをAMPで動かせる!amp-scriptが一般公開される

[レベル: 上級]

試験的に公開されていた <amp-script>一般公開されました

AMP では原則的に、AMP で定義された以外の JavaScript を動かすことが許されていません。
しかし、<amp-script> を利用すれば任意の JavaScript を AMP ドキュメントで実行することが可能になります。

好きな JavaScript を AMP で実行

<amp-script> を使うと、自分で書いた JavaScript はもちろんのこと、React や Angular、Vue.js といった JavaScript フレームワークを構成することも可能です。

ユーザーのアクションに応じてインタラクティブなコンテンツや機能を <amp-script> は提供できます。


Chrome Tech Talk Night #14Paul Bakaus 氏が紹介してくれた Washington Post のコンテンツ

WorkerDOM という技術を採用し、いわゆるサンドボックス内で動くので、任意の JavaScript を使ったとしてもパフォーマンスやセキュリティを <amp-script> が阻害する心配はありません。

amp-script の制限

任意の JavaScript を使えると言っても、通常のウェブページとまったく同じようにというわけでもありません。
いくつかの規則と制限があります。

  • 外部 JavaScript は https で読み込む: src 属性で指定する URL
  • ファイルのサイズは 150KB 以内: 圧縮前のサイズ、150KB を超えた部分は実行されない(150KB の部分までは実行される)
  • Zero Mutation: ユーザーの操作なしに DOM の変更不可(たとえば、ページをロードした瞬間に JS を実行することはできない)
  • Mutation は 5 秒以内: ユーザーのアクションから JS の実行完了までを 5 秒以内に収める

<amp-bind><amp-list> など、動的な機能を提供する AMP コンポーネントをすでに利用できます。
こうしたコンポーネントで、望む機能を実装できるのなら <amp-script> をあえて使う必要はありません。
既存のコンポーネントで実装できない場面で <amp-script> を使うといいでしょう。

もっとも、Gmail のようなサービスを <amp-script> で構築するのは不可能です(少なくとも現時点では)。

JavaScript を動かせないからという理由で AMP を敬遠していた人もいることでしょう。
制限があるとはいえ、そうした懸念を <amp-script> は解消できるかもしれません。

<amp-script>技術ドキュメントは amp.dev のサイトで参照できます。