TOOLPIPO LAB EPUB
EPUBの画像・目次・章順がおかしいとき、どこを確認する?
電子書籍の画像が出ない。目次を押しても目的の場所へ飛べない。章の順番がおかしい。そんなとき、EPUBの中では何が食い違っているのでしょうか。
公開日・検証日:2026年9月30日
結論
画像の指定、目次のリンク先、本文の順序指定は別の参照です。自作EPUBでそれぞれを変え、症状に対応する確認箇所を調べました。
検証概要
- 使用ツール
- EPUB構造・リンク整合性チェッカー
- 検証日
- 検証条件
- 自作ファイル・条件・実測結果は本文に掲載
- 再現用ファイル
- 検証ファイルをダウンロード
症状によって、確認する場所が違う
画像なら画像の指定、目次ならリンク先、章順なら本文の順番指定を確認します。
EPUBは、本文や画像、目次などのファイルを1つにまとめた電子書籍の形式です。「この画像を使う」「この章へ飛ぶ」「この順番で読む」という指定も、中に入っています。
| 困っていること | まず確認したいこと |
|---|---|
| 画像が出ない | 指定された画像が入っているか。名前や保存場所が合っているか。 |
| 目次から飛べない | リンク先の章があるか。その章の中に、移動先の目印があるか。 |
| 章の順番が違う | 本文を読む順番の指定が合っているか。目次の並びとは別。 |
| 本の構成を読み込めない | 本の組み立て方を書いた設定ファイルを、正しい場所から読み込めるか。 |
今回は、この指定をわざと変えた自作EPUBを調べました。読書アプリで表示を比較した実験ではなく、ファイルの中にある食い違いを確かめた結果です。
3章の短い電子書籍で試した
第1章・第2章・第3章の本文と、3章へ移動する目次、画像1枚を用意しました。この基準ファイルから、画像を消す、目次の行き先を変える、章の順番を変えるなど、10条件を作りました。
基準のEPUBでは、指定されたファイルや目次の行き先に不足は見つかりませんでした。以下は、そこから一部を変えた例です。
画像がない場合と、画像の名前が違う場合
まず、画像だけを削除しました。本文には「この画像を表示する」という指定が残っていますが、指定された画像はありません。検査でも、画像の不足を見つけられました。
別の例では、画像を残し、設定に書かれた名前だけを変えました。images/cover.pngという画像に対して、Images/Cover.pngを指定しています。
違うのは大文字と小文字だけですが、EPUBの中では同じ名前として扱えません。検査では「似た名前のファイルがある」という候補になりました。
つまり、画像を入れ直す前に、指定された名前と保存場所も確認する必要があります。
目次の行き先は「章」と「章の中の目印」
目次は、単に章の名前を並べたものではありません。押したときに移動する場所も指定しています。
今回の第2章リンクはchapter2.xhtml#section2です。前半のchapter2.xhtmlが章のファイル、後半の#section2が章の中の目印です。この目印をIDと呼びます。
章のファイル名を存在しない名前へ変えると、「行き先のファイルがない」と検出されました。一方、章は残して目印だけをsection99へ変えると、「ファイルはあるが、その目印がない」という別の結果になりました。
目次が正しい順番でも、本文の順番は違うことがある
目次の第1章→第2章→第3章はそのままにして、本文を読む順番だけを第1章→第3章→第2章へ変えました。
3章ともファイルはそろっています。そのため、検査でリンク切れは見つかりませんでした。それでも、指定された本文の順番は変わっています。
この順番指定をspineと呼びます。図のc1・c2・c3は、それぞれ第1章・第2章・第3章を指す名前です。
「リンク切れがない」は「意図した章順になっている」という意味ではありません。章順がおかしいときは、目次だけでなく本文の順番指定を見ます。
設定ファイルがあっても、違う場所を探すと読めない
EPUBには、使う本文や画像、読む順番をまとめた設定ファイルがあります。OPFと呼ばれるファイルです。
今回はそのファイルを残し、読み込む場所の指定だけを変えました。本当のファイルはEPUB/package.opfですが、存在しないEPUB/missing.opfを探すようにしています。
検査はそこで止まり、本の構成を読み取れませんでした。本文や画像が消えたのではなく、それらを案内する設定までたどれない状態です。
自分のEPUBは、まずファイルの食い違いを調べる
EPUB構造・リンク整合性チェッカーにEPUBを1件選ぶと、不足したファイルや目次の行き先、本文の順番指定をブラウザ内で調べられます。まず、困っている症状に関係する結果を見てください。
この検査は仕様全体の適合性確認ではなく、ファイルの食い違いを探すためのものです。問題が見つからなくても、読書アプリがその本に対応していないなど、別の理由で開けないことはあります。
設定ファイルの名前と、10条件の詳しい検証結果
使うファイル・本文順序・目次の3つを分ける
manifestは、使う本文・画像・CSS(見た目の指定)を登録する一覧です。spineは本文を読む順番、navはEPUB 3の目次などを持つ文書です。
container.xmlがOPFの場所を示し、OPFにmanifestとspineが書かれています。manifestはZIPの全ファイル一覧ではなく、表示に使うファイルの一覧です。
自作の合成EPUB(synthetic fixture)だけを使いました。基準のZIP内は9ファイル、manifestは6件、spineは3件、目次リンクは3件です。画像は8×8ピクセルの自作PNGで、実在の本やユーザーファイルは使っていません。
| 条件 | 変えた箇所 | 読み直した結果 |
|---|---|---|
| 正常なEPUB 3 | 基準ファイル。変更なし。 | 検査した参照に問題なし |
| OPFの参照先がない | container.xmlのfull-pathだけをEPUB/missing.opfへ変更。実際のpackage.opfは残す。 | containerの参照先不足 1件。OPFへ到達できず、Tool解析はここで停止 |
| 画像ファイルがない | manifestと本文の参照は残し、EPUB/images/cover.pngだけを削除。 | manifestの不足 1件+本文の画像参照不足 1件(同じPNG) |
| 本文順序のIDがない | spineのc2をmissing-chapterへ変更。章ファイルは残す。 | spineのID参照不足 1件 |
| 本文順序だけ1→3→2 | spineのみc1,c3,c2へ変更。navは1,2,3のまま。 | spineは c1 → c3 → c2。参照不足・リンク切れは0件 |
| 目次のファイルがない | navの第2章リンクだけmissing-chapter.xhtml#section2へ変更。 | 内部リンク先のファイル不足 1件 |
| 章はあるが行き先のIDがない | navの第2章リンクだけchapter2.xhtml#section99へ変更。 | ファイル不足0件、fragment不足 1件 |
| 画像パスの大文字小文字が違う | manifestの画像hrefだけImages/Cover.pngへ変更。実ファイルと本文srcはimages/cover.pngのまま。 | 完全一致なし、case mismatch候補 1件 |
| mimetypeを圧縮 | mimetypeは先頭・内容は正しいまま、ZIPの圧縮方法をDEFLATEへ変更。 | mimetypeの圧縮方法 8(DEFLATE)。確認候補 1件 |
| EPUB 2・NCXの比較 | OPF 2.0・NCX目次・XHTML 1.1で構成。EPUB 3のnavは含めない。 | NCX 1件。navなしをEPUB 3の不足と誤判定しなかった |
画像の「不足1件+1件」は、同じ画像を一覧と本文からそれぞれ指定しているためです。画像が2枚消えたという意味ではありません。OPFへたどれない例の解析件数0も、本文が空になったという意味ではありません。
まとめ方の決まりと、古いEPUBの違いも確認した
EPUBをZIPとしてまとめるときにも決まりがあります。形式を識別するmimetypeファイルは先頭に置き、圧縮せず、内容をapplication/epub+zipにします。今回はそのファイルだけを圧縮しました。基準の圧縮方法は0(非圧縮)、変更後は8(DEFLATE)でした。
古いEPUB 2の目次には、navではなくNCXという形式が使われます。比較用のEPUB 2では、NCXから3章へ移動する指定を確認でき、目次不足の検出は0件でした。EPUB 3と同じ目次ファイルがないだけでは、不足とは判断できません。
10条件を試せる合成EPUBのZIP
ZIPを展開し、1つの.epubを選んでください。どこを変えたかはREADME.txtに記載しています。故意に壊したファイルも含むため、読書用の本ではありません。
構成数・サイズ・SHA-256と測定方法
生成後のZIPからファイル数・格納順・圧縮方法を読み直し、XMLの記載とToolPipoの解析を照合しました。下の「OPFに記載」は、入口が壊れた例でも残っているOPFを直接読んだ数です。
| 条件 | ZIP内のファイル | OPFに記載:素材/本文順序 | 目次のリンク | XHTML/PNG |
|---|---|---|---|---|
| 正常なEPUB 3 | 9 | 6/3 | 3 | 4/1 |
| OPFの参照先がない | 9 | 6/3 | 3 | 4/1 |
| 画像ファイルがない | 8 | 6/3 | 3 | 4/0 |
| 本文順序のIDがない | 9 | 6/3 | 3 | 4/1 |
| 本文順序だけ1→3→2 | 9 | 6/3 | 3 | 4/1 |
| 目次のファイルがない | 9 | 6/3 | 3 | 4/1 |
| 章はあるが行き先のIDがない | 9 | 6/3 | 3 | 4/1 |
| 画像パスの大文字小文字が違う | 9 | 6/3 | 3 | 4/1 |
| mimetypeを圧縮 | 9 | 6/3 | 3 | 4/1 |
| EPUB 2・NCXの比較 | 9 | 6/3 | 3 | 3/1 |
配布ZIP:28,608バイト。SHA-256:8a37882f55219f34e0ef8889aece380f169abb0cf9f328b5a6fed101dec99380。
| EPUBファイル | バイト数 | SHA-256 |
|---|---|---|
01-valid-epub3.epub | 3017 | b6ea5475cdd30e0a5125b736c0065db476e1caf00eb0573079be7abb2828418e |
02-rootfile-missing.epub | 3019 | 159b9838854cbcc1c88bc23f1c602af3f17c2dcb6b0d955f402983b537dae7f8 |
03-manifest-missing.epub | 2830 | 6f6bf62c1dfc243eb4778b5dbebc09e464cec31227c20db973929c759740a39c |
04-spine-idref.epub | 3025 | 6878e21a62c7f9f30514cb10b7c0246ab5991240ef135aa59acf438f4abd109b |
05-spine-reordered.epub | 3017 | cd70a697cd60e432e556619bc66849f68bdfc3a430c1beb146f9b50b299664c0 |
06-nav-file-missing.epub | 3024 | 58f6d25b3fa54e327d18d45c63bd8be9e51052e63e92d56a8e2980719972d97e |
07-fragment-missing.epub | 3018 | 20db83c53ca2d2f219d9de5666ec3893ad4190fc713a0edf8e31f7ebf8626068 |
08-case-mismatch.epub | 3021 | d3eb23e06dac326ae8b14149042af09daeaebb9af0b7f1ef53d3341669cd0de7 |
09-mimetype-compressed.epub | 3019 | 2b6f9113098cfcb95d220ae253ca3ffba0fdd2d46662370c90b68bd62c892d8b |
10-valid-epub2.epub | 3160 | afafb7c3d651a87234e6229890faf9010a1a2e2e4d2cb4069b82c744d982bee8 |
検証範囲と一次資料
検証日:2026年9月30日。合成ファイルの構造・参照を測定しました。Javaが利用できず、EPUBCheckは未実行です。診断コード・ERROR・WARNING・USAGEの件数、終了コードは測定していません。リーダー間の表示比較、DRM付きEPUB、大型・複雑な本も対象外です。
仕様の公開状況も確認しました。EPUB 3.3はW3C Recommendation(2026年1月13日)、EPUB 3.4はCandidate Recommendation Draft(2026年8月3日)です。3.4は確定したRecommendationではありません。
EPUBCheck公式リポジトリでは5.4.0を最新のproduction-ready版と案内しています。今回の参照検査に問題がない例も、EPUBCheck合格・仕様全体への適合とは表現していません。
- W3C EPUB 3.3:package・manifest・spine
- W3C EPUB 3.3:ナビゲーション文書
- W3C EPUB 3.3:ZIPの格納条件
- EPUB 3.4の公開履歴
- EPUBCheck 5.4.0のリリース
制作方針はコンテンツ制作・計算検証方針をご覧ください。