Eleventy AMP プラグインの紹介
2020年8月28日金曜日
この記事は Sebastian Benz による The AMP Blog の記事 "Introducing the Eleventy AMP Plugin" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
新しく登場した Eleventy 向けの AMP プラグインを紹介します。静的サイト生成ツールである Eleventy を使うと、テンプレートを簡単に管理してサイトを構築できます。静的サイトをインタラクティブにしたり、サードパーティのコンテンツを埋め込んだりしたい場合は、AMP と合わせて利用すると非常に便利です。新しく登場した AMP Eleventy プラグインを使えば、AMP ボイラープレートの設定や AMP コンポーネントのインポートに煩わされることなく、はるかに簡単にテンプレート内の AMP コンポーネントを使うことができます。
その中核となる AMP は、ウェブ コンポーネント フレームワークです。AMP のコンポーネントはパフォーマンスとアクセシビリティを考慮して設計されており、実にさまざまな状況で活用できます。このプラグインは、AMP を単なるコンポーネント ライブラリとして使用する方法を示す好例です。たとえば、このプラグインでは AMP Cache 配信をオプトアウトしたり、AMP ランタイムをセルフホストしたりするオプションが提供されます。そのため、ページをどこからどのように提供するかを完全に制御できます。以降では、プラグインの詳細と使い方について説明します。
AMP を使う方が合理的なのは、車輪の再発明をすることなくサイトでもっと高度な機能を使いたい場合です。
AMP のもう 1 つのメリットは、最適化された豊富なサードパーティ統合がそろっていることです。その一部は、shortcodes を使って直接 AMP Eleventy プラグインに組み込まれています。
ただし、AMP の使用について注意すべき点が 1 つあります。AMP のパフォーマンスが保証されるのは、ページで AMP だけが使われている場合に限られます。たとえば、AMP ランタイムがページ読み込み時のコンテンツの移動を抑止できるのは、ページのすべての要素の高さを前もって計算できる場合に限ります。ページ内に AMP コンポーネントや amp-script がサポートしない機能が必要になる場合は、別のテクノロジーを使う方がよいでしょう。ただし、将来的にこのようなユースケースをサポートするため、AMP コンポーネントをスタンドアロン コンポーネントとして利用できるようにする作業も進めています。
投稿者: Google デベロッパー アドボケート、Sebastian Benz
Reviewed by Chiko Shimizu - Developer Relations Team
その中核となる AMP は、ウェブ コンポーネント フレームワークです。AMP のコンポーネントはパフォーマンスとアクセシビリティを考慮して設計されており、実にさまざまな状況で活用できます。このプラグインは、AMP を単なるコンポーネント ライブラリとして使用する方法を示す好例です。たとえば、このプラグインでは AMP Cache 配信をオプトアウトしたり、AMP ランタイムをセルフホストしたりするオプションが提供されます。そのため、ページをどこからどのように提供するかを完全に制御できます。以降では、プラグインの詳細と使い方について説明します。
AMP と Eleventy を組み合わせることが望ましいケース
テキストとイメージだけの簡単なブログを公開する場合なら、AMP を使う必要はありません。実際、そのような場合はプレーン HTML と CSS を使う方がはるかに合理的です。AMP を使う方が合理的なのは、車輪の再発明をすることなくサイトでもっと高度な機能を使いたい場合です。
- カルーセルやイメージ ライトボックス ギャラリーなどの高度な UI コンポーネント。
- フェードイン、視差効果、隠れるヘッダーなどの視覚効果。
- YouTube、Twitter、Instagram などのサードパーティの埋め込み。AMP が優れているのは、豊富なサードパーティ統合が提供されている点です。これらはすべて最適化され、適切なサンドボックス化も行われているので、サイトのパフォーマンスを低下させることはありません。
- amp-sidebar を使用したモバイルでアクセスしやすい便利なメニュー、amp-next-page を使用したページをまたぐ連続スクロールなどのナビゲーション機能。これらはすべて、何度も再発明されてきた一般的な機能です。
# Hello AMPHTML World
<amp-carousel lightbox amp-fx="fade-in" layout='responsive' width='600' height='400' type='slides'>
<amp-img src='https://picsum.photos/id/1015/600/400' layout='fill'></amp-img>
<amp-img src='https://picsum.photos/id/1016/600/400' layout='fill'></amp-img>
<amp-img src='https://picsum.photos/id/1018/600/400' layout='fill'></amp-img>
</amp-carousel>
AMP のもう 1 つのメリットは、最適化された豊富なサードパーティ統合がそろっていることです。その一部は、shortcodes を使って直接 AMP Eleventy プラグインに組み込まれています。
Checkout this video:
{% video "my-video.mp4" %}
Or this tweet (the number specifies the embed height):
{% twitter "1182321926473162752" 472 %}
Here is a Youtube video:
{% youtube "v0BVLgEEuMY" %}
And of course Instagram:
{% instagram "BMQ8i4lBTlb" %}
このプラグインには、デフォルトでウェブ パフォーマンスのベスト プラクティスも適用されています。AMP Optimizer が統合され、eleventy-img を使って自動的にイメージが最適化されます。つまり、すぐに最大限の AMP パフォーマンスを利用できます。ただし、AMP の使用について注意すべき点が 1 つあります。AMP のパフォーマンスが保証されるのは、ページで AMP だけが使われている場合に限られます。たとえば、AMP ランタイムがページ読み込み時のコンテンツの移動を抑止できるのは、ページのすべての要素の高さを前もって計算できる場合に限ります。ページ内に AMP コンポーネントや amp-script がサポートしない機能が必要になる場合は、別のテクノロジーを使う方がよいでしょう。ただし、将来的にこのようなユースケースをサポートするため、AMP コンポーネントをスタンドアロン コンポーネントとして利用できるようにする作業も進めています。
スタートガイド
この機能を使ってみるには、NPM から AMP Eleventy プラグインをインストールします。次に、Eleventy 設定の .eleventy.js にプラグインを追加します。$ mkdir eleventy-amp-demo $ cd eleventy-amp-demo $ npm init --yes $ npm install @ampproject/eleventy-plugin-amp --save-dev
const ampPlugin = require('@ampproject/eleventy-plugin-amp');
module.exports = function(eleventyConfig) {
eleventyConfig.addPlugin(ampPlugin);
};
そしていよいよ、コンテンツの作成を始めます。
$ echo '# Hello World
![image](https://unsplash.it/500/400)
{% twitter "1182321926473162752" 472 %}' > index.md
ローカルでサイトを利用するには、Eleventy をインストールして実行する必要があります。すると、http://localhost:8080 から新しく作成した有効な AMP サイトを確認できます。$ npm install -g @11ty/eleventy $ eleventy --serve
オフキャッシュ AMP とランタイムのセルフホスト
AMP Cache は一切使わず、AMP を単なる UI コンポーネント ライブラリとして使うことができます。これを実現するために、2 つの(オプション)機能が組み込まれています。- AMP Cache のオプトアウト: ページが AMP Cache から提供されるのを防ぎます(たとえば、Google 検索や Bing に表示される場合)。サイトを別の AMP Cache オリジンから提供したくない場合は、これが合理的です。この機能を使うと、<html> タグから稲妻マークが削除され、AMP Cache がページを提供しなくなります。
- ランタイムのセルフホスト: AMP は継続的に改善されています。自動的に最新機能を取得するには、cdn.ampproject.org から AMP のランタイムやコンポーネント スクリプトを読み込むのがベストです。しかし、どの AMP バージョンを使うかを細かく制御したい場合は、AMP ランタイムを自分でホストすることもできます。AMP Eleventy プラグインには、AMP Toolbox の新しい fetch-runtime モジュールが組み込まれています。このモジュールは、サイトのビルドの一環として AMP ランタイムをダウンロードします。こうすることで、パフォーマンスのメリットが増加します。最初のレンダリングで、cdn.ampproject.org への 2 つ目の HTTP 接続のセットアップが必要なくなるからです。
eleventyConfig.addPlugin(pluginAmp, {
ampCache: false,
downloadAmpRuntime: true,
ampRuntimeHost:
process.env.ENV === 'prod' ? 'https://your-domain.com' : 'http://localhost:8080',
});
package.json ビルド スクリプトで忘れずに環境変数を設定してください。
"scripts": {
"build": "ENV=prod eleventy",
"watch": "eleventy --watch",
"serve": "eleventy --serve"
}
AMP ページのさらなる高速化に向けて
AMP チームは、AMP のパフォーマンスの改善作業を続けています。Eleventy プラグインを使うと、今後予定されているさまざまな機能をすぐに試すことができます。- JavaScript モジュールの活用による AMP ランタイム バンドルの小型化。
- ヒーロー イメージのパフォーマンスの最適化。data-hero 属性を使用してヒーロー イメージをマークアップすると、AMP ランタイムが利用できるかどうかにかかわらず、できるだけ早くレンダリングされることが保証されます。
- AMP ランタイムのセルフホストにより、読み込み時の HTTPS 接続数を削減。
eleventyConfig.addPlugin(pluginAmp, {
ampCache: false,
downloadAmpRuntime: true,
ampRuntimeHost:
process.env.ENV === 'prod' ? 'https://your-domain.com' : 'http://localhost:8080',
experimentEsm: true,
experimentImg: true,
validation: false,
imageOptimization: {
urlPath: '/img/',
},
});
注意点として、これらはまだ AMP Validator でサポートされていません。つまり、この AMP ページは AMP Cache で提供できる有効なものではありません。しかし、オリジン上では AMP の最高のパフォーマンスを発揮できます。まとめ
ぜひお試しいただき、感想をお聞かせください!Eleventy AMP プラグインを使うと、AMP を使ってすばやく簡単に新しいウェブサイトを作成できます。さらに簡単に試せるように、すぐに使える AMP ブログ スターター テンプレートも用意しています。投稿者: Google デベロッパー アドボケート、Sebastian Benz
Reviewed by Chiko Shimizu - Developer Relations Team