OpenAINext.js2019/10/07 18:59

Next.js 9.1

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

元記事

Quick Digest

要約

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

openaijamodel: gpt-5-mini-2025-08-07

Next.js 9.1 の概要

Key Points

  • srcディレクトリ対応
  • publicディレクトリ追加
  • 組み込みCSS(実験)

Summary

Next.js 9.1 がリリースされ、src および public ディレクトリのサポートが追加されました。実験的機能として組み込みのグローバル CSS インポート、静的エラーページ(例: 404)の自動出力、module/nomodule による差分配信、改善されたバンドル分割が含まれます。既存の static ディレクトリは非推奨となり、public/static へ移行することが推奨されます。

Key Points

  • src ディレクトリ: src/pages を使えるようになり、コード構成の柔軟性が向上
  • public ディレクトリ: public/robots.txt/robots.txt のようにルートへマッピング。static は互換性維持のうえ非推奨
  • 組み込み CSS(実験): pages/_app.js からグローバル CSS をインポート可能。将来的に .module.css による CSS Modules をサポート予定
  • 静的エラーページ: 404 などの期待されるエラーはデフォルトで静的出力され、CDN キャッシュで可用性とコスト削減に寄与
  • module/nomodule: モダンブラウザへ軽量モジュールを配信し、旧ブラウザはフォールバックで動作する差分配信を実現
  • 改善されたバンドル分割: 新しいチャンク層で共通モジュールの抽出を最適化し、初回表示およびページ遷移の読み込み量を削減

Upgrade

  • アップデートコマンド: npm i next@latest react@latest react-dom@latest
  • Next.js 9 未満からの移行は公式アップグレードガイドを参照してください

(Published: 2019-10-07)

Full Translation

翻訳

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

openaijamodel: gpt-5-mini-2025-08-07

Next.js 9.1

ブログに戻る

月曜日, 2019-10-07

Next.js 9.1

投稿者: JJ Kasper (@_ijjk), Joe Haddad (@timer150), Luis Alvarez (@luis_fades), Tim Neutkens (@timneutkens)

本日、Next.js 9.1 を発表します。今回のリリースでは srcpublic ディレクトリのサポートが追加されました。

今回のリリースでの新機能

src ディレクトリのサポート

  • pages ディレクトリはアプリケーションのルートに必須でしたが、src 配下にネストして配置できるようになりました。
  • これにより、コードベースを src 配下にまとめる一般的な構成をそのまま使えます。src/pages を作成することで、従来のルート直下の pages の代わりに使用できます。
  • src の使用は任意です。

public ディレクトリのサポート

  • これまで Next.js には特殊ディレクトリとして static があり、/static へマッピングされていました(例: static/my-image.png/static/my-image.png)。
  • しかし、/static ではドメインルートに置く必要がある robots.txt のようなケースをカバーできませんでした。
  • Next.js 9.1 から public ディレクトリが導入され、public/robots.txt/robots.txt にマッピングされます。public に置いたファイルはドメインルートにそのままマップされます。
  • publicstatic のユースケースも包含するため、static ディレクトリは非推奨(deprecated)となり、代替として public/static を推奨します。後方互換性のため、static は非推奨メッセージ付きで引き続き動作します。

今回のリリースでプレビュー中の機能(実験的フラグ)

これらの機能は現在実験的フラグ下で提供されており、最終実装が整い次第リリースされます。

組み込みの CSS サポート

  • 現在、Next.js は styled-jsx を組み込みで提供しており、コンポーネント単位のスタイリングに適しています。

  • しかし企業からの要望として、既存の CSS やデザインシステムを使いたいニーズが多く、一般に next-css プラグインを導入して CSS インポートを有効にしているケースが約50%あります。

  • そのため、開発時の自動リロードや本番での最適化(コンパイルやポリフィル)を含む、組み込みの CSS インポートサポートを追加しています。初期実装は本番 Next.js アプリでテスト中です。

  • グローバル CSS のインポートをまず導入します。

    pages/_app.js

    // Global styles can be imported from _app.js
    import '../styles/global.css';
    import App from 'next/app';
    export default App;
    
  • 次に .module.css 拡張子による CSS モジュールをサポートします。

    pages/index.js

    // Scoped styles are imported through .module.css
    import styles from '../styles/index.module.css';
    export default function HomePage() {
      return <h1 className={styles.heading}>Hello World</h1>;
    }
    
  • これにより、CSS インポート時の開発体験が大幅に向上します。進行中の作業は GitHub 上の RFC で確認できます。

静的エラーページ

  • Next.js には内部的に /_error と呼ばれるエラーページがあります。ユーザーは pages/_error.js を作ることでカスタマイズできます。
  • エラーは一般に「想定されるエラー」と「想定外のエラー」に分かれます。想定されるエラーの例は 404 ページ、想定外のエラーは getInitialProps やレンダリング中にスローされるエラー(500)などです。
  • 想定されるエラーは動的レンダリングする必要がないことが多いため、自動的に静的最適化(静的エクスポート)を行う予定です。デフォルトでは 404 は静的ページになり、動的レンダリングを希望する場合はオプトアウトできます。
  • これにより、サーバーターゲット使用時のサーバー負荷軽減や、serverless ターゲット使用時のコスト削減、CDN キャッシュの利点を得られます。

Google Chrome との協力

  • Next.js 9 発表時に共有した通り、Google Chrome チームは Next.js のパフォーマンス改善にリソースを投資しており、大規模なパフォーマンス改善に向けた複数の取り組みを進めています。詳細は Next.js 9 の発表や Nicole Sullivan 氏の React Rally の講演で確認できます。

Module / Nomodule

  • 開発者は一般に「モダン」な JavaScript を書き、Next.js は Babel を使って必要に応じて変換やポリフィルを自動で行います。
  • 多くの機能は現在のブラウザでサポートされていますが、従来はすべてのブラウザ向けに一つの JavaScript バンドルを配信していました(例: Internet Explorer 11 向けにコンパイルして polyfill を含める)。
  • 今回、モジュール/ノーモジュール(module/nomodule)パターンを利用して、モダンブラウザには最新の JS を、古いブラウザにはポリフィル済みの ES5 コードを提供する仕組みを導入します。
  • この機能は複数の大規模 Next.js アプリで本番テスト中で、実運用データを収集中です。初期の結果は有望で、性能改善の詳細は追って共有されます。

改善されたバンドル分割

  • Next.js はページをインタラクティブにするために複数の JavaScript バンドルを読み込みます。主なものは:

    • ページの JavaScript バンドル
    • 共通の JavaScript を含むファイル(commons)
    • Next.js のクライアントランタイムバンドル
    • 動的インポート(通常 next/dynamic 経由で追加)
  • これらは相互依存のため全て読み込まれる必要があり、起動のために過剰なコードをダウンロードしないよう最適化することが重要です。

  • 現行の commons 算出は比率ベースのヒューリスティックで、あるモジュールがページの50%で使われていれば commons と判断していました。しかし、アプリがマーケティングページ、ブログ、ダッシュボードなど複数の領域から成る場合、特定の領域に偏った最適化になりがちです。

  • Alex Castle により定義された新しいチャンク層(複数ファイルでの分割)により、より最適化された commons チャンク生成が可能になります。module/nomodule と同様に、改善されたバンドル分割も複数の大規模アプリで本番テスト中で、詳細は別記事で共有予定です。

更新方法

  • いつも通り後方互換性を保つよう努めています。アップデートは次のコマンドを実行するだけです:

    npm i next@latest react@latest react-dom@latest

  • アプリケーションが Next.js のバージョン 9 未満の場合は、アップグレードに必要な変更点についてアップグレードガイドを参照してください。

採用事例とショーケース

  • 前回のメジャーリリース以降、TikTok、Hilton、Elastic、Realtor、JW Player といった企業が Next.js を採用して公開しています。ショーケースをチェックしてください。

コミュニティ

  • 今回の変更により、すべての Next.js アプリケーションでのパフォーマンス向上を期待しています。
  • Next.js コミュニティは拡大を続けています:
    • 800 以上のコントリビューターが少なくとも1つのコミットを実施
    • GitHub スターは 41,350+ 回
    • examples ディレクトリは 210+ の例
    • Next.js コミュニティのメンバーは 11,250+ 人

参加をお待ちしています。今回のリリースに貢献してくれたコミュニティおよび外部からのフィードバックに感謝します。