1年少し前になりますが、Accelerated Mobile Pages (AMP) に 「AMP stories」 と呼ばれる、タップ操作によって、まるでカードをめくるように閲覧可能なコンテンツを実装するための拡張コンポーネントが追加されたのをうけて、早速作ってみたよという記事を書きました。
先日から AMP Conf 2019 が東京で開催されていることもあってか、この記事に対して結構なアクセスが来ていて、それ自体はありがたいことなのですが、上記の記事を書いたのは 「AMP stories」 が発表された直後で、まだ 「v0.1」 の頃だったんですね。
その後、少し仕様に変更が加えられて、現状の 「AMP stories」 は 「v1.0」 になっています。実際にサンプルとして作った 「AMP stories」 のページ (上記リンク参照) 自体は 「v1.0」 で書き直しているんですが、解説記事の方は古いままでしたので、折角の機会ということで、「v1.0」 における修正点についての補足記事を書いてみたいと思います。
AMP stories v0.1 から v1.0 における変更点
以前書いた記事から変更しないといけない点だけ簡単にまとめます。詳しい説明は公式ドキュメントを見ていただくのが早いと思います。
AMP stories コンポーネント用の JavaScript の読み込み
まず、head 要素内で、AMP stories 用の JavaScript を読み込みますが、当然、バージョンアップによってこれが変更になっています。
<script async src="https://cdn.ampproject.org/v0/amp-story-1.0.js" custom-element="amp-story"></script>
AMP stories の基本的なマークアップ
AMP stories のマークアップに関する、ごく基本的なルールは下記のような感じになります。ここについては大きくは変わっていませんが、amp-story
要素に対する属性で、必須のものがいくつか追加されています。
<!-- amp-story 要素で全体をマークアップする(Story) -->
<amp-story standalone
title="サンプルストーリー"
publisher="制作者の名前など"
publisher-logo-src="https://example.com/logo/1x1.png"
poster-portrait-src="https://example.com/poster/3x4.jpg"
poster-square-src="https://example.com/poster/1x1.jpg"
poster-landscape-src="https://example.com/poster/4x3.jpg">
<!-- 各ページは amp-story-page 要素でマークアップ(Page) -->
<amp-story-page id="cover">
<!-- ページ内のコンテンツは amp-story-grid-layer に内包される(Layer) -->
<amp-story-grid-layer template="fill">
<!-- template="fill" 内の最初の要素はページ全体を覆うように表示される(背景みたいな感じ) -->
<amp-img src="assets/cover.png" width="1080" height="1920" layout="responsive"></amp-img>
</amp-story-grid-layer>
<amp-story-grid-layer template="vertical">
<!-- template="" に指定する属性値によってレイアウトが選択可能 -->
<h1>Yoshiki Kato</h1>
<p>Web Director / Web Developer, Tokyo Japan.</p>
</amp-story-grid-layer>
</amp-story-page>
<!-- 1ページがここまで -->
<amp-story-page>[...]</amp-story-page>
<amp-story-page>[...]</amp-story-page>
<amp-story-bookend src="bookend.json" layout="nodisplay"></amp-story-bookend>
</amp-story>
amp-story
要素の必須属性
amp-story
要素に対して、下記の属性は必須になりますので必ず付与する必要があります。
standalone
属性
ドキュメントが 「AMP stories」 だと認識されるために必要なので必ず付けてください。
title
属性
AMP stories のタイトルを付けてください。
publisher
属性
AMP stories の作成者の名前を値に指定します。
publisher-logo-src
属性
アスペクト比が 1:1、つまり正方形のロゴ画像を指定します。通常の Web ページでいう Favicon に相当する画像を指定すればよいでしょう。
poster-portrait-src
属性
アスペクト比が 3:4 となる、縦長の画像を指定します。ポスター画像は AMP stories 全体を代表するものでなければなりません。OGP 画像をイメージするとわかりやすいかと思います。
また、画像のファイル形式は .jpg、.png、.gif が推奨されています。.svg は非推奨なので注意しましょう。最低サイズは 696px × 928px です。
amp-story
要素の任意属性
下記の各属性はオプション扱いなので、指定してもよいし、しなくても問題ないです。
supports-landscape
属性
ランドスケープ(横表示)モードを有効にします。この属性は論理属性なので値は不要です。
background-audio
属性
AMP stories 全体を通して再生されるオーディオファイルを URL で指定します。
poster-square-src
属性
アスペクト比が 1:1 となる、正方形の画像を指定します。最低サイズは 928px × 928px です。
poster-landscape-src
属性
アスペクト比が 4:3 となる、横長の画像を指定します。最低サイズは 928px × 696px です。
amp-story-bookend
要素
amp-story
要素の最後の子要素として、amp-story-bookend
要素を使用することで、最終ページに関連リンクなどを自動的に表示させることができます。ここの仕様は JSON の仕様含めて v0.1 からかなり変わっているので新しい仕様に合わせて記述してください。
細かい仕様は下記のセクションで確認できます。また冒頭に紹介したサンプルページのソースコードを見ていただくと多少は参考になると思います。
ということでかなり雑な感じではありますが、以上です。
関連エントリー
- AMP HTML でアコーディオンやカルーセル表示などを実装する拡張コンポーネントを使ってみる
- amp-analytics コンポーネントを使用した AMP HTML への Google Analytics 導入方法
- AMP (Accelerated Mobile Pages) バリデータの Web 版が公開される
- AMP (Accelerated Mobile Pages) HTML を出力するようにしてみたけど面倒くさかった話
- 閲覧中の URL を AMP (Accelerated Mobile Pages) バリデータに投げるブックマークレット
- Google Search Console に AMP の項目が追加される