ClaudeNext.js2019/04/16 21:41

Next.js 8.1

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

claudejamodel: claude-sonnet-4-20250514

Next.js 8.1 - AMP サポートの追加

Key Points

  • ReactコンポーネントでAMPページを作成可能
  • HybridとAMP-firstの2つのモードを提供
  • 開発時の自動バリデーション機能

Summary

Next.js 8.1では、AMPページの作成機能が追加されました。ReactコンポーネントでAMPページを構築でき、ページ単位でAMPを有効化できます。

Key Points

  • Hybrid AMPページ: 従来のページとAMP版を併用可能
    • withAmp(Component, { hybrid: true }) で有効化
    • 検索エンジンのモバイル検索結果でAMP版を表示
  • AMP-firstページ: メインサイトでAMPを使用
    • withAmp(Component) で有効化
    • デスクトップでも高速なAMP体験を提供
  • 開発者体験の向上
    • useAmp() フックでAMP/非AMP判定
    • 開発時の自動リロード機能
    • amphtml-validator による自動バリデーション

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

claudejamodel: claude-sonnet-4-20250514

Next.js 8.1

Next.js 8.1

投稿者: Connor Davis @ connordav_is, JJ Kasper @ _ijjk, Joe Haddad @ timer150, Luis Alvarez @ luis_fades, Tim Neutkens @ timneutkens

本日、Next.jsでAMPページを作成できるよう、Next.jsの体験を拡張したことを発表いたします。

目次

  • AMPとは
  • Next.jsでのAMP
  • ハイブリッドAMPページ
  • AMP-firstページ
  • AMPバリデーション

AMPとは?

AMPは、レンダリングのオーバーヘッドを最小化し、拡張された動作で有名な検索エンジンにインデックスされる高性能なWebサイトを構築するための標準です。例えば、AMPページはGoogleのモバイル検索結果に直接読み込まれ、稲妻アイコンでマークされます。

AMP HTMLは、より信頼性の高いパフォーマンスとより良いスケーラビリティを実現するために、いくつかの制限を課すHTMLのより厳格なバージョンです。一部のHTMLタグは、対応するHTMLタグよりも優れた体験を提供するために、AMP固有のHTMLタグに置き換えられます。例えば、amp-imgタグは、まだサポートしていないブラウザでも完全なsrcsetサポートを提供します。

AMPページは、それをサポートする検索エンジンによって自動的に発見されます。これらの検索エンジンは一般的にAMPキャッシュ(例:GoogleやBing)を実装しています。AMPキャッシュは、検索結果からページをより高速にレンダリングするのに役立ちます。

Next.jsでのAMP

本日、Next.jsでAMPページを作成できるよう、Next.jsの体験を拡張したことを発表いたします。これは、Reactコンポーネントの力を活用してAMPページを作成できることを意味します。

AMPサポートはページ単位で定義され、AMPの段階的な採用が可能です。Next.jsでAMPを有効にする方法は2つあります:ハイブリッドAMPページまたはAMP-firstページです。

ハイブリッドAMPページ

ハイブリッドAMPページでは、従来のページに付随するAMPバージョンを持つことができ、検索エンジンがモバイル検索結果でページのAMPバージョンを表示できる一方で、既存のページバージョンを維持できます。これにより、メインのユーザー体験にはクライアントサイドルーティングなどのNext.js機能を使用しながら、アプリケーションにAMPを使用できます。

ハイブリッドAMPページにオプトインするには、hybrid: trueオプションを提供しながらwithAmp関数を使用します:

pages/index.js

function HomePage() {
  return <p>Welcome to AMP + Next.js.</p>;
}

export default withAmp(HomePage, { hybrid: true });

本番環境でハイブリッドAMPパターンが使用されている例の1つはRedditです。各スレッドはGoogleのAMPキャッシュに保存され、モバイルWeb全体で高速なユーザー体験を提供する一方で、デスクトップと後続のナビゲーションには完全版のRedditを提供しています。

AMP-Firstページ

AMP-firstページは、検索エンジンのトラフィックだけでなく、Webサイトの主要なトラフィックにも提供されます。AMP-firstページを使用することで、デスクトップを含むメインWebサイトにAMPの高速な体験をもたらします。

AMP-firstページを実装するには、withAmp関数でページをラップします:

pages/index.js

import { withAmp } from 'next/amp';

function HomePage() {
  return <p>Welcome to AMP + Next.js.</p>;
}

export default withAmp(HomePage);

Next.jsランタイムが必要ない場合、AMP-firstページを使用することで開発を高速化できます。AMP-Firstでは、ページを構築するためにAMP互換コンポーネントのみを使用する必要があります。

AMP-Firstページは現在、nextjs.org/docsとnextjs.org/blogで本番環境で使用されています。

コンポーネントでのAMPレンダリングの区別

プロジェクト内の任意のReactコンポーネントは、useAmpを活用してAMPと非AMPレンダリングモードを区別できます。これにより、<img><amp-img>の間でロジックを共有する<Image>コンポーネントを実装できます:

components/image.js

import { useAmp } from 'next/amp';

export function Image({ src, width, height }) {
  const isAmp = useAmp();
  return isAmp ? (
    <amp-img src={src} width={width} height={height} />
  ) : (
    <img src={src} width={width} height={height} />
  );
}

pages/index.js

import { withAmp } from 'next/amp';
import { Image } from '../components/image';

function HomePage() {
  return (
    <>
      <p>Hello! Welcome to AMP + Next.js.</p>
      <Image src="https://placehold.it/120" width="120" height="120" />
    </>
  );
}

export default withAmp(HomePage, { hybrid: true });

AMP開発のための自動リロード

開発時には、hot-module-replacementを使用する代わりに、現在表示しているページへの変更を追跡し、変更があった場合にのみページをリロードします。hot-module-replacementの代わりに完全なリロードを使用する理由は、AMPページの新鮮なサーバーサイドレンダリングを常に確認するためです。

AMPバリデーション

有効なAMPページのみが生成されることを確実にするため、開発中にamphtml-validatorで自動的にバリデーションを行います。エラーと警告は、Next.jsを開始したターミナルに表示されます。

ページはnext export中にもバリデーションされ、問題があればターミナルに出力されます。AMPエラーがあると、エクスポートが有効なAMPではないため、next exportは失敗します。

Next.jsでAMPの使用方法を学ぶ

Next.jsの使用方法を学ぶことに加えて、Next.jsでAMPを使用する方法を学ぶための新しいセクションを追加しました。

または、AMPの例を使用して開始することもできます:

npx create-next-app --example amp amp-app