<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>AMP &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/amp/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>AMPの気になること全部、Googleの山口さんに聞いてきました！</title>
		<link>/shumpei-shiraishi/24795/</link>
		<pubDate>Wed, 10 Jan 2018 01:00:36 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[AMP]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">/?p=24795</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (15)こんにちは、編集長の白石です。 この記事は、9月24日に開催されたHTML5 Conference 2017に登壇したエキスパートに、お話されたセッションの...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conf2017/" class="series-457" title="HTML5 Conference 2017特集" data-wpel-link="internal">HTML5 Conference 2017特集</a> (15)</div><p>こんにちは、編集長の白石です。</p>

<p>この記事は、9月24日に開催された<a href="http://events.html5j.org/conference/2017/9/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference 2017</a>に登壇したエキスパートに、お話されたセッションのトピックを中心に、様々なお話を伺おうというものです。セッションの内容をより深く理解する手助けになるだけでなく、本記事単体でも面白く読んでいただけることを目指しています。</p>

<p>今回お話を伺ったのは、Googleの山口能迪（やまぐち・よしふみ）さんです。</p>

<p><img src="/wp-content/uploads/2017/12/42A4653.jpg" alt="" width="640" height="403" class="alignnone size-full wp-image-24929" srcset="/wp-content/uploads/2017/12/42A4653.jpg 640w, /wp-content/uploads/2017/12/42A4653-300x189.jpg 300w, /wp-content/uploads/2017/12/42A4653-207x130.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>山口さんのセッションは「<a href="http://events.html5j.org/conference/2017/9/session/#c3" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AMPで加速するモバイルウェブアプリケーション</a>」でした。</p>

<p>スライド資料はこちらで公開されています。</p>

<p><a href="https://docs.google.com/presentation/d/1ZYyHFRMZnD6bfi6fl9yh9G_TIs3roSxvp-Goa1JZv_c/htmlpresent" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">https://docs.google.com/presentation/d/1ZYyHFRMZnD6bfi6fl9yh9G_TIs3roSxvp-Goa1JZv_c/htmlpresent</a></p>

<h2>AMPとは何か？なぜ必要とされたか？</h2>

<p><b class="speaker siraisi">白石:</b> 今日はよろしくお願いします。まずは簡単に自己紹介をお願いできますか？</p>

<p><b class="speaker yamaguchi">山口:</b> Googleでパートナー・デベロッパー・リレーションを担当している山口です。私の役目は特定の技術にとらわれず、最新の技術を広めていき、採用事例を増やすことです。</p>

<p><b class="speaker siraisi">白石:</b> 最新技術って、Googleさんすごい数出すから大変ですね(笑)。</p>

<p><b class="speaker yamaguchi">山口:</b> そうなんですよ(笑)。</p>

<p><b class="speaker siraisi">白石:</b> では、早速本題に入っていきたいと思います。AMPについてご存じない方のために、軽く説明をお願いできますでしょうか？</p>

<p><b class="speaker yamaguchi">山口:</b> AMPとはAccelerated Mobile Pagesの略で、高速にWebページを表示するための技術です（参考: <a href="https://www.ampproject.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AMPの公式サイト</a>）。</p>

<p>現在のWebは、低速なインターネット上で、モバイルデバイスを用いた利用が非常に多くなっています。特に東南アジア、インドやアフリカ、中国、南米などでその傾向は顕著です。</p>

<p>そういう環境でもWebページをストレスなく閲覧できるよう、Web標準に則った形で、出来る限り高速にWebページを表示できるようにするための技術がAMPです。</p>

<p><b class="speaker siraisi">白石:</b> なぜAMPは速いのですか？</p>

<p><b class="speaker yamaguchi">山口:</b> AMPは速いというよりも、「遅くなる要素を排除している」と言ったほうが正しいと思います。AMPは主に静的で文字中心のコンテンツを配信することを主眼に、HTML5でできることを相当絞り込んだ仕様です。その仕様に則ったHTMLページだけが、妥当なAMP対応ページとして扱われます。</p>

<p>そうした制限のおかげでページサイズも小さくなり、ブラウザによるレンダリングも高速に行われるというわけです。</p>

<p><b class="speaker siraisi">白石:</b> 具体的には、どのような制限がかけられているのでしょうか？</p>

<p><b class="speaker yamaguchi">山口:</b> 例えば、標準のimg要素やvideo要素は使用できず、すべて<code>&lt;amp-img&gt;</code>や<code>&lt;amp-video&gt;</code>と言ったカスタムタグに置き換える必要があります。こうした要素を使うことで、全ての画像や動画が遅延表示され、また、画面に表示されない間はダウンロードされなくなります。</p>

