フォント最適化
next/font
は自動的にフォント(カスタムフォントを含む)を最適化し、プライバシーとパフォーマンスを向上させるための外部ネットワークリクエストを削除します。
🎥 動画: next/font
の使用について詳しく学ぶ → YouTube (6分)。
next/font
には、あらゆる フォントファイルに対する 組み込みの自動セルフホスティング が含まれています。これにより、使用される基盤のCSS size-adjust
プロパティのおかげで、レイアウトシフトなしで最適にウェブフォントを読み込むことができます。
この新しいフォントシステムでは、パフォーマンスとプライバシーを考慮して、すべてのGoogle Fontsを便利に使用できます。CSSとフォントファイルはビルド時にダウンロードされ、他の静的アセットと一緒にセルフホストされます。ブラウザからGoogleへのリクエストは送信されません。
任意のGoogle Fontを自動的にセルフホストします。フォントはデプロイメントに含まれ、デプロイメントと同じドメインから提供されます。ブラウザからGoogleへのリクエストは送信されません。
使用したいフォントを next/font/google
から関数としてインポートすることで始めます。最高のパフォーマンスと柔軟性を得るために、可変フォントの使用をお勧めします。
可変フォントを使用できない場合、ウェイトを指定する必要があります:
配列を使用して、複数のウェイトやスタイルを指定できます:
補足: 複数の単語からなるフォント名には、アンダースコア(_)を使用します。例:Roboto Mono
は Roboto_Mono
としてインポートします。
Google Fontsは自動的にサブセット化されます。これによりフォントファイルのサイズが縮小され、パフォーマンスが向上します。プリロードするサブセットを定義する必要があります。preload
が true
の場合にサブセットを指定しないと、警告が表示されます。
これは関数呼び出しに追加することで行えます:
詳細については、フォントAPIリファレンスを参照してください。
アプリケーション内で複数のフォントをインポートして使用できます。アプローチは2つあります。
最初のアプローチは、フォントをエクスポートするユーティリティ関数を作成し、それをインポートして必要な場所に className
を適用することです。これにより、レンダリングされた場合にのみフォントがプリロードされます:
上記の例では、Inter
がグローバルに適用され、Roboto Mono
は必要に応じてインポートおよび適用できます。
別の方法として、CSSの変数を作成し、お好みのCSSソリューションで使用することもできます:
上記の例では、Inter
がグローバルに適用され、すべての<h1>
タグがRoboto Mono
でスタイル設定されます。
推奨事項:各新しいフォントはクライアントがダウンロードする必要がある追加リソースであるため、複数のフォントは控えめに使用してください。
next/font/local
をインポートし、ローカルフォントファイルのsrc
を指定します。最高のパフォーマンスと柔軟性のために、可変フォントの使用をお勧めします。
1つのフォントファミリーに複数のファイルを使用する場合、src
は配列にできます:
詳細については、Font API リファレンスをご覧ください。
next/font
は、CSSの変数を通じてTailwind CSSで使用できます。
以下の例では、next/font/google
からInter
フォントを使用します(Google またはローカルフォントから任意のフォントを使用できます)。variable
オプションでCSSの変数名を定義し、inter
に割り当てます。次に、inter.variable
を使用してHTMLドキュメントにCSSの変数を追加します。
最後に、CSSの変数をTailwind CSS の設定に追加します:
これで、font-sans
とfont-mono
のユーティリティクラスを使用して、要素にフォントを適用できます。
サイトのページでフォント関数が呼び出されると、それはグローバルに利用可能になったり、すべてのルートで事前読み込みされるわけではありません。むしろ、フォントは使用されているファイルの種類に基づいて関連するルートで事前読み込みされます:
- 固有のページの場合、そのページの固有のルートで事前読み込みされます。
- レイアウトの場合、そのレイアウトでラップされているすべてのルートで事前読み込みされます。
- ルートレイアウトの場合、すべてのルートで事前読み込みされます。
localFont
またはGoogleフォント関数を呼び出すたびに、そのフォントはアプリケーション内で1つのインスタンスとしてホストされます。したがって、複数のファイルで同じフォント関数を読み込むと、同じフォントの複数のインスタンスがホストされます。このような状況では、以下をお勧めします:
- フォントローダー関数を1つの共有ファイルで呼び出す
- それを定数としてエクスポートする
- このフォントを使用したい各ファイルでその定数をインポートする