| この記事の要点 |
|
概要
TTC(TrueType Collection)と OTC(OpenType Collection)は、複数のフォントをひとつのファイルにまとめるためのコンテナ形式です。1996 年に Apple が、特に中国語・日本語・韓国語(CJK)フォントの保存効率を高める目的で TrueType Collection 仕様を導入しました。拡張子は TrueType ベースなら .ttc、OpenType(CFF アウトライン含む)ベースなら .otc です。内部には複数の SFNT(フォントテーブル群)が格納され、ヘッダにある「TTC ヘッダ」が各フォントへのオフセットを示します。OS から見ると、ひとつの TTC ファイルから複数のフォントファミリ・ウェイトが供給される形になります。
TTC / OTC の最大の技術的価値は テーブル共有 です。たとえば「ヒラギノ角ゴ Pro W3」と「ヒラギノ角ゴ Pro W6」は字幅やデザインが違うため、字形(glyf / CFF)テーブルは別物にせざるを得ません。しかし cmap(文字コード→グリフ ID マッピング)や name(フォント名)といったテーブルは共通にできます。TTC ではこれら共通テーブルを 1 度だけ格納し、両方のフォントが参照する形にすることで、ディスク容量を数 MB〜数十 MB 単位で削減できます。特に CJK フォントは漢字グリフだけで 2 万〜2 万 5000 字以上 あるため、ウェイト別に独立 TTF を持つと容量が爆発しますが、TTC にすれば現実的なサイズに収まります。
代表例は macOS のシステムフォントです。/System/Library/Fonts/ を覗くと、Hiragino Sans GB.ttc(簡体字中国語)、Hiragino Sans.ttc(日本語)、Heiti SC.ttc、Songti.ttc など、TTC が大量に並んでいるのが確認できます。Windows 10 / 11 の Yu Gothic(游ゴシック)も YuGothM.ttc / YuGothR.ttc という TTC で提供されています。サードパーティでは Adobe と Google が共同開発した Source Han Sans(源ノ角ゴシック)/ Noto Sans CJK が OTC 配布の代表例で、日中韓ベトナム 4 地域の字形をひとつの OTC ファイルに収めています。
一方、TTC / OTC は Web フォントとしては直接使えません。@font-face は単一フォントを想定しており、TTC を直接 URL に書いてもブラウザは扱えないか、最初のフォントだけ読み込みます。Web で使う場合は fonttools や ttc2ttf で個別の TTF / OTF を取り出し、それぞれを WOFF2 に変換するのが定石です。
内部構造
| セクション | 役割 |
|---|---|
| TTC ヘッダ | マジック ttcf、バージョン、フォント数、各フォントへのオフセット表 |
| 個別 SFNT 1 | 1 つ目のフォントのテーブルディレクトリ |
| 個別 SFNT 2 | 2 つ目のフォントのテーブルディレクトリ |
| ... | 必要なだけフォントを格納可能 |
| 共有テーブル領域 | 複数フォントが同じオフセットを指して参照する共通テーブル |
テーブルディレクトリの中の各エントリには「テーブル本体のオフセット」が書かれており、複数のフォントから同じオフセットを指すことができます。これが共有の実装です。
主な用途
- OS 標準 CJK フォントの配布:macOS のヒラギノ、Windows の Yu Gothic、Android の Noto Sans CJK。
- 大規模フォントファミリの統合:Source Han Sans 7 ウェイト × 4 地域 = 28 種類を 1 ファイル(OTC)に。
- ディスク容量の節約:仮名・記号・ラテン部分を共通テーブル化することで、ファミリ全体が単独 TTF の合計より大幅に小さくなる。
- 商用アプリのフォント埋め込み:DTP ソフトや電子書籍ビューアが、フォントを 1 ファイルに束ねて配布する場合に使う。
関連形式との比較
| 項目 | TTC / OTC | TTF / OTF(単独) | OpenType Variable Font |
|---|---|---|---|
| ファイル数 | 複数フォントを 1 つに | 1 ファイル = 1 フォント | 1 ファイルに連続ウェイト |
| 共有メカニズム | テーブル参照共有 | — | 軸補間 |
| Web 直接利用 | × | ○(実用は WOFF2 経由) | ○(WOFF2 + variations) |
| 主な配布例 | ヒラギノ / Source Han | Noto Sans Latin 等 | Roboto Flex, Inter |
| 分解 | fonttools で個別取り出し | 不要 | 不要 |
編集ツール
- fonttools(Python):
fonttools ttx -y N input.ttcで N 番目のフォントを TTX 化して取り出せる。pyftmergeで TTC 生成も可能。 - ttc2ttf(OSS):TTC から個別 TTF を抽出する単機能 CLI。
- otf2otc / otc2otf(AFDKO 同梱):Adobe 公式の OTC 作成・分解ツール。Source Han Sans の配布作業でも使われている。
- FontForge:「Generate Mac Family」「Generate TTC」メニューで GUI 操作可。
注意点・落とし穴
- Web では使えない:
@font-faceのsrcに TTC を書いてもブラウザは正しく扱えない。必ず分解してから WOFF2 化する。 - ライセンスのスコープ:TTC に含まれる各フォントごとに EULA がある場合がある。たとえばヒラギノは Apple の OS 同梱としては許諾されているが、抜き出して別配布するのは禁止。
- サブセット化が複雑:TTC の中の 1 フォントだけサブセット化したい場合、共有テーブルが破壊されないよう注意が必要。
pyftsubsetは単独 TTF 向けに設計されているので、まず分解する。 - 古いソフトの非対応:レガシーな DTP / 印刷システムが TTC を正しく解釈できず、最初のフォントしか見えないことがある。事前テスト必須。
- ファイル指定の曖昧さ:CSS や Word では「TTC のどの番号のフォントか」を厳密に指定できないことがあり、OS が選んだ最初のフォントが使われてしまう。
関連リンク
- フォント(親カテゴリ)
- ファイル拡張子とは(概論)
- TTF(.ttf)
- OTF(.otf)
- WOFF2(.woff2)
- PFB / PFM / Type 1(.pfb / .pfm)
- CSS(.css)
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15