最終更新日: 2026年7月28日

Inside the CBZ - Understanding the Anatomy of Digital Comics

TL;DR CBZ(Comic Book Zip)は、連続した画像ファイルのシリーズとオプションのメタデータを単一のDRMフリーのコミックコンテナにまとめた、標準的なZIPアーカイブにすぎません。広く使われているZIP形式に依存しているため、任意のアーカイブツールで開くことができ、リーダーは画像をアルファベット順に並べてページを順番に表示します。最新のCBZはしばしばリッチなライブラリデータのために ComicInfo.xml を含み、WebPやAVIFといった効率的な画像コーデックを使用し、さらにはインタラクティブな「拡張」コミックのためにHTMLを埋め込むことさえあります。


CBZとは正確には何ですか?

  • 名前: Comic Book Zip.cbz 拡張子を持つZIPファイルです。
  • MIMEタイプ: application/vnd.comicbook+zip(2012年にIANAに登録)。
  • 起源: ComicRackコミュニティ(2005‑2008)によって普及し、CBRやPDFといった独自フォーマットのオープンソース代替として広まりました。
  • クロスプラットフォーム: 任意のZIP対応ユーティリティ(7‑Zip、WinRAR、macOS Archive Utility、Linux の unzip)で開くことができます。内容を確認するために特別なソフトウェアは必要ありません。

実際には、CBZ は画像(JPEG、PNG、WebP、など)を圧縮して名前を変更しただけです。そのシンプルさが、PC、タブレット、スマートフォンでデジタルコミックの事実上の標準となっている理由です。


CBZの内部:ファイル構造

適切に作成された CBZ はフラットな階層構造に従います—余分な入れ子はありません—ので、リーダーはページを瞬時に見つけられます。以下は典型的なツリービューです:

MyComic.cbz
│
├─ 001.jpg          ← first page (front cover)
├─ 002.jpg
├─ 003.jpg
│   …
├─ 050.jpg          ← last page (back cover)
├─ ComicInfo.xml    ← optional rich metadata
└─ cover.jpg        ← optional thumbnail for library views

主要な要素

要素内容重要性
連続画像ファイルアルファベット順に並ぶように名前が付けられています(001.jpg, 002.jpg, …)すべてのリーダーで正しいページ順序が保証されます。
画像形式JPEG, PNG, GIF, WebP, AVIF, BMP, TIFFファイルサイズ、画質、デバイス互換性を決定します。
ComicInfo.xmlComicRack スキーマに従うオプションの XMLタイトル、作者、シリーズ、号数、言語、ページタイプフラグ、さらにはサムネイルデータを保存します。強力なライブラリ管理を可能にします。
表紙画像cover.jpg/cover.png をルートに配置多くのアプリで、ギャラリー内のコミックのサムネイルとして使用されます。
Unicode ファイル名最新の ZIP は UTF‑8 をサポートしています非ラテン文字のタイトルや国際的なコミックにとって不可欠です。
ZIP 中央ディレクトリアーカイブの末尾にあるインデックスリーダーはこれを読み取り、ページリストを素早く構築します;ここが破損すると、CBZ 全体が壊れる可能性があります。

アーカイブはすでに圧縮された画像のみを圧縮するため、最終サイズは通常、元のファイルの合計に数キロバイト程度の ZIP オーバーヘッド(< 5 %)を加えたものにすぎません。


メタデータマジック: ComicInfo.xml とページタイプフラグ

CBZ は余分なファイルがなくても完全に機能しますが、ComicInfo.xml を追加すると、単純な画像スタックが検索可能で豊富に記述されたコミックになります。以下は最小限の例です:

<?xml version="1.0" encoding="utf-8"?>
<ComicInfo>
  <Title>Starship Voyager</Title>
  <Series>Space Adventures</Series>
  <Number>12</Number>
  <Writer>Jane Doe</Writer>
  <Penciller>John Smith</Penciller>
  <Inker>Alex Lee</Inker>
  <Publisher>Galaxy Press</Publisher>
  <Year>2024</Year>
  <LanguageISO>en</LanguageISO>
  <PageCount>50</PageCount>
  <Pages>
    <Page Image="001.jpg" Type="FrontCover"/>
    <Page Image="002.jpg" Type="Story"/>
    <Page Image="025.jpg" Type="DoublePage"/>
    <Page Image="050.jpg" Type="BackCover"/>
  </Pages>
</ComicInfo>

なぜやるのか?

  • ライブラリツール(ComicRack、Calibre など)は、これらのフィールドに基づいて並べ替え、フィルタリング、検索が可能です。
  • ページタイプフラグFrontCoverBackCoverAdvertDeleted など)は、読者が広告を非表示にしたり、ストーリーページのみを表示したり、カスタムカバーサムネイルを表示したりできるようにします。
  • 将来への備え – Digital Comics Initiative が CBZ v2.0 仕様を策定するにつれ、マニフェストファイル(manifest.json)が必須になる可能性がありますが、既存のリーダーは引き続き ComicInfo.xml をサポートします。

CBZ ファイルの作成と変換(ステップバイステップ)

1. 画像を準備する

  • 各コミックページを画像としてエクスポートします。
  • 正しいソートを保証するために、ゼロ埋めされた番号(001.jpg002.jpg、…)で名前を付けます。
  • 対象読者に合ったコーデックを選択してください:最小サイズの JPEG、ロスレスアートの PNG、最新で高品質な圧縮の WebP/AVIF。

