AMP
例
Next.jsを使用すると、最小限の設定で、Reactから離れることなく、あらゆるReactページをAMPページに変換できます。
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コンポーネントのスクリプトを手動でインポートする必要はありません。
export const config = { amp: true }
 
function MyAmpPage() {
  const date = new Date()
 
  return (
    <div>
      <p>Some time: {date.toJSON()}</p>
      <amp-timeago
        width="0"
        height="15"
        datetime={date.toJSON()}
        layout="responsive"
      >
        .
      </amp-timeago>
    </div>
  )
}
 
export default MyAmpPage上記の例では、amp-timeagoコンポーネントを使用しています。
デフォルトでは、常にコンポーネントの最新バージョンがインポートされます。バージョンをカスタマイズしたい場合は、以下の例のようにnext/headを使用できます。
import Head from 'next/head'
 
export const config = { amp: true }
 
function MyAmpPage() {
  const date = new Date()
 
  return (
    <div>
      <Head>
        <script
          async
          key="amp-timeago"
          custom-element="amp-timeago"
          src="https://cdn.ampproject.org/v0/amp-timeago-0.1.js"
        />
      </Head>
 
      <p>Some time: {date.toJSON()}</p>
      <amp-timeago
        width="0"
        height="15"
        datetime={date.toJSON()}
        layout="responsive"
      >
        .
      </amp-timeago>
    </div>
  )
}
 
export default MyAmpPageAMPの検証
AMPページは開発中にamphtml-validatorで自動的に検証されます。エラーと警告は、Next.jsを起動したターミナルに表示されます。
ページは静的HTMLエクスポート中にも検証され、警告やエラーはターミナルに出力されます。AMPエラーが発生すると、エクスポートはステータスコード1で終了します。これは、エクスポートされたコンテンツが有効なAMPではないためです。
カスタムバリデータ
カスタムAMPバリデータは、以下に示すようにnext.config.jsで設定できます。
module.exports = {
  amp: {
    validator: './custom_validator.js',
  },
}AMP検証のスキップ
AMP検証をオフにするには、以下のコードをnext.config.jsに追加します。
experimental: {
  amp: {
    skipValidation: true
  }
}静的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は、HTMLバージョンにAMPバージョンのページへのリンクを自動的に挿入するため、自分で挿入する必要はありません。例は以下の通りです。
<link rel="amphtml" href="/about.amp.html" />そして、AMPバージョンのページにはHTMLページへのリンクが含まれます。
<link rel="canonical" href="/about" />trailingSlashが有効な場合、pages/about.jsのエクスポートされたページは以下のようになります。
- out/about/index.html- HTMLページ
- out/about.amp/index.html- AMPページ
TypeScript
現在、AMPにはTypeScript用の組み込み型がありませんが、ロードマップには含まれています(#13791)。
回避策として、プロジェクト内にamp.d.tsというファイルを手動で作成し、これらのカスタム型を追加できます。
この情報は役に立ちましたか?