<p>CSSは外部CSSもstyle属性も使用することができません。全てHTML内に<code>&lt;style&gt;</code>を用いてインラインで記述しなくてはなりませんし、そのサイズも50kbに制限されています。</p>

<p>JavaScriptに至っては、独自のコードを記述することはできません。AMPページでは、動的な振る舞いはすべてカスタムタグを使用して実現することになります。</p>

<p></p><pre class="crayon-plain-tag">&lt;!-- AMPページの例 --&gt;
&lt;!doctype html&gt;
&lt;!-- html要素に⚡を付けるとAMP HTMLとして扱われる --&gt;
&lt;html ⚡&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8"&gt;
    &lt;!-- AMP用JSの読み込み --&gt;
    &lt;script async src="https://cdn.ampproject.org/v0.js"&gt;&lt;/script&gt;
    &lt;title&gt;Hello AMP world&lt;/title&gt;
    &lt;!--
      このAMPページの元となる、通常のHTMLページがある場合はcanonicalで指定
      そういうページがない場合はこのページ自体のURLをcanonicalで指定
    --&gt;
    &lt;link rel="canonical" href="hello-world.html"&gt;
    &lt;!-- viewport指定は必須 --&gt;
    &lt;meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"&gt;
    &lt;!-- 以下のCSSは必須 --&gt;
    &lt;style amp-boilerplate&gt;body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}&lt;/style&gt;&lt;noscript&gt;&lt;style amp-boilerplate&gt;body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}&lt;/style&gt;&lt;/noscript&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;Hello AMP World!&lt;/h1&gt;
    &lt;!-- imgの代わりにamp-imgを使用 --&gt;
    &lt;amp-img src=sample.jpg width=300 height=300&gt;&lt;/amp-img&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre><p></p>

<p><b class="speaker siraisi">白石:</b> カスタムタグにはどのようなものがあるんでしょう？</p>

<p><b class="speaker yamaguchi">山口:</b> 利用できるタグはすべてドキュメントに記載されていますので、そちらをご覧いただくのが一番です（参考: <a href="https://www.ampproject.org/docs/reference/components" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AMPで利用できるコンポーネント/タグ</a>）。</p>

<p>AMPのタグにはビルトイン（組み込み）とエクステンション（拡張）がありまして、エクステンションのタグを利用するには別途JavaScriptの読み込みが必要です。</p>

<p>ビルトインのタグの代表的なものは、先ほど取り上げた、<code>&lt;img&gt;</code>の代わりとなる<code>&lt;amp-img&gt;</code>です。エクステンションは現時点でもかなりの数が用意されていて、Google Analyticsを使用したり、YouTubeやTwitterの埋め込みを行えるタグもあります。</p>

<p><b class="speaker siraisi">白石:</b> そうしたエクステンションは、サードパーティの開発者やベンダーでも開発できるんですか？</p>

<p><b class="speaker yamaguchi">山口:</b> はい、可能です。ただ、AMPで利用できるタグは、AMP本体のリポジトリに取り込まれているものだけなんです。なので、開発したとしてもそれをリポジトリに取り込んでもらう努力が必要になります（参考: <a href="https://github.com/ampproject/amphtml/blob/master/spec/amp-html-components.md#extended-components" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">コンポーネントの開発・拡張についてのドキュメント</a>）。</p>

<p><b class="speaker siraisi">白石:</b> なるほど、そういうプロセスを経なければならないようにすることで、カスタムタグのクオリティを担保しているということですね。そういうレビューはGoogleが行っているんでしょうか？</p>

<p><b class="speaker yamaguchi">山口:</b> AMP自体はオープンソースですし、Google一社のものではありません。リリース前からTwitterやPinterestもコミットしていましたし、オープンソースにしたおかげで、プロセスも透過的です。Google以外のコントリビューターも数多くいますし、そこは一般的な企業発のオープンソースプロダクトとあまり変わりはないと思いますね。</p>

<p><img src="/wp-content/uploads/2017/12/42A4648.jpg" alt="" width="640" height="405" class="alignnone size-full wp-image-24960" srcset="/wp-content/uploads/2017/12/42A4648.jpg 640w, /wp-content/uploads/2017/12/42A4648-300x190.jpg 300w, /wp-content/uploads/2017/12/42A4648-207x131.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>AMPページのアクセス解析は？広告は？</h2>

