Implementation with Claude Code
Learn about implementation using Claude Code. Practical tips and code examples included.
Webフォントの最適化で表示速度を改善
Webフォントはデザインの品質を高めますが、最適化しないと表示速度に大きく影響します。Claude Codeを使えば、フォントのサブセット化からロード戦略まで効率的に実装できます。
font-displayの適切な設定
> Webフォントの読み込みを最適化して。
> FOUTとFOITを防ぎ、ユーザー体験を損なわない設定にして。
/* font-displayの使い分け */
@font-face {
font-family: 'Noto Sans JP';
src: url('/fonts/NotoSansJP-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap; /* テキストを即座に表示し、フォント読み込み後に差し替え */
}
@font-face {
font-family: 'Noto Sans JP';
src: url('/fonts/NotoSansJP-Bold.woff2') format('woff2');
font-weight: 700;
font-style: normal;
font-display: swap;
}
/* ヒーロー見出しなどの重要フォント */
@font-face {
font-family: 'Display Font';
src: url('/fonts/display.woff2') format('woff2');
font-weight: 700;
font-display: optional; /* ネットワークが遅い場合はシステムフォントで代替 */
}
Preloadによる先読み
<head>
<!-- クリティカルなフォントをpreload -->
<link rel="preload" href="/fonts/NotoSansJP-Regular.woff2"
as="font" type="font/woff2" crossorigin />
<link rel="preload" href="/fonts/NotoSansJP-Bold.woff2"
as="font" type="font/woff2" crossorigin />
</head>
日本語フォントのサブセット化
> 日本語フォントを必要な文字だけにサブセット化して。
> JIS第一水準・第二水準と常用漢字をカバーして。
// scripts/subset-font.ts
import { execSync } from 'child_process';
import { readFileSync, writeFileSync } from 'fs';
// pyftsubsetを使ったサブセット化
function subsetFont(inputPath: string, outputPath: string, unicodeRange: string) {
execSync(
`pyftsubset ${inputPath} ` +
`--output-file=${outputPath} ` +
`--flavor=woff2 ` +
`--layout-features='*' ` +
`--unicode-range="${unicodeRange}"`
);
}
// Unicode範囲の分割(チャンク化)
const chunks = [
{ name: 'latin', range: 'U+0000-007F,U+2000-206F,U+2070-209F' },
{ name: 'kana', range: 'U+3000-303F,U+3040-309F,U+30A0-30FF,U+FF00-FFEF' },
{ name: 'kanji-1', range: 'U+4E00-5FFF' },
{ name: 'kanji-2', range: 'U+6000-7FFF' },
{ name: 'kanji-3', range: 'U+8000-9FFF' },
];
for (const chunk of chunks) {
subsetFont(
'src/fonts/NotoSansJP-Regular.ttf',
`public/fonts/NotoSansJP-${chunk.name}.woff2`,
chunk.range
);
}
/* Unicode-rangeによる分割読み込み */
@font-face {
font-family: 'Noto Sans JP';
src: url('/fonts/NotoSansJP-latin.woff2') format('woff2');
unicode-range: U+0000-007F, U+2000-206F;
font-display: swap;
}
@font-face {
font-family: 'Noto Sans JP';
src: url('/fonts/NotoSansJP-kana.woff2') format('woff2');
unicode-range: U+3000-303F, U+3040-309F, U+30A0-30FF;
font-display: swap;
}
@font-face {
font-family: 'Noto Sans JP';
src: url('/fonts/NotoSansJP-kanji-1.woff2') format('woff2');
unicode-range: U+4E00-5FFF;
font-display: swap;
}
可変フォント(Variable Fonts)の活用
@font-face {
font-family: 'Inter Variable';
src: url('/fonts/Inter-Variable.woff2') format('woff2-variations');
font-weight: 100 900;
font-style: normal;
font-display: swap;
}
body {
font-family: 'Inter Variable', sans-serif;
font-weight: 400;
}
/* 1つのファイルで全ウェイトをカバー */
h1 { font-weight: 800; }
h2 { font-weight: 700; }
h3 { font-weight: 600; }
.caption { font-weight: 300; }
フォールバックフォントのメトリクス調整
/* CLSを防ぐためのサイズ調整 */
@font-face {
font-family: 'Adjusted Arial';
src: local('Arial');
size-adjust: 105%;
ascent-override: 90%;
descent-override: 20%;
line-gap-override: 0%;
}
body {
font-family: 'Noto Sans JP', 'Adjusted Arial', sans-serif;
}
フォント読み込み状態の監視
// Font Loading APIで読み込み完了を検知
async function waitForFonts() {
if ('fonts' in document) {
await document.fonts.ready;
document.documentElement.classList.add('fonts-loaded');
}
}
// 特定フォントの読み込みを確認
async function loadCriticalFont() {
const font = new FontFace(
'Noto Sans JP',
'url(/fonts/NotoSansJP-Regular.woff2)'
);
try {
const loaded = await font.load();
document.fonts.add(loaded);
console.log('フォント読み込み完了');
} catch (err) {
console.error('フォント読み込み失敗:', err);
}
}
Summary
フォント最適化はパフォーマンス最適化の中でも特に効果が大きい施策です。Claude Codeを使えば、サブセット化スクリプトからunicode-range分割まで効率的に実装できます。画像最適化と並行して取り組むことで、ページの表示速度を大幅に改善できます。Google Fontsの最適化についてはweb.devも参考にしてください。
#Claude Code
#フォント最適化
#performance
#Web Fonts
#表示速度
Related Posts
Advanced
Advanced
Mastering Claude Code Hooks: Auto-Format, Auto-Test, and More
Mastering Claude Code Hooks: Auto-Format, Auto-Test, and More. A practical guide with code examples.
Advanced
Advanced
Claude Code MCP Server Setup and Practical Use Cases
Claude Code MCP Server Setup and Practical Use Cases. A practical guide with code examples.
Advanced
Advanced
The Complete Guide to Writing CLAUDE.md: Best Practices for Project Configuration
The Complete Guide to Writing CLAUDE.md: Best Practices for Project Configuration. A practical guide with code examples.