2. (オプション)メタデータを生成する

ComicTaggercbr2cbz、またはカスタムスクリプトのようなツールを使用すると、OCR と LLM を組み合わせて ComicInfo.xml を自動的に生成できます。このステップは任意ですが、大規模なライブラリには強く推奨されます。

3. 圧縮する

# Navigate to the folder containing the pages
cd /path/to/pages

# Create a CBZ without extra compression (JPEGs are already compressed)
zip -0 -r ../MyComic.cbz *.jpg *.png ComicInfo.xml cover.jpg
# -0 = store (no compression) – speeds up the process

アーカイバが自動で行わなかった場合は、生成された .zip.cbz に名前変更してください。

4. アーカイブを検証する

import zipfile, pathlib, sys

def list_pages(cbz_path: pathlib.Path):
    with zipfile.ZipFile(cbz_path, 'r') as z:
        # Guard against zip‑bombs (max 500 MB uncompressed)
        total = sum(z.getinfo(name).file_size for name in z.namelist())
        if total > 500 * 1024 * 1024:
            raise ValueError("Archive too large")
        images = [n for n in z.namelist()
                  if n.lower().endswith(('.jpg', '.jpeg', '.png', '.webp', '.avif'))]
        images.sort()  # natural alphabetical order
        return images

if __name__ == "__main__":
    cbz = pathlib.Path(sys.argv[1])
    for page in list_pages(cbz):
        print(page)

python list_pages.py MyComic.cbz を実行すると、ページファイル名のクリーンで順序付けされたリストが出力されます。

5. PDF に変換する(印刷用バージョンが必要な場合)

unzip -q MyComic.cbz -d tmp_pages
convert tmp_pages/*.jpg MyComic.pdf   # ImageMagick's `convert`
rm -r tmp_pages

トレンド、セキュリティ、そして CBZ の未来

トレンド何が起きているかCBZへの影響
Web‑first 配信出版社は事前署名付きURLを使用して、クラウドストレージ上にCBZをホストします。より高速で、DRMフリーのダウンロード;自己出版がより簡単に。
ハイブリッド/インタラクティブコミックアーカイブ内に index.html + アセットを追加すると、“拡張”コミック(音声、動画、HTML5)を作成します。ウェブビューをサポートするリーダーは、マルチメディアレイヤーを表示できます。
WebP と AVIF の採用~15 % の新リリース(2024)がこれらのコーデックを使用しています。品質を保ちつつ 30‑50 % のサイズ削減—モバイル帯域幅にとって重要です。
AI生成メタデータComicTagger のようなツールは、現在 OCR と LLM を使用して ComicInfo.xml を埋めます。検索性の向上、タグ付けの自動化、ライブラリの整理。
クラウド同期リーディングアプリChunky、Perfect Viewer、その他のアプリは Firebase/iCloud を介して進捗を同期します。スマートフォン、タブレット、デスクトップ間でシームレスに読書できます。
標準化の推進 (CBZ v2.0)DCI は必須の manifest.json、マルチ解像度アセット、そして <DRM> フラグを提案しています。これにより、CBZ は高 DPI デバイスに対してより堅牢になり、オプションの権利管理が可能になります。
セキュリティ意識Zip‑bomb 攻撃(小さな ZIP が展開されるとギガバイトになる)は実際の脅威です。リーダーは現在、抽出サイズの上限を強制し、安全なライブラリ(例:チェック機能付きの Python の zipfile)を使用しています。

開発者向けのセキュリティヒント

CBZ を抽出する前に、常に総展開サイズを 事前に 検証してください。Python のスニペットに示されたような簡単なチェックにより、悪意のあるアーカイブがディスク容量やメモリを使い果たすのを防げます。


リーダーが実際にCBZをレンダリングする方法

  1. アーカイブを開く – アプリは ZIP のセントラルディレクトリを読み取り、エントリのクイックインデックスを取得します。
  2. 画像ファイルをフィルタリング – 画像でないエントリ(ComicInfo.xml, __MACOSX/ など)は無視されます。
  3. アルファベット順にソート – ゼロ埋めされた名前付けのため、ソートされたリストは意図したページ順と一致します。
  4. メタデータを解析ComicInfo.xml が存在する場合、リーダーはページタイプフラグ、タイトル、作者などを抽出し、AdvertDeleted とマークされたページを非表示にすることがあります。
  5. ページをレンダリング – 画像はデコードされ(現代の e‑ink タブレットではハードウェアアクセラレーションされた JPEG/WebP デコーダが使用されることが多い)、1ページずつ表示され、スムーズなスクロールのために次の数ページが事前に取得されます。
  6. 状態を永続化 – 読み取り位置、ブックマーク、注釈はローカルに保存されるか、アプリに応じてクラウドと同期されます。

このパイプラインが、CBZ がネイティブ PDF と同等に高速で応答性が高く感じられる理由であり、なおかつ完全にオープンで編集可能であることを実現しています。


結論: CBZ の優雅さはそのシンプルさにあります—誰でも開くことができ、編集や再利用が可能な単なる ZIP です。オプションの ComicInfo.xml メタデータ、最新の画像コーデック、そして新興標準を組み合わせることで、DRM フリーでクロスプラットフォームという根本を保ちつつ、進化し続けています。