Next.jsでAMPページを作成する方法
例
Next.jsを使用すると、最小限の設定でReactページをAMPページに変換できます。Reactの枠組みを離れる必要はありません。
AMPの詳細については、公式サイトamp.devでご覧いただけます。
AMPの有効化
ページでAMPサポートを有効にする方法や、さまざまなAMP設定について詳しく知るには、next/amp
のAPIドキュメントをお読みください。
注意点
- CSS-in-JSのみサポートされています。現在のところ、AMPページではCSS Modulesはサポートされていません。Next.jsへのCSS Modulesサポートの貢献に参加できます。
AMPコンポーネントの追加
AMPコミュニティは、AMPページをよりインタラクティブにするための多数のコンポーネントを提供しています。Next.jsはページで使用されるすべてのコンポーネントを自動的にインポートするため、AMPコンポーネントスクリプトを手動でインポートする必要はありません:
上記の例では、amp-timeago
コンポーネントを使用しています。
デフォルトでは、コンポーネントの最新バージョンが常にインポートされます。バージョンをカスタマイズしたい場合は、次の例のようにnext/head
を使用できます:
AMPバリデーション
AMPページは、開発中にamphtml-validatorを使用して自動的に検証されます。エラーや警告は、Next.jsを起動したターミナルに表示されます。
静的HTMLエクスポート時にもページは検証され、警告/エラーがターミナルに表示されます。AMPエラーがあると、エクスポートが有効なAMPではないため、エクスポートはステータスコード1
で終了します。
カスタムバリデータ
next.config.js
に以下のようにカスタムAMPバリデータを設定できます:
AMPバリデーションのスキップ
AMPバリデーションを無効にするには、next.config.js
に次のコードを追加します:
静的HTMLエクスポートでのAMP
静的HTMLエクスポートを使用してページを静的にプリレンダリングする場合、Next.jsはページがAMPをサポートしているかどうかを検出し、それに基づいてエクスポート動作を変更します。
例えば、ハイブリッドAMPページpages/about.js
は以下を出力します:
out/about.html
- クライアントサイドReactランタイムを含むHTMLページout/about.amp.html
- AMPページ
pages/about.js
がAMP専用ページの場合、以下を出力します:
out/about.html
- 最適化されたAMPページ
Next.jsは自動的にAMPバージョンのページへのリンクをHTMLバージョンに挿入するため、以下のように手動で行う必要はありません:
また、AMPバージョンのページにはHTMLページへのリンクが含まれます:
trailingSlash
が有効な場合、pages/about.js
のエクスポートページは以下のようになります:
out/about/index.html
- HTMLページout/about.amp/index.html
- AMPページ
TypeScript
AMPには現在TypeScript用の組み込み型がありませんが、ロードマップに含まれています(#13791)。
回避策として、プロジェクト内にamp.d.ts
ファイルを手動で作成し、これらのカスタム型を追加できます。