
2026/06/27 6:37
フォントファミリーのおすすめ
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
Web 開発者は、一貫性を保証する本物の「web safe」フォントが存在しないため、リモートフォント (
@font-face) や Arial などの特定のシステムフォントを明示的に指定する依存関係を止めるべきです。核心となる戦略は、一般的なフォントファミリーを使用して信頼性とプライバシーを優先することです。document.fonts.load() は拒否されたプロミスを引き起こす傾向があるため、開発者は避けるべきです。また、「system-ui」などの汎用ファミリーだけでは等幅テキストを保証せず、Windows での CJK(中国語・日本語・韓国語)サポートも不十分なため、そのスタイルが必要であれば特定の等幅キーワードを明示的に含める必要があります。長めのスタックで名前付きバリアントを列挙することは推奨されませんが、それらを完全に省略することも解決策ではありません。予期せぬフォントサイズ縮小などの問題を回避するため、開発者はユーザーの好みを尊重しつつ外部アセットを強制しない慎重なスタックを使用すべきです。このアプローチは、ブロックされる可能性があるサブルーソースへの依存を排除し、リソースが欠如して引き起こされるレイアウトの破綻を防ぎ、高速なページロードとユーザーのローカルタイポグラフィ選択の維持を実現します。本文
ウェブフォントとシステムフォントに関する実践的ガイドライン
1. 特定の名前付きフォントの使用を絶対に行わない
ウェブ上で動作を保証できる「標準フォント(web-safe fonts)」は存在しません。主要プラットフォームすべてで利用可能なものも、また、ネットワーク依存となるウェブフォントも「安全」な選択肢とは言えません。
読み込みリスク
- インライン埋め込みを行っていない場合、ネットワーク事情により読み込みが失敗する可能性があります。
- セキュリティ懸念のため、一部のユーザーエージェント(ブラウザ)はフォントの読み込みをブロックする設定を持っています(例:
はリモートフォント無効化機能を備えています)。uBlock Origin - データ節約モードを搭載したブラウザではフォント読み込みが遮断されることがあり、これは回避すべき行為です。
JavaScript での注意点
を使用する場合、例外なく成功するとは限りません。Promise が**rejected(拒絶)**される可能性があります。document.fonts.load()- 2020 年から 2025 年にかけての事例で、読み込み破綻が約 4 件発生しています(うち 2 件は 2025 年)。
推奨するフォントスタックの基本原則
a) メモリオ体(Monospace)が必要な場合
- 必ず汎用ファミリーを含めることが必須です。
- デフォルト設定が機能しないケース(例:特定のユーザーエージェントや CSS サブセットの設定)が存在するため、完全な対応を依存するのは危険です。
- 以下の表示欠陥は避けるために、フォールバックとして
を含めなければなりません。monospace
pre { font-family: "jgs", monospace; /* 特定フォント -> fallback に monospace */ }
b) その他のフォントが必要な場合
またはserif
のいずれかをフォールバックとして含めるべきです。sans-serif- これらを指定しない場合、ブラウザのデフォルトフォント(多くは serif)が適用されます。
/* 推奨:Arial は sans-serif より劣っているため避ける */ font-family: Arial, Helvetica, 'Helvetica Neue', Liberation Sans, "Noto Sans", sans-serif; /* より合理的な指定 */ font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
2. システムにインストールされている特定のフォントを列挙するのをやめる
以下のような具体的なフォント名を多数列挙する做法は避けるべきです。
除外すべきフォントリスト
- Arial:
より劣っており、推奨されません。sans-serif - Roboto: ユーティリティとしてはほぼ役に立ちません。
- Courier New: macOS の Courier と混同されることが多く、誤ったフォールバック指定になり得ます。
不合理なフォントスタックの例
以下のスタックは非常に非合理であり、単に
monospace を使えば十分です。
/* 避けるべき:非合理的な多数のフォント列挙 */ font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
- このリストは
キーワードよりも劣る性能しか発揮しません。monospace - 例外:Microsoft Core Fonts for the Web に含まれる Georgia や Times New Roman のように、書字特性が異なり明記が必要な場合は、特定のプラットフォーム向け最適化として認めます。
a) 名前付きフォントの使用制限
- プラットフォーム固有の最適化を行わない限り、原則として名前付き非ウェブフォントは一つまでに抑えます。
などが推奨する複雑なスタックは「知恵を超えた規範」と評され、多くの名前付きフォントは削除すべきです。modernfontstacks.com
3. 汎用ファミリー(Generic Fonts)のみに依存すべき理由
ローカルインストールフォントが無用であり、読み込み速度と問題リスクを考慮した上で、ウェブフォントにも同様の原則が適用されます。
font-display
とのトレードオフ
font-display
を利用して読み込み待ちを解決しようとすると、描画差し替え(redraw)やレイアウト再計算(reflow)が発生し、パフォーマンスに悪影響を与えます。font-display- ユーザーがシステムで設定済みの良いフォントを使用させる方が、結果として優れている場合があります。
メモリオ体の改善
- 過去は
などの欠陥フォントがデフォルトであったため、多くのスタックにCourier New
を追加して回避する必要がありました。monospace - 現在はブラウザのデフォルト設定が大幅に改善されており、
やMenlo
などの特定の追加指定は不要です。Monaco - 単に
キーワードを使用するだけで十分です。monospace
/* 推奨:簡潔に monospace */ font-family: monospace; /* 冗長なリストは不要 */ /* font-family: Menlo, Monaco, Lucida Console, ..., monospace, serif; */
コード上の技術的補足
の扱い: ブラウザ仕様上、重複指定は意味を成さない場合がありますが、明示的なmonospace, monospace
設定と併せて使用すると安全です。font-size- Lightning CSS 使用时:
が壊れうるため、一時的にmonospace, monospace;
などの対策が取られることもあります。monospace, m
- Lightning CSS 使用时:
- 推奨アクション: CSSWG に「メモリオ体のデフォルトサイズを 13px から 16px への増加」を提言するよう働きかけることを提案しています。
4. system-ui
や ui-*
ファミリーをコンテンツ用には使用しない
system-uiui-*UI フォントは短いインタフェーステキスト用に設計されており、長文のコンテンツ用としては不適切です。
懸念点
- 言語対応の問題: macOS では良好ですが、Windows や CJK(中国語・日本語・韓国語)ユーザーでは劣悪なメモリオ体フォントを適用されることがあります。
- 馬鹿げた外観: Android コミュニティなど一部で意図的にシステム UI フォントを選択する傾向があり、コンテンツとして不釣り合いになります。
業界からの警告
- W3C CSSWG Drafts issue #3658:
が広範に悪用されていると指摘されています。system-ui - MDN Content issue #41244: 過剰な使用を抑止する注釈が追加されました。
結論:system-ui
と ui-*
の不使用理由
system-uiui-*- これらは「既存の汎用フォントに対する不適切で時代遅れのデフォルト回避手段」として悪用されてきました。
- 完全なる否定:
,system-ui
,ui-serif
,ui-sans-serif
, 特にui-monospace
は完全に愚かです。ui-rounded - Apple 固有の特性であるため、仕様上の必須要素ではなく、単に
プレフィックス付きフォントを指定すれば十分です。-apple-
/* 避けるべき:コンテンツ用のシステム UI */ font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto; /* 正解:汎用ファミリーの使用 */ font-family: Arial, sans-serif; /* シンプルかつ有効 */