<p><b class="speaker siraisi">白石:</b> AMPはWeb全体に大きな影響を与えている技術だと思いますので、ビジネス面も含めた、もう少し俯瞰的な部分からもお話をお聞きしたいと思います。</p>

<p>まず、AMPに対応すると、Google Analyticsなどの計測を正しく行えなくなるというのを聞いたことがあるのですが、これはどういうことですか？</p>

<p><b class="speaker yamaguchi">山口:</b> まず、<code>&lt;amp-analytics&gt;</code>タグを入れているAMPページは、Google Analyticsをはじめとしたツールで、統一的に計測を行うことができます。</p>

<p>ただそれでも、AMPキャッシュの仕組みの都合上、様々な不都合が生じていたのは事実です。</p>

<p><b class="speaker siraisi">白石:</b> AMPキャッシュというのはなんですか？</p>

<p><b class="speaker yamaguchi">山口:</b> GoogleのbotはAMPページを見つけると、専用のキャッシュサーバー（Google AMP Cache）にページをキャッシュします。
 Googleは世界中にデータセンターやISP各社に協力していただいているエッジサーバーを持っており、ユーザーにとって物理的に最も近い位置のサーバーからページを読み込みますので、AMPページがより高速に表示されるというわけです。</p>

<p>（筆者注: <a href="https://developers.google.com/amp/cache/reference/acceleratedmobilepageurl/rest/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google AMP CacheはAPIを用いて明示的なキャッシュを行わせることもできる</a>）</p>

<p><b class="speaker siraisi">白石:</b> Googleの検索結果から辿れるページとかは、AMPキャッシュからの応答ですね。</p>

<p><b class="speaker yamaguchi">山口:</b> ただ、AMPキャッシュの問題は、元サイトとは異なるドメインからページが読み込まれるということです。そうなるとCookieが異なるので、Google Analyticsなどで正しく計測が行えないのです。</p>

<p>（筆者注: 例えば 当サイト（）のAMPページは「.cdn.ampproject.org」から読み込まれました）</p>

<p>ただこの問題は、今ではほぼ解決されています。具体的には、Cookieの欠点を補うためのクライアントIDという値を用いることで、AMPキャッシュから配信されたページへのアクセスと、オリジナルサイトへのアクセスを統一して扱えるようになっています。</p>

<p><small>
筆者注: こうした問題とそのソリューションについては、以下のページに詳しい。</p>

<ul>
<li><a href="https://www.suzukikenichi.com/blog/amp-analytics-is-unreliable/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AMPページの直帰率の高さやユニークユーザー数は全部ウソ!? AMPアクセス解析には潜在的な問題あり &#8211; 海外SEO情報ブログ</a><br></li>
<li><a href="https://www.suzukikenichi.com/blog/google-analytics-fixes-inaccurate-amp-report/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">⚡AMPの不正確なアクセス解析をGoogleアナリティクスが解消 &#8211; 海外SEO情報ブログ</a><br></li>
<li><a href="https://www.suzukikenichi.com/blog/google-analytics-lets-you-opt-in-amp-client-id-api/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google アナリティクス、AMPキャッシュ計測の問題を解決。AMP Client ID APIのオプトインで正確なアクセス解析が可能に &#8211; 海外SEO情報ブログ</a></li>
<li><a href="https://developers.google.com/analytics/devguides/collection/amp-analytics/client-id?hl=en" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Client IDs in AMP pages &#8211; Googleアナリティクスヘルプ</a>（<a href="https://developers.google.com/analytics/devguides/collection/amp-analytics/client-id?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">日本語ページ</a>もあるのですが内容が古く、「Using a single Client ID across AMP and non-AMP pages」（AMPと非AMPページで同一のクライアントIDを使用する）という重要な節が抜けているようです）
</small></li>
</ul>

<p><b class="speaker siraisi">白石:</b> なるほど、アクセス解析の問題については、ほぼ解決済みなのですね。知りませんでした。</p>

<p>ほかには、AMPに対応することでパブリッシャーの広告収益に影響が出るのではないかという話を聞きましたが、これについてはいかがでしょうか？特に、AMPページに比べて広告の表示速度が遅いことで、広告が表示される前にユーザーが離脱してしまうのではないかと聞いています。</p>

<p><b class="speaker yamaguchi">山口:</b> 実はAMPは、広告の高速化についても「<a href="https://www.ampproject.org/learn/who-uses-amp/amp-ads/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AMP Ads</a>」（筆者注: 「AMP for Ads (A4A)」とも呼ばれる）という取り組みを既に進めているんです。</p>

<p>これは、広告コンテンツについてもAMPフォーマットで記述するというもので、従来よりも素早く表示されるだけでなく、AMPページ以外でも利用できますし、様々な広告ネットワーク上でも利用できる柔軟性があります。</p>

<p><small>
参考:
<a href="https://developers-jp.googleblog.com/2017/09/even-faster-loading-ads-in-amp.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AMP Ads の読み込みがさらに高速化 &#8211; Google Developers Japan Blog</a>
<a href="https://github.com/ampproject/amphtml/blob/master/ads/google/a4a/docs/a4a-readme.md" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AMP Ads &#8211; GitHub (英語)</a>
</small></p>

<p><b class="speaker siraisi">白石:</b> そんな取り組みがされてたんですねー、全然知りませんでした。</p>

<p><img src="/wp-content/uploads/2017/12/42A4640.jpg" alt="" width="640" height="413" class="alignnone size-full wp-image-24961" srcset="/wp-content/uploads/2017/12/42A4640.jpg 640w, /wp-content/uploads/2017/12/42A4640-300x194.jpg 300w, /wp-content/uploads/2017/12/42A4640-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>AMPとPWAを組み合わせる</h2>

<p><b class="speaker siraisi">白石:</b> 最後に、技術者向けに深いトピックをいろいろお聞かせください。</p>

<p>AMPとPWA (Progressive Web Apps)を共存させる、という話を聞きます（※）が、具体的にはどのように組み合わせることができるのでしょうか？</p>

<p><small>
※ <a href="https://www.ampproject.org/docs/guides/pwa-amp" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Combine AMP with Progressive Web Apps</a>
</small></p>

<p><b class="speaker yamaguchi">山口:</b> AMPは、言ってみればWebプラットフォーム上のフレームワークの1つに過ぎません。なので、例えば<a href="https://developers.google.com/web/fundamentals/web-app-manifest/?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Webアプリマニフェスト</a>を書いておいて、AMPページからリンクすれば、モバイルアプリにWebアプリをインストールさせることも可能です。AMPだからと言って、特別なことは何もありません。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。</p>

<p><b class="speaker yamaguchi">山口:</b> PWAと言うのはマーケティングワードという側面も強いので、「何を持ってPWAと呼ぶか」も難しいところではありますけどね。</p>

<p>AMPには<code>&lt;amp-serviceworker&gt;</code>というタグもあって、AMPページを起点にして<code>ServiceWorker</code>をインストールさせることもできます。</p>

<p>これを応用すれば、まずはAMPページを高速に表示させておいて、裏でPWAに必要なアセットをServiceWorkerを利用してキャッシュしておき、リンクをクリックしたらPWAが高速に起動する…というアプローチも取ることができます。</p>

<p><b class="speaker siraisi">白石:</b> AMPとPWAのいいところ取りができるというわけですね。面白い。</p>

<p>あと、「PWAの中でAMPを使う」というアプローチも聞きました。外部のページをAMPで読み込むと言ったような。</p>

<p><b class="speaker yamaguchi">山口:</b> それも可能ですね。AMPをiframeで開くというのが一つのパターンですが、更にもう一歩進んだアプローチとしては、外部のAMPページを読み込んで、Shadow DOMに突っ込んじゃうっていうパターンもあります。</p>

<p><b class="speaker siraisi">白石:</b> それってどういうメリットがあるんですか？</p>

<p><b class="speaker yamaguchi">山口:</b> これも高速化のテクニックの一つですね。iframeだと、AMP JSの読み込みがiframeごとに走るので無駄が多いんです。Shadow DOMに埋め込むのであれば、既に元ページでAMP JSが読み込まれていればいいので、それぞれのページで読み込む必要がありません。</p>

<p><b class="speaker siraisi">白石:</b> なるほど、面白い！</p>

<p><b class="speaker yamaguchi">山口:</b> これはAMPに限った話ではないのですが、従来iframeを使って読み込んでいたコンテンツを、Shadow DOMに埋め込むというテクニックは、広告とかにも応用可能です。広告が元ページに悪影響を及ぼさないようにカプセル化する役割を、Shadow DOMに任せるわけですね。</p>

<p><b class="speaker siraisi">白石:</b> いやあ、最新のWeb技術てんこ盛りで、Webエンジニアとして大変興味深いお話です。AMPそのものも、そしてAMPを支える技術も、最新技術の塊ですね。本日は大変勉強になりました、ありがとうございました！</p>

<p><DIV align=right>（撮影：刑部友康 写真提供：html5j HTML5 Conference 2017事務局）</div></p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2017特集]]></series:name>
	</item>
	</channel>
</rss>
