<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>デジタルコミック on File Format Blog</title>
    <link>https://blog.fileformat.com/ja/tag/%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF/</link>
    <description>Recent content in デジタルコミック on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <lastBuildDate>Tue, 28 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/ja/tag/%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>CBZの内部 - デジタルコミックの構造を理解する</title>
      <link>https://blog.fileformat.com/ja/ebook/inside-the-cbz-anatomy-of-digital-comics/</link>
      <pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/ja/ebook/inside-the-cbz-anatomy-of-digital-comics/</guid>
      <description>CBZコミックファイルが何か、そのシンプルなZIP構造、メタデータオプション、最新の画像フォーマットについて学びましょう—DRMなしであらゆるデバイスで開くことができます。</description>
      <content:encoded><![CDATA[<p><strong>最終更新日</strong>: 2026年7月28日</p>
<figure class="align-center ">
    <img loading="lazy" src="images/inside-the-cbz-anatomy-of-digital-comics.webp#center"
         alt="Inside the CBZ - Understanding the Anatomy of Digital Comics"/> 
</figure>

<p><strong>TL;DR</strong> CBZ（Comic Book Zip）は、連続した画像ファイルのシリーズとオプションのメタデータを単一のDRMフリーのコミックコンテナにまとめた、標準的なZIPアーカイブにすぎません。広く使われているZIP形式に依存しているため、任意のアーカイブツールで開くことができ、リーダーは画像をアルファベット順に並べてページを順番に表示します。最新のCBZはしばしばリッチなライブラリデータのために <code>ComicInfo.xml</code> を含み、WebPやAVIFといった効率的な画像コーデックを使用し、さらにはインタラクティブな「拡張」コミックのためにHTMLを埋め込むことさえあります。</p>
<hr>
<h2 id="cbzとは正確には何ですか">CBZとは正確には何ですか？</h2>
<ul>
<li><strong>名前</strong>: <em>Comic Book Zip</em> – <code>.cbz</code> 拡張子を持つZIPファイルです。</li>
<li><strong>MIMEタイプ</strong>: <code>application/vnd.comicbook+zip</code>（2012年にIANAに登録）。</li>
<li><strong>起源</strong>: ComicRackコミュニティ（2005‑2008）によって普及し、CBRやPDFといった独自フォーマットのオープンソース代替として広まりました。</li>
<li><strong>クロスプラットフォーム</strong>: 任意のZIP対応ユーティリティ（7‑Zip、WinRAR、macOS Archive Utility、Linux の <code>unzip</code>）で開くことができます。内容を確認するために特別なソフトウェアは必要ありません。</li>
</ul>
<p>実際には、CBZ は画像（JPEG、PNG、WebP、など）を圧縮して名前を変更しただけです。そのシンプルさが、PC、タブレット、スマートフォンでデジタルコミックの事実上の標準となっている理由です。</p>
<hr>
<h2 id="cbzの内部ファイル構造">CBZの内部：ファイル構造</h2>
<p>適切に作成された CBZ はフラットな階層構造に従います—余分な入れ子はありません—ので、リーダーはページを瞬時に見つけられます。以下は典型的なツリービューです：</p>
<pre tabindex="0"><code>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
</code></pre><h3 id="主要な要素">主要な要素</h3>
<table>
<thead>
<tr>
<th>要素</th>
<th>内容</th>
<th>重要性</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>連続画像ファイル</strong></td>
<td>アルファベット順に並ぶように名前が付けられています（<code>001.jpg</code>, <code>002.jpg</code>, …）</td>
<td>すべてのリーダーで正しいページ順序が保証されます。</td>
</tr>
<tr>
<td><strong>画像形式</strong></td>
<td>JPEG, PNG, GIF, WebP, AVIF, BMP, TIFF</td>
<td>ファイルサイズ、画質、デバイス互換性を決定します。</td>
</tr>
<tr>
<td><strong>ComicInfo.xml</strong></td>
<td>ComicRack スキーマに従うオプションの XML</td>
<td>タイトル、作者、シリーズ、号数、言語、ページタイプフラグ、さらにはサムネイルデータを保存します。強力なライブラリ管理を可能にします。</td>
</tr>
<tr>
<td><strong>表紙画像</strong></td>
<td><code>cover.jpg</code>/<code>cover.png</code> をルートに配置</td>
<td>多くのアプリで、ギャラリー内のコミックのサムネイルとして使用されます。</td>
</tr>
<tr>
<td><strong>Unicode ファイル名</strong></td>
<td>最新の ZIP は UTF‑8 をサポートしています</td>
<td>非ラテン文字のタイトルや国際的なコミックにとって不可欠です。</td>
</tr>
<tr>
<td><strong>ZIP 中央ディレクトリ</strong></td>
<td>アーカイブの末尾にあるインデックス</td>
<td>リーダーはこれを読み取り、ページリストを素早く構築します；ここが破損すると、CBZ 全体が壊れる可能性があります。</td>
</tr>
</tbody>
</table>
<p>アーカイブはすでに圧縮された画像のみを圧縮するため、最終サイズは通常、元のファイルの合計に数キロバイト程度の ZIP オーバーヘッド（&lt; 5 %）を加えたものにすぎません。</p>
<hr>
<h2 id="メタデータマジック-comicinfoxml-とページタイプフラグ">メタデータマジック: <code>ComicInfo.xml</code> とページタイプフラグ</h2>
<p>CBZ は余分なファイルがなくても完全に機能しますが、<code>ComicInfo.xml</code> を追加すると、単純な画像スタックが検索可能で豊富に記述されたコミックになります。以下は最小限の例です：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#75715e">&lt;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;ComicInfo&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Title&gt;</span>Starship Voyager<span style="color:#f92672">&lt;/Title&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Series&gt;</span>Space Adventures<span style="color:#f92672">&lt;/Series&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Number&gt;</span>12<span style="color:#f92672">&lt;/Number&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Writer&gt;</span>Jane Doe<span style="color:#f92672">&lt;/Writer&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Penciller&gt;</span>John Smith<span style="color:#f92672">&lt;/Penciller&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Inker&gt;</span>Alex Lee<span style="color:#f92672">&lt;/Inker&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Publisher&gt;</span>Galaxy Press<span style="color:#f92672">&lt;/Publisher&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Year&gt;</span>2024<span style="color:#f92672">&lt;/Year&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;LanguageISO&gt;</span>en<span style="color:#f92672">&lt;/LanguageISO&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;PageCount&gt;</span>50<span style="color:#f92672">&lt;/PageCount&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;Pages&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;Page</span> <span style="color:#a6e22e">Image=</span><span style="color:#e6db74">&#34;001.jpg&#34;</span> <span style="color:#a6e22e">Type=</span><span style="color:#e6db74">&#34;FrontCover&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;Page</span> <span style="color:#a6e22e">Image=</span><span style="color:#e6db74">&#34;002.jpg&#34;</span> <span style="color:#a6e22e">Type=</span><span style="color:#e6db74">&#34;Story&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;Page</span> <span style="color:#a6e22e">Image=</span><span style="color:#e6db74">&#34;025.jpg&#34;</span> <span style="color:#a6e22e">Type=</span><span style="color:#e6db74">&#34;DoublePage&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;Page</span> <span style="color:#a6e22e">Image=</span><span style="color:#e6db74">&#34;050.jpg&#34;</span> <span style="color:#a6e22e">Type=</span><span style="color:#e6db74">&#34;BackCover&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/Pages&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/ComicInfo&gt;</span>
</span></span></code></pre></div><p><strong>なぜやるのか？</strong></p>
<ul>
<li><strong>ライブラリツール</strong>（ComicRack、Calibre など）は、これらのフィールドに基づいて並べ替え、フィルタリング、検索が可能です。</li>
<li><strong>ページタイプフラグ</strong>（<code>FrontCover</code>、<code>BackCover</code>、<code>Advert</code>、<code>Deleted</code> など）は、読者が広告を非表示にしたり、ストーリーページのみを表示したり、カスタムカバーサムネイルを表示したりできるようにします。</li>
<li><strong>将来への備え</strong> – Digital Comics Initiative が CBZ v2.0 仕様を策定するにつれ、マニフェストファイル（<code>manifest.json</code>）が必須になる可能性がありますが、既存のリーダーは引き続き <code>ComicInfo.xml</code> をサポートします。</li>
</ul>
<hr>
<h2 id="cbz-ファイルの作成と変換ステップバイステップ">CBZ ファイルの作成と変換（ステップバイステップ）</h2>
<h3 id="1-画像を準備する">1. 画像を準備する</h3>
<ul>
<li>各コミックページを画像としてエクスポートします。</li>
<li>正しいソートを保証するために、ゼロ埋めされた番号（<code>001.jpg</code>、<code>002.jpg</code>、…）で名前を付けます。</li>
<li>対象読者に合ったコーデックを選択してください：最小サイズの JPEG、ロスレスアートの PNG、最新で高品質な圧縮の WebP/AVIF。</li>
</ul>
<h3 id="2-オプションメタデータを生成する">2. （オプション）メタデータを生成する</h3>
<p><strong>ComicTagger</strong>、<strong>cbr2cbz</strong>、またはカスタムスクリプトのようなツールを使用すると、OCR と LLM を組み合わせて <code>ComicInfo.xml</code> を自動的に生成できます。このステップは任意ですが、大規模なライブラリには強く推奨されます。</p>
<h3 id="3-圧縮する">3. 圧縮する</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Navigate to the folder containing the pages</span>
</span></span><span style="display:flex;"><span>cd /path/to/pages
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Create a CBZ without extra compression (JPEGs are already compressed)</span>
</span></span><span style="display:flex;"><span>zip -0 -r ../MyComic.cbz *.jpg *.png ComicInfo.xml cover.jpg
</span></span><span style="display:flex;"><span><span style="color:#75715e"># -0 = store (no compression) – speeds up the process</span>
</span></span></code></pre></div><p>アーカイバが自動で行わなかった場合は、生成された <code>.zip</code> を <code>.cbz</code> に名前変更してください。</p>
<h3 id="4-アーカイブを検証する">4. アーカイブを検証する</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> zipfile<span style="color:#f92672">,</span> pathlib<span style="color:#f92672">,</span> sys
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">list_pages</span>(cbz_path: pathlib<span style="color:#f92672">.</span>Path):
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">with</span> zipfile<span style="color:#f92672">.</span>ZipFile(cbz_path, <span style="color:#e6db74">&#39;r&#39;</span>) <span style="color:#66d9ef">as</span> z:
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Guard against zip‑bombs (max 500 MB uncompressed)</span>
</span></span><span style="display:flex;"><span>        total <span style="color:#f92672">=</span> sum(z<span style="color:#f92672">.</span>getinfo(name)<span style="color:#f92672">.</span>file_size <span style="color:#66d9ef">for</span> name <span style="color:#f92672">in</span> z<span style="color:#f92672">.</span>namelist())
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> total <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">500</span> <span style="color:#f92672">*</span> <span style="color:#ae81ff">1024</span> <span style="color:#f92672">*</span> <span style="color:#ae81ff">1024</span>:
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">raise</span> <span style="color:#a6e22e">ValueError</span>(<span style="color:#e6db74">&#34;Archive too large&#34;</span>)
</span></span><span style="display:flex;"><span>        images <span style="color:#f92672">=</span> [n <span style="color:#66d9ef">for</span> n <span style="color:#f92672">in</span> z<span style="color:#f92672">.</span>namelist()
</span></span><span style="display:flex;"><span>                  <span style="color:#66d9ef">if</span> n<span style="color:#f92672">.</span>lower()<span style="color:#f92672">.</span>endswith((<span style="color:#e6db74">&#39;.jpg&#39;</span>, <span style="color:#e6db74">&#39;.jpeg&#39;</span>, <span style="color:#e6db74">&#39;.png&#39;</span>, <span style="color:#e6db74">&#39;.webp&#39;</span>, <span style="color:#e6db74">&#39;.avif&#39;</span>))]
</span></span><span style="display:flex;"><span>        images<span style="color:#f92672">.</span>sort()  <span style="color:#75715e"># natural alphabetical order</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">return</span> images
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;__main__&#34;</span>:
</span></span><span style="display:flex;"><span>    cbz <span style="color:#f92672">=</span> pathlib<span style="color:#f92672">.</span>Path(sys<span style="color:#f92672">.</span>argv[<span style="color:#ae81ff">1</span>])
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">for</span> page <span style="color:#f92672">in</span> list_pages(cbz):
</span></span><span style="display:flex;"><span>        print(page)
</span></span></code></pre></div><p><code>python list_pages.py MyComic.cbz</code> を実行すると、ページファイル名のクリーンで順序付けされたリストが出力されます。</p>
<h3 id="5-pdf-に変換する印刷用バージョンが必要な場合">5. PDF に変換する（印刷用バージョンが必要な場合）</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>unzip -q MyComic.cbz -d tmp_pages
</span></span><span style="display:flex;"><span>convert tmp_pages/*.jpg MyComic.pdf   <span style="color:#75715e"># ImageMagick&#39;s `convert`</span>
</span></span><span style="display:flex;"><span>rm -r tmp_pages
</span></span></code></pre></div><hr>
<h2 id="トレンドセキュリティそして-cbz-の未来">トレンド、セキュリティ、そして CBZ の未来</h2>
<table>
<thead>
<tr>
<th>トレンド</th>
<th>何が起きているか</th>
<th>CBZへの影響</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Web‑first 配信</strong></td>
<td>出版社は事前署名付きURLを使用して、クラウドストレージ上にCBZをホストします。</td>
<td>より高速で、DRMフリーのダウンロード；自己出版がより簡単に。</td>
</tr>
<tr>
<td><strong>ハイブリッド/インタラクティブコミック</strong></td>
<td>アーカイブ内に <code>index.html</code> + アセットを追加すると、“拡張”コミック（音声、動画、HTML5）を作成します。</td>
<td>ウェブビューをサポートするリーダーは、マルチメディアレイヤーを表示できます。</td>
</tr>
<tr>
<td><strong>WebP と AVIF の採用</strong></td>
<td>~15 % の新リリース（2024）がこれらのコーデックを使用しています。</td>
<td>品質を保ちつつ 30‑50 % のサイズ削減—モバイル帯域幅にとって重要です。</td>
</tr>
<tr>
<td><strong>AI生成メタデータ</strong></td>
<td><em>ComicTagger</em> のようなツールは、現在 OCR と LLM を使用して <code>ComicInfo.xml</code> を埋めます。</td>
<td>検索性の向上、タグ付けの自動化、ライブラリの整理。</td>
</tr>
<tr>
<td><strong>クラウド同期リーディングアプリ</strong></td>
<td>Chunky、Perfect Viewer、その他のアプリは Firebase/iCloud を介して進捗を同期します。</td>
<td>スマートフォン、タブレット、デスクトップ間でシームレスに読書できます。</td>
</tr>
<tr>
<td><strong>標準化の推進 (CBZ v2.0)</strong></td>
<td>DCI は必須の <code>manifest.json</code>、マルチ解像度アセット、そして <code>&lt;DRM&gt;</code> フラグを提案しています。</td>
<td>これにより、CBZ は高 DPI デバイスに対してより堅牢になり、オプションの権利管理が可能になります。</td>
</tr>
<tr>
<td><strong>セキュリティ意識</strong></td>
<td>Zip‑bomb 攻撃（小さな ZIP が展開されるとギガバイトになる）は実際の脅威です。</td>
<td>リーダーは現在、抽出サイズの上限を強制し、安全なライブラリ（例：チェック機能付きの Python の <code>zipfile</code>）を使用しています。</td>
</tr>
</tbody>
</table>
<h3 id="開発者向けのセキュリティヒント">開発者向けのセキュリティヒント</h3>
<p>CBZ を抽出する前に、常に総展開サイズを <strong>事前に</strong> 検証してください。Python のスニペットに示されたような簡単なチェックにより、悪意のあるアーカイブがディスク容量やメモリを使い果たすのを防げます。</p>
<hr>
<h2 id="リーダーが実際にcbzをレンダリングする方法">リーダーが実際にCBZをレンダリングする方法</h2>
<ol>
<li><strong>アーカイブを開く</strong> – アプリは ZIP のセントラルディレクトリを読み取り、エントリのクイックインデックスを取得します。</li>
<li><strong>画像ファイルをフィルタリング</strong> – 画像でないエントリ（<code>ComicInfo.xml</code>, <code>__MACOSX/</code> など）は無視されます。</li>
<li><strong>アルファベット順にソート</strong> – ゼロ埋めされた名前付けのため、ソートされたリストは意図したページ順と一致します。</li>
<li><strong>メタデータを解析</strong> – <code>ComicInfo.xml</code> が存在する場合、リーダーはページタイプフラグ、タイトル、作者などを抽出し、<code>Advert</code> や <code>Deleted</code> とマークされたページを非表示にすることがあります。</li>
<li><strong>ページをレンダリング</strong> – 画像はデコードされ（現代の e‑ink タブレットではハードウェアアクセラレーションされた JPEG/WebP デコーダが使用されることが多い）、1ページずつ表示され、スムーズなスクロールのために次の数ページが事前に取得されます。</li>
<li><strong>状態を永続化</strong> – 読み取り位置、ブックマーク、注釈はローカルに保存されるか、アプリに応じてクラウドと同期されます。</li>
</ol>
<p>このパイプラインが、CBZ がネイティブ PDF と同等に高速で応答性が高く感じられる理由であり、なおかつ完全にオープンで編集可能であることを実現しています。</p>
<hr>
<p><strong>結論:</strong> CBZ の優雅さはそのシンプルさにあります—誰でも開くことができ、編集や再利用が可能な単なる ZIP です。オプションの <code>ComicInfo.xml</code> メタデータ、最新の画像コーデック、そして新興標準を組み合わせることで、DRM フリーでクロスプラットフォームという根本を保ちつつ、進化し続けています。</p>
<!-- raw HTML omitted -->
]]></content:encoded>
    </item>
    
  </channel>
</rss>
