Webフォント読み込み戦略は「速さ・見え方・安定性」を同時に満たすための設計
Webフォントはデザインの質を上げる強力な武器ですが、
読み込みが遅いと 文字が一瞬消える(FOIT)、
または 途中でフォントが切り替わる(FOUT) などの問題が起きます。
だからこそ、
「どう読み込むか」=読み込み戦略 がとても重要です。
ここでは、初心者でも理解しやすいように
CSS と Tailwind CSS の両方で、実務レベルの戦略を丁寧に解説します。
Webフォント読み込みの基本構造
CSS の基本形
@font-face {
font-family: "Inter";
src: url("/fonts/Inter.woff2") format("woff2");
font-display: swap;
}
CSSTailwind の基本形
Tailwind 自体はフォント読み込みを担当しないため、@font-face は CSS に書き、Tailwind 側で fontFamily を設定します。
// tailwind.config.js
module.exports = {
theme: {
fontFamily: {
sans: ["Inter", "system-ui", "sans-serif"],
},
},
};
JavaScript例1:最も安全な戦略「font-display: swap」
CSS 版
@font-face {
font-family: "Inter";
src: url("/fonts/Inter.woff2") format("woff2");
font-display: swap;
}
CSSswap の挙動
- 最初はシステムフォントで表示
- Webフォントが読み込まれたら即座に切り替え
メリット
- 文字が消えない(FOIT を防ぐ)
- 読み込みが遅くてもユーザーが読める
デメリット
- 読み込み後にフォントが切り替わる(FOUT)
深掘りポイント
swap は「読みやすさ最優先」の戦略で、
Google Fonts でもデフォルトで採用されているほど安全です。
Tailwind 版(CSS は同じ)
/* global.css */
@font-face {
font-family: "Inter";
src: url("/fonts/Inter.woff2") format("woff2");
font-display: swap;
}
CSS// tailwind.config.js
module.exports = {
theme: {
fontFamily: {
sans: ["Inter", "system-ui", "sans-serif"],
},
},
};
JavaScript例2:切り替えを目立たせたくない「font-display: optional」
CSS 版
@font-face {
font-family: "Inter";
src: url("/fonts/Inter.woff2") format("woff2");
font-display: optional;
}
CSSoptional の挙動
- 読み込みが速ければ Webフォントを使う
- 遅ければシステムフォントのまま(切り替えなし)
メリット
- FOUT(切り替え)がほぼ起きない
- パフォーマンスが非常に良い
デメリット
- 回線が遅いと Webフォントが使われないことがある
深掘りポイント
optional は「UX を最優先」した戦略で、
Google Fonts の推奨戦略としても注目されています。
例3:ブランドフォントを確実に使いたい「font-display: block」
CSS 版
@font-face {
font-family: "BrandFont";
src: url("/fonts/BrandFont.woff2") format("woff2");
font-display: block;
}
CSSblock の挙動
- 読み込み完了まで文字が非表示(FOIT)
- 読み込み後に一気に表示
メリット
- ブランドフォントを確実に使える
- デザインが崩れない
デメリット
- 読み込みが遅いと「文字が見えない時間」が発生
深掘りポイント
LP(ランディングページ)やロゴなど、
「絶対にブランドフォントで見せたい」場面で使われます。
例4:Google Fonts の最適な読み込み方法
HTML 版(推奨)
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet">
HTMLpreconnect の役割
- フォントサーバーへの接続を事前に確立
- 読み込みが速くなる
display=swap の役割
- 文字が消えない安全な読み込み
Tailwind 版
Tailwind 側はフォント名を設定するだけです。
module.exports = {
theme: {
fontFamily: {
sans: ["Inter", "system-ui", "sans-serif"],
},
},
};
JavaScript例5:Webフォントの遅延読み込み(パフォーマンス最優先)
HTML 版
<link rel="preload" href="/fonts/Inter.woff2" as="font" type="font/woff2" crossorigin>
HTMLCSS 版
@font-face {
font-family: "Inter";
src: url("/fonts/Inter.woff2") format("woff2");
font-display: swap;
}
CSSpreload の効果
- フォントを最優先で読み込む
- 初回表示が速くなる
深掘りポイント
preload は強力ですが、
使いすぎると逆にパフォーマンスが落ちるため、
「本当に必要なフォントだけ」に絞るのがコツです。
Webフォント読み込み戦略の設計ポイント(ここが一番大事)
1. まず「何を優先するか」を決める
読みやすさ優先 → swap
切り替えを見せたくない → optional
ブランドフォント最優先 → block
パフォーマンス最優先 → preload + optional
目的によって戦略は変わります。
2. フォールバックフォント(font-family)とセットで考える
Webフォントが読み込まれない場合に備えて、
フォントスタックを必ず設計します。
例(日本語サイト)
font-family:
"Inter",
"Noto Sans JP",
"Hiragino Sans",
"Yu Gothic",
"Meiryo",
sans-serif;
CSS3. 太さ(font-weight)ごとにフォントを読み込む
Webフォントは太さごとにファイルが別なので、
必要な太さだけ読み込むのが鉄則です。
例:400 と 700 だけ
@font-face {
font-family: "Inter";
font-weight: 400;
src: url("/fonts/Inter-Regular.woff2") format("woff2");
font-display: swap;
}
@font-face {
font-family: "Inter";
font-weight: 700;
src: url("/fonts/Inter-Bold.woff2") format("woff2");
font-display: swap;
}
CSS4. Tailwind では「fontFamily の設定」と「@font-face の管理」を分離する
Tailwind はフォント読み込みを担当しないため、
- 読み込み:CSS(@font-face)
- 使用:Tailwind(fontFamily)
という役割分担が最適です。
実務テンプレート:最もバランスの良い Webフォント戦略
global.css
@font-face {
font-family: "Inter";
src: url("/fonts/Inter-Regular.woff2") format("woff2");
font-weight: 400;
font-display: swap;
}
@font-face {
font-family: "Inter";
src: url("/fonts/Inter-Bold.woff2") format("woff2");
font-weight: 700;
font-display: swap;
}
CSStailwind.config.js
module.exports = {
theme: {
fontFamily: {
sans: [
"Inter",
"system-ui",
"-apple-system",
"Segoe UI",
"Roboto",
"Helvetica Neue",
"Arial",
"Noto Sans JP",
"sans-serif",
],
},
},
};
JavaScriptまとめ
Webフォント読み込み戦略は、
「速さ」「見え方」「安定性」 のバランスを取るための設計です。
ポイントは次の通りです。
- font-display の選択が UX を大きく左右する
- swap は最も安全、optional は最も自然、block はブランド向け
- preload は強力だが使いすぎ注意
- Tailwind は fontFamily の設定だけでよい
- 日本語サイトではフォールバックフォントが特に重要


