EPUB: ファイル構成
EPUBの仕様書を上から読み解き明かしていくのは正直情報が膨大すぎて非効率。ファイル構成を分解して読み解いていくが理解しやすい。まずはディレクトリ構成を理解し必須ファイルを知ることで容易にEPUBが作れるようになるだろう。また作成する上でひつようなEPUBCheckツールを使った検証方法なども解説する。
ディレクトリ構成
まずはディレクトリ構成に触れて必須/任意ファイルを理解する。また、実際にファイルを作成することで理解も深まるので作成してみよう。下記サンプルでは細々とファイルがあるがいったん必須だけ押さえておけば問題ない。
Sample_EPUB
│ mimetype(※必須)
│
├─EPUB
│ │ about.xhtml
│ │ acknowledgements.xhtml
│ │ appen_A.xhtml
│ │ chapter01.xhtml
│ │ .....
│ │ chapter09.xhtml
│ │ introduction.xhtml
│ │ nav.xhtml(※必須)
│ │ package.opf(※必須)
│ │ preface.xhtml
│ │ profile.xhtml
│ │ style.css
│ │
│ ├─chapter10_image_files
│ │ ose.01_LU6x.JPG
│ │ ose.02_LU6x.JPG
│ │ ose.03_LU6x.JPG
│ │ .....
│ │ ose.50_LU6x.JPG
│ │
│ └─cover
│ cover.jpeg
│ cover.xhtml
│
└─META-INF(※必須)
container.xml(※必須)
必須ファイル
mimetype…このディレクトリがEPUBファイルである事を宣言するファイルEPUB/nav.xhtml…EPUBのもくじ情報が記載されたファイルEPUB/package.opf…メタデータ(著者情報/作成日/タイトル)、ファイルの登録、読む順序を記述したファイル(パッケージドキュメントとも言われる)META-INF/container.xml…package.opfファイルの場所を示すファイル
その他のEPUB/ディレクトリに格納されているファイルは任意となります。本文ページが1枚でも問題ありません。ただ、通常は各章ごとにわけて作成するのが一般的。
EPUBCheck
EPUBCheckとは、作成したファイルがEPUBへ適合しているかチェックするツールになります。またその他にもファイルの構文チェック、内部参照チェックを行いEPUBファイルを生成してくれます。
インストール方法は下記のページをご覧ください。
http://localhost/localhost8888/epub/5236/
各ファイルについて
必須ファイルを理解したところで、各ファイルの中身を見ていこうと思います。任意のファイル名もあれば、規定されているものもあるので各ファイルのルールや役割を解説します。
mimetype
mimetypeとはファイルがEPUBである事を宣言するファイルになります。拡張子はなしでルートディレクトリの最上位置く必要がありmimetypeという固定ファイル名になります。ファイルの中身はシンプルで下記を記述します。
application/epub+zip
参考
- 4.3.2 ZIP file requirements
- 4.3.3 OCF ZIP container media type identification
- I.2 The application/epub+zip media type
META-INF/container.xml
META-INF/container.xmlとはリーダーシステム(Kindleなど)へpackage.opfファイルの場所を示すファイルになります。このMETA-INF/container.xmlは名前の変更はできないので注意すること。
<?xml version="1.0"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="EPUB/package.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
参考
4.2.6.3.1 Container file (container.xml)
OEBPS / EPUB
このディレクトリにはEPUBコンテンツの中身を格納するファイルになります。package.opfやnav.xhtmlファイル、画像、本文ページ、CSS/JSファイルなどここにまとめます。このディレクトリ名は任意ですがよく使われるのがOEBPS / EPUBとなります。
格納されているファイル
| ファイル | 詳細 |
|---|---|
package.opf※必須 | メタデータ設定、ファイルの登録設定、本文の読む順序設定 |
nav.xhtml※必須 | 目次ページ設定 |
cover / images | 表紙や本文ページの画像 |
chapter1.xhtml … chapter10.xhtml | 各章の本文ページ |
style.css | スタイル変更 |
package.opf
このパッケージドキュメント(.opf)はEPUBのメタ情報の設定/EPUBで使用する全リソースの登録/本文の読む順番設定を行う中核ファイルになります。
- メタ情報…
<metadata>~</metadata> - 全リソースの登録…
<manifest>~</manifest> - 本文の読む順番…
<spine>~</spine>
<?xml version="1.0" encoding="UTF-8"?>
<package version="3.0" xml:lang="ja" xmlns="http://www.idpf.org/2007/opf" unique-identifier="pub-id">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:identifier id="pub-id">urn:uuid:758b6005-d75b-4a6e-af8d-e5e1e777ac57</dc:identifier>
<dc:title>サンプルEPUB</dc:title>
<dc:language>ja</dc:language>
<dc:creator>著者</dc:creator>
<meta property="dcterms:modified">2026-09-22T01:50:19Z</meta>
</metadata>
<manifest>
<item href="cover/cover.jpeg" media-type="image/jpeg" id="cover-image" properties="cover-image"/>
<item href="cover/cover.xhtml" media-type="application/xhtml+xml" id="cover-page"/>
<item href="about.xhtml" media-type="application/xhtml+xml" id="about"/>
<item href="style.css" media-type="text/css" id="css"/>
<item href="nav.xhtml" media-type="application/xhtml+xml" id="nav" properties="nav"/>
<item href="preface.xhtml" media-type="application/xhtml+xml" id="preface"/>
<item href="acknowledgements.xhtml" media-type="application/xhtml+xml" id="acknowledgements"/>
<item href="introduction.xhtml" media-type="application/xhtml+xml" id="introduction"/>
<item href="chapter2.xhtml" media-type="application/xhtml+xml" id="cahpter2"/>
<item href="chapter3.xhtml" media-type="application/xhtml+xml" id="cahpter3"/>
<item href="chapter4.xhtml" media-type="application/xhtml+xml" id="cahpter4"/>
<item href="chapter5.xhtml" media-type="application/xhtml+xml" id="cahpter5"/>
<item href="chapter6.xhtml" media-type="application/xhtml+xml" id="cahpter6"/>
<item href="chapter7.xhtml" media-type="application/xhtml+xml" id="cahpter7"/>
<item href="chapter8.xhtml" media-type="application/xhtml+xml" id="cahpter8"/>
<item href="chapter9.xhtml" media-type="application/xhtml+xml" id="cahpter9"/>
<item href="chapter10.xhtml" media-type="application/xhtml+xml" id="cahpter10"/>
<!-- chapter10 image files -->
<item href="chapter10_image_files/ose.01_LU6x.JPG" media-type="image/jpeg" id="chap10_image_01"/>
<item href="chapter10_image_files/ose.02_LU6x.JPG" media-type="image/jpeg" id="chap10_image_02"/>
<item href="chapter10_image_files/ose.03_LU6x.JPG" media-type="image/jpeg" id="chap10_image_03"/>
<item href="chapter10_image_files/ose.04_LU6x.JPG" media-type="image/jpeg" id="chap10_image_04"/>
.....
<item href="chapter10_image_files/ose.50_LU6x.JPG" media-type="image/jpeg" id="chap10_image_50"/>
<!-- chapter10 image files -->
<item href="chapter11.xhtml" media-type="application/xhtml+xml" id="cahpter11"/>
<item href="chapter12.xhtml" media-type="application/xhtml+xml" id="cahpter12"/>
<item href="chapter13.xhtml" media-type="application/xhtml+xml" id="cahpter13"/>
<item href="chapter14.xhtml" media-type="application/xhtml+xml" id="cahpter14"/>
<item href="chapter15.xhtml" media-type="application/xhtml+xml" id="cahpter15"/>
<item href="appen_A.xhtml" media-type="application/xhtml+xml" id="appenA"/>
<item href="profile.xhtml" media-type="application/xhtml+xml" id="profile"/>
</manifest>
<spine>
<itemref idref="cover-page"/>
<itemref idref="about"/>
<itemref idref="nav"/>
<itemref idref="preface"/>
<itemref idref="acknowledgements"/>
<itemref idref="introduction"/>
<itemref idref="cahpter2"/>
......
<itemref idref="cahpter15"/>
<itemref idref="appenA"/>
<itemref idref="profile"/>
</spine>
</package>
metadata
- dc:identifier…UUID, DOI or ISBNの登録(必須)
- dc:title…本のタイトル(必須)
- dc:language…言語(必須)
- dc:creator…著者
- meta property=”dcterms:modified”…最終更新日(必須)
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:identifier id="pub-id">urn:uuid:758b6005-d75b-4a6e-af8d-e5e1e777ac57</dc:identifier>
<dc:title>オープンソースソフトウェア - 彼らはいかにしてビジネススタンダードになったのか</dc:title>
<dc:language>ja</dc:language>
<dc:creator>Akira Kurahone</dc:creator>
<meta property="dcterms:modified">2026-09-22T01:50:19Z</meta>
</metadata>
manifest
manifestは登録するリソースをすべて記述します。ファイルの量が増えれば<item>数も増えてくる。また使用する画像もすべて記述する必要があるので注意。本文ページに画像パスを記載するだけでは登録できないのでこの<item>にすべての画像パスを記載する必要がある。
manifestは登録するリソースを記述するだけであって本の構成の順番などには一切関係ない。
<manifest>
<item href="cover/cover.jpeg" media-type="image/jpeg" id="cover-image" properties="cover-image"/>
<item href="cover/cover.xhtml" media-type="application/xhtml+xml" id="cover-page"/>
<item href="about.xhtml" media-type="application/xhtml+xml" id="about"/>
<item href="style.css" media-type="text/css" id="css"/>
<item href="nav.xhtml" media-type="application/xhtml+xml" id="nav" properties="nav"/>
<item href="preface.xhtml" media-type="application/xhtml+xml" id="preface"/>
<item href="acknowledgements.xhtml" media-type="application/xhtml+xml" id="acknowledgements"/>
<item href="introduction.xhtml" media-type="application/xhtml+xml" id="introduction"/>
<item href="chapter2.xhtml" media-type="application/xhtml+xml" id="cahpter2"/>
.....
<item href="chapter10.xhtml" media-type="application/xhtml+xml" id="cahpter10"/>
<!-- chapter10 image files -->
<item href="chapter10_image_files/ose.01_LU6x.JPG" media-type="image/jpeg" id="chap10_image_01"/>
.....
<item href="chapter10_image_files/ose.50_LU6x.JPG" media-type="image/jpeg" id="chap10_image_50"/>
<!-- chapter10 image files -->
<item href="chapter11.xhtml" media-type="application/xhtml+xml" id="cahpter11"/>
<item href="chapter12.xhtml" media-type="application/xhtml+xml" id="cahpter12"/>
<item href="chapter13.xhtml" media-type="application/xhtml+xml" id="cahpter13"/>
<item href="chapter14.xhtml" media-type="application/xhtml+xml" id="cahpter14"/>
<item href="chapter15.xhtml" media-type="application/xhtml+xml" id="cahpter15"/>
<item href="appen_A.xhtml" media-type="application/xhtml+xml" id="appenA"/>
<item href="profile.xhtml" media-type="application/xhtml+xml" id="profile"/>
</manifest>
spine
spineは登録したリソースの閲覧順番を設定します。下記の例だと「表紙」→「about」→「nav」…といった順番で表示されます。この後紹介するnav.xhtmlの順番と一致させる必要がある。
<spine>
<itemref idref="cover-page"/>
<itemref idref="about"/>
<itemref idref="nav"/>
<itemref idref="preface"/>
<itemref idref="acknowledgements"/>
<itemref idref="introduction"/>
<itemref idref="cahpter2"/>
<itemref idref="cahpter3"/>
<itemref idref="cahpter4"/>
<itemref idref="cahpter5"/>
<itemref idref="cahpter6"/>
<itemref idref="cahpter7"/>
<itemref idref="cahpter8"/>
<itemref idref="cahpter9"/>
<itemref idref="cahpter10"/>
<itemref idref="cahpter11"/>
<itemref idref="cahpter12"/>
<itemref idref="cahpter13"/>
<itemref idref="cahpter14"/>
<itemref idref="cahpter15"/>
<itemref idref="appenA"/>
<itemref idref="profile"/>
</spine>
参考
nav.xhtml
nav.xhtmlファイルはEPUBの目次を記述するファイルになる。リーダーシステムの目次はこのページを元に出力されている。ファイル名は自由であるがnav.xhtmlが一般的。目次の構造にいくつか制約があるので作成時は注意する必要がある。
- EPUBでは目次をnav要素で囲む必要がありリーダーシステムに目次を特定させるために
epub:type="toc"を記載する必要がる。 nav > ol要素の構造になりul要素は使えない。nav要素の直下には<h1>〜<h6>か<ol>のみ- さらに入れ子の
ol > liの構成になりli要素内にテキスト埋めることは不可。必ずaタグで囲む必要がある。ただ、さらに入れ子が発生する場合はspan要素を使うことが可能。 - 7.3 The nav element: restrictionsを参考にするとよい。
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="ja" lang="ja">
<head>
<title>サンプル</title>
</head>
<body>
<h1>サンプル</h1>
<nav epub:type="toc">
<h2>目次</h2>
<ol>
<li><a href="preface.xhtml">前書きのサンプル</a></li>
<li><a href="acknowledgements.xhtml">謝辞のサンプル</a></li>
<li><a href="introduction.xhtml">序章のサンプル</a>
<ol>
<li><a href="introduction.xhtml">序章の節サンプル</a></li>
</ol>
</li>
<li><a href="chapter2.xhtml">第2章のサンプルタイトル</a></li>
<li><a href="chapter3.xhtml">第3章のサンプルタイトル</a></li>
<li><a href="chapter4.xhtml">第4章のサンプルタイトル</a></li>
<li><a href="chapter5.xhtml">第5章のサンプルタイトル</a></li>
<li><a href="chapter6.xhtml">第6章のサンプルタイトル</a></li>
<li><a href="chapter7.xhtml">第7章のサンプルタイトル</a></li>
<li><a href="chapter8.xhtml">第8章のサンプルタイトル</a></li>
<li><a href="chapter9.xhtml">第9章のサンプルタイトル</a></li>
<li><a href="chapter10.xhtml">第10章のサンプルタイトル</a></li>
<li><a href="chapter11.xhtml">第11章のサンプルタイトル</a></li>
<li><a href="chapter12.xhtml">第12章のサンプルタイトル</a></li>
<li><a href="chapter13.xhtml">第13章のサンプルタイトル</a></li>
<li><a href="chapter14.xhtml">第14章のサンプルタイトル</a></li>
<li><a href="chapter15.xhtml">第15章のサンプルタイトル</a></li>
<li><a href="appen_A.xhtml">付録Aのサンプルタイトル</a></li>
<li><a href="profile.xhtml">プロフィールのサンプル</a></li>
</ol>
</nav>
</body>
</html>
cover / images
表紙や本文内で使用する画像を格納する。EPUBの場合、画像をpackage.opfに登録する必要があり、本文に表示する場合は各ページ(XHTML)にも画像パスを記載する。manifestのhrefはOPFからの相対パス、ページのsrcはそのXHTMLからの相対パスで書くため、パスの違いに注意が必要である。
また、表紙画像は専用のページを作成するのが一般的で下記のようにcover用のページを作成する。
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="ja" lang="ja">
<head>
<title>Cover</title>
</head>
<body>
<figure epub:type="cover">
<img src="cover.jpg"/>
</figure>
</body>
</html>
chapter1.xhtml(本文ページについて)
本文を記述するXHTMLファイル。章ごと、または節ごとにファイルを分けて作成する。作成したらmanifestとspineに登録する。基本HTMLのページと変わりないがXHTMLなので宣言文と/閉じタグに注意。
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xml:lang="ja" lang="ja">
<head>
<title>概略</title>
</head>
<body>
<h1>概略</h1>
<p>概略とは、、、</p>
<section>
<h2>プロローグ</h2>
<p>サンプル。サンプル。サンプル。</p>
<img src="chapter10_image_files/img.jpeg"/>
</section>
</body>
</html>
style.css
リーダーシステムによってある程度文字サイズの変更やフォントの変更、行間余白などの調整はできるのでテキストのみの場合、記載しなくても問題ないことが多い。
Webと同じように各ページにCSSを読み込ませる必要があるのと、package.opfに登録が必要。
index.xhtml
<link rel="stylesheet" type="text/css" href="style.css"/>
package.opf
<manifest>
....
<item href="style.css" media-type="text/css" id="epub-css"/>
...
</manifest>