Font モジュール
next/font
はフォント(カスタムフォントを含む)を自動的に最適化し、プライバシーとパフォーマンス向上のために外部ネットワークリクエストを削除します。
ビルトインの自動セルフホスティング機能により、任意のフォントファイルを最適に読み込むことができます。これにより、レイアウトシフトを発生させることなくWebフォントを読み込めます。
また、すべてのGoogle Fontsを簡単に利用できます。CSSとフォントファイルはビルド時にダウンロードされ、他の静的アセットと共にセルフホストされます。ブラウザからGoogleへのリクエストは送信されません。
🎥 動画:
next/font
の使い方について詳しく学ぶ → YouTube (6分).
リファレンス
キー | font/google | font/local | タイプ | 必須 |
---|---|---|---|---|
src | String または Objectの配列 | Yes | ||
weight | String または Array | Required/Optional | ||
style | String または Array | - | ||
subsets | 文字列の配列 | - | ||
axes | 文字列の配列 | - | ||
display | String | - | ||
preload | Boolean | - | ||
fallback | 文字列の配列 | - | ||
adjustFontFallback | Boolean または String | - | ||
variable | String | - | ||
declarations | Objectの配列 | - |
src
フォントローダー関数が呼び出されるディレクトリからの相対パスで、フォントファイルのパスを文字列またはオブジェクトの配列(Array<{path: string, weight?: string, style?: string}>
型)で指定します。
next/font/local
で使用
- 必須
例:
src:'./fonts/my-font.woff2'
-my-font.woff2
はapp
ディレクトリ内のfonts
ディレクトリに配置src:[{path: './inter/Inter-Thin.ttf', weight: '100',},{path: './inter/Inter-Regular.ttf',weight: '400',},{path: './inter/Inter-Bold-Italic.ttf', weight: '700',style: 'italic',},]
- フォントローダー関数が
app/page.tsx
で呼び出され、src:'../styles/fonts/my-font.ttf'
を使用する場合、my-font.ttf
はプロジェクトルートのstyles/fonts
に配置
weight
フォントのウェイトを以下のいずれかで指定:
- 特定のフォントで利用可能なウェイト値の文字列、または可変フォントの場合は値の範囲
- 可変Googleフォントでない場合のウェイト値の配列(
next/font/google
のみ)
next/font/google
と next/font/local
で使用
- 使用するフォントが可変フォントでない場合に必須
例:
weight: '400'
: 単一のウェイト値(Inter
フォントの場合、'100'
,'200'
,'300'
,'400'
,'500'
,'600'
,'700'
,'800'
,'900'
またはデフォルトの'variable'
が可能)weight: '100 900'
: 可変フォントの100
から900
までの範囲weight: ['100','400','900']
: 可変フォントでない場合の3つの可能な値の配列
style
フォントのスタイルを以下のいずれかで指定:
- デフォルト値
'normal'
の文字列値 - 可変Googleフォントでない場合のスタイル値の配列(
next/font/google
のみ)
next/font/google
と next/font/local
で使用
- オプション
例:
style: 'italic'
: 文字列 -next/font/google
ではnormal
またはitalic
style: 'oblique'
: 文字列 -next/font/local
では任意の値を取れるが、標準フォントスタイルからの値が期待されるstyle: ['italic','normal']
:next/font/google
用の2つの値の配列 - 値はnormal
とitalic
から
subsets
プリロードしたい各サブセットの名前を文字列値の配列で定義。subsets
で指定されたフォントは、preload
オプションが true(デフォルト)の場合、head にリンクプリロードタグが注入されます。
next/font/google
で使用
- オプション
例:
subsets: ['latin']
:latin
サブセットを含む配列
使用するフォントのすべてのサブセットのリストは、Google Fontsのページで確認できます。
axes
一部の可変フォントには追加の axes
を含めることができます。デフォルトでは、ファイルサイズを抑えるためにフォントウェイトのみが含まれます。axes
の可能な値は特定のフォントによって異なります。
next/font/google
で使用
- オプション
例:
axes: ['slnt']
:Inter
可変フォント用のslnt
値を含む配列(こちらで確認可能)。使用するフォントの可能なaxes
値は、Google可変フォントページでwght
以外の軸をフィルタリングして確認できます
display
フォントの表示方法を文字列値で指定。可能な値は 'auto'
, 'block'
, 'swap'
, 'fallback'
, 'optional'
で、デフォルトは 'swap'
。
next/font/google
と next/font/local
で使用
- オプション
例:
display: 'optional'
:optional
値を割り当てた文字列
preload
フォントをプリロードするかどうかを指定するブール値。デフォルトは true
。
next/font/google
と next/font/local
で使用
- オプション
例:
preload: false
fallback
フォントが読み込めない場合に使用するフォールバックフォント。デフォルトはなく、フォールバックフォントの文字列の配列で指定。
next/font/google
と next/font/local
で使用
- オプション
例:
fallback: ['system-ui', 'arial']
: フォールバックフォントをsystem-ui
またはarial
に設定
adjustFontFallback
next/font/google
の場合: 累積レイアウトシフトを減らすために自動フォールバックフォントを使用するかどうかのブール値。デフォルトはtrue
。next/font/local
の場合: 文字列またはブール値false
で、累積レイアウトシフトを減らすために自動フォールバックフォントを使用するか指定。可能な値は'Arial'
,'Times New Roman'
またはfalse
。デフォルトは'Arial'
。
next/font/google
と next/font/local
で使用
- オプション
例:
adjustFontFallback: false
:next/font/google
用adjustFontFallback: 'Times New Roman'
:next/font/local
用
variable
CSS変数メソッドでスタイルを適用する場合に使用するCSS変数名を定義する文字列値。
next/font/google
と next/font/local
で使用
- オプション
例:
variable: '--my-font'
: CSS変数--my-font
が宣言される
declarations
生成される @font-face
をさらに定義するフォントフェース記述子のキーと値のペアの配列。
next/font/local
で使用
- オプション
例:
declarations: [{ prop: 'ascent-override', value: '90%' }]
使用例
Google Fonts
Googleフォントを使用するには、next/font/google
から関数としてインポートします。最高のパフォーマンスと柔軟性のために可変フォントの使用を推奨します。
可変フォントを使用できない場合は、ウェイトを指定する必要があります:
配列を使用して複数のウェイトやスタイルを指定できます:
知っておくと便利: 複数の単語を含むフォント名にはアンダースコア(_)を使用します。例:
Roboto Mono
はRoboto_Mono
としてインポートします。
サブセットの指定
Google Fontsは自動的にサブセット化されます。これによりフォントファイルのサイズが縮小され、パフォーマンスが向上します。プリロードするサブセットを定義する必要があります。preload
が true
の状態でサブセットを指定しないと、警告が表示されます。
関数呼び出しに追加することで指定できます:
詳細についてはFont APIリファレンスを参照してください。
複数のフォントを使用する
アプリケーションで複数のフォントをインポートして使用できます。2つのアプローチがあります。
最初のアプローチは、フォントをエクスポートし、必要な場所でその className
を適用するユーティリティ関数を作成する方法です。これにより、フォントがレンダリングされるときにのみプリロードされます:
上記の例では、Inter
はグローバルに適用され、Roboto Mono
は必要に応じてインポートして適用できます。
別の方法として、CSS変数を作成し、好みのCSSソリューションで使用できます:
上記の例では、Inter
がグローバルに適用され、すべての <h1>
タグは Roboto Mono
でスタイルされます。
推奨事項: 新しいフォントはクライアントがダウンロードする追加リソースとなるため、複数のフォントは控えめに使用してください。
ローカルフォント
next/font/local
をインポートし、ローカルフォントファイルの src
を指定します。最高のパフォーマンスと柔軟性のために可変フォントを使用することを推奨します。
単一のフォントファミリに対して複数のファイルを使用したい場合、src
を配列にできます:
詳細についてはフォントAPIリファレンスを参照してください。
Tailwind CSSと一緒に使用
next/font
はCSS変数を使用してTailwind CSSとシームレスに統合されます。
以下の例では、next/font/google
から Inter
と Roboto_Mono
フォントを使用しています(任意のGoogleフォントまたはローカルフォントを使用できます)。variable
オプションを使用してCSS変数名(例: inter
と roboto_mono
)を定義します。次に、inter.variable
と roboto_mono.variable
を適用してHTMLドキュメントにCSS変数を含めます。
知っておくと良いこと: これらの変数は、好みやスタイリングのニーズ、プロジェクトの要件に応じて
<html>
または<body>
タグに追加できます。
最後に、CSS変数をTailwind CSS設定に追加します:
Tailwind CSS v4
Tailwind v4 以降、デフォルトでは設定は不要です。設定が必要な場合は、公式ドキュメントに従ってグローバルCSSファイルを設定できます。
Tailwind CSS v3
これで、font-sans
と font-mono
ユーティリティクラスを使用して要素にフォントを適用できます。
スタイルの適用
フォントスタイルは3つの方法で適用できます:
className
読み取り専用のCSS className
を返し、HTML要素に渡します。
style
読み取り専用のCSS style
オブジェクトを返し、フォントファミリー名とフォールバックフォントを含む style.fontFamily
をHTML要素に渡します。
CSS変数
外部スタイルシートでスタイルを設定し、そこで追加のオプションを指定したい場合は、CSS変数メソッドを使用します。
フォントをインポートするだけでなく、CSS変数が定義されているCSSファイルもインポートし、フォントローダーオブジェクトの variable
オプションを次のように設定します:
フォントを使用するには、テキストの親コンテナの className
をフォントローダーの variable
値に設定し、テキストの className
を外部CSSファイルの styles
プロパティに設定します。
component.module.css
CSSファイルで text
セレクタクラスを次のように定義します:
上記の例では、Hello World
というテキストは Inter
フォントと生成されたフォントフォールバックを使用して、font-weight: 200
と font-style: italic
でスタイルされています。
フォント定義ファイルの使用
localFont
またはGoogleフォント関数を呼び出すたびに、そのフォントはアプリケーション内で1つのインスタンスとしてホストされます。したがって、同じフォントを複数の場所で使用する必要がある場合は、1つの場所でロードし、関連するフォントオブジェクトを必要な場所にインポートする必要があります。これはフォント定義ファイルを使用して行われます。
例えば、アプリディレクトリのルートに styles
フォルダ内に fonts.ts
ファイルを作成します。
次に、次のようにフォント定義を指定します:
これらの定義を次のようにコードで使用できます:
コード内でフォント定義に簡単にアクセスできるようにするには、tsconfig.json
または jsconfig.json
ファイルで次のようにパスエイリアスを定義できます:
これで、次のように任意のフォント定義をインポートできます:
プリロード
サイトのページでフォント関数が呼び出されると、それはグローバルに利用可能ではなく、すべてのルートでプリロードされません。代わりに、フォントは使用されるファイルのタイプに基づいて関連するルートでのみプリロードされます:
- ユニークページの場合、そのページのユニークルートでプリロードされます。
- レイアウトの場合、レイアウトでラップされたすべてのルートでプリロードされます。
- ルートレイアウトの場合、すべてのルートでプリロードされます。
バージョン変更
バージョン | 変更内容 |
---|---|
v13.2.0 | @next/font が next/font に改名されました。インストールが不要になりました。 |
v13.0.0 | @next/font が追加されました。 |