ClaudeNext.jsApr 16, 2019, 9:41 PM

Next.js 8.1

A condensed section focused on the key takeaways first.

Original Post

Quick Digest

Summary

A condensed section focused on the key takeaways first.

claudeenmodel: claude-sonnet-4-20250514

Next.js 8.1 Introduces AMP Support with React Components

Key Points

  • AMP support with React components
  • Hybrid and AMP-first page modes
  • Built-in validation and development tools

Summary

Next.js 8.1 extends the framework to support AMP (Accelerated Mobile Pages) development, allowing developers to create high-performance pages using React components. The release introduces two AMP implementation modes and provides development tools for validation and testing.

Key Points

  • Hybrid AMP Pages: Create accompanying AMP versions of traditional pages using withAmp(Component, { hybrid: true }) for enhanced mobile search results while maintaining full Next.js features
  • AMP-First Pages: Serve AMP pages as primary traffic using withAmp(Component) for faster experiences across all devices, including desktop
  • Component Flexibility: Use useAmp() hook to distinguish between AMP and non-AMP rendering modes within React components
  • Development Tools: Automatic page reloading during development and built-in AMP validation using amphtml-validator
  • Production Ready: AMP-first pages already deployed on nextjs.org/docs and nextjs.org/blog
  • Incremental Adoption: AMP support defined per-page basis, enabling gradual implementation

Full Translation

Translations

A translation section that keeps the flow of the original article.

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