「ePub 2.0 ことはじめ」と題して、ePub 2.0 ドキュメントを作ってみます。どうぞ、よろしく。
はじめに
ePub 作成用のツールは色々出ていますが、「ePub 2.0 ことはじめ」ではエディターを使ってベタベタに ePub を作ります。これは、私が ePub 作成ツールが苦手なのと、ePub 2.0 の仕様について勉強したいためです。
なお、「ePub 2.0 ことはじめ」で作る ePub のソースコードは GitHub で公開しています。よろしければ、ご自由にお使い下さい。
シンプルな ePub を作る
まずは、ePub ドキュメント用のディレクトリー (epub-first-step) を作ります。一つの ePub ドキュメントに関するファイル (テキスト、画像 etc.) は全てこのディレクトリーの中に置きます。
$ mkdir epub-first-step
$ cd epub-first-step
ePub を作るのに最低限必要なファイルは次の 4 つです。
- mimetype
- META-INF/container.xml
- OEBPS/content.opf
- OEBPS/text.html
と、そのはずなのですが、iBooks で開こうとすると「本のフォーマットエラー この本はフォーマットが認識出来ないか無効なため開けません」というエラーが出て ePub ファイルが開けません。どうやら、目次ファイルも必要なようです。
mimetype
mimetype ファイルは、このドキュメントが ePub 形式であることを教えるためのファイルです。次の様にして作ります。
$ echo application/epub+zip > mimetype
META-INF/container.xml
META-INF というディレクトリーの中に container.xml というファイルを作ります。container.xml ファイルの目的は、どこに ePub ファイルの中身を説明したファイルがあるかをビューワー・アプリに教えることです。
まず、META-INF ディレクトリーを作ります。
$ mkdir META-INF
META-INF/container.xml の中身は次の様になります:
<?xml version="1.0"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="OEBPS/content.opf"
media-type="application/oebps-package+xml" />
</rootfiles>
</container>
rootfile 要素の full-path 属性に opf ファイルへのパスを書きます。ここでは「OEBPS/content.opf」を指定しました。
mimetype ファイルと META-INF ディレクトリー (とその中身) の名前は予約語です。変更してはいけません。
opf ファイル
opf ファイルには、ePub (正確には zip ファイル) が含んでいるファイルの一覧とその説明を書きます。opf ファイルのファイル名は「書名.opf」か「content.opf」としているものを多く見かけます。ここでは「OEBPS/content.opf」とします。
ディレクトリー名は OEBPS とします。OEBPS とは ePub 規格の前身に当たる電子書籍フォーマットです。仕様では「OEBPS」でなくとも良いはずですが、歴史的な経緯で、OEBPSフォルダじゃないとちゃんと読み込んでくれないePubリーダーも存在するらしい
ので念のために OEBPS にします。
さあ OEBPS ディレクトリーを作ります。ePub ドキュメントの中身は、このディレクトリーの中に置く様にします。
$ mkdir OEBPS
今回は、hello.xhtml というサンプル・テキストだけ置くことにしましょう。この場合 opf ファイルの中身は次の様になります:
<?xml version="1.0" encoding="UTF-8"?>
<package version="2.0" xmlns="http://www.idpf.org/2007/opf"
unique-identifier="BookId">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>ePub 2.0 ことはじめ</dc:title>
<dc:creator opf:role="aut">絳アト</dc:creator>
<dc:language>ja</dc:language>
<dc:identifier id="BookId">urn:uuid:akaato.com20110418</dc:identifier>
</metadata>
<manifest>
<item id="ncx" href="toc.ncx" media-type="text/xml" />
<item id="hello" href="hello.xhtml" media-type="application/xhtml+xml" />
</manifest>
<spine toc="ncx">
<itemref idref="hello" />
</spine>
</package>
metadata 要素の中に、書名・著者名・言語を入れます。重要なのは dc:identifier 要素で、世界で唯一の文字列にしなければなりません。本であれば ISBN を使うと良いでしょう。私は、自分のサイト名と作成年月日を ID にしました。
manifest 要素には、中に入っている全てのファイルとそのファイルの種類 (media-type) を指定します。今回は、XHTML ファイルと目次ファイルの二つです。item 要素には必ず id 属性を付けます。この id 属性は、次の spine 要素の中で使うことになります。
spine 要素では、ファイルを読む「順番」を上から順に指定してゆきます。今回はファイルが一つなので順番は関係ありませんが...。idref 属性で指定する ID は、先の manifest 要素の中の item 要素で書いた id 属性値です。
ncx ファイル
ncx ファイルは目次のためのファイルです。今回は「toc.ncx」というファイル名にしました。toc.ncx ファイルの中身は次の通りです:
<?xml version="1.0" encoding="UTF-8"?>
<ncx xmlns="http://www.daisy.org/x3986/2005/ncx/" version="2005-1">
<head>
<meta name="dtb:uid" content="akaato.com20110418"/>
<meta name="dtb:depth" content="1"/>
<meta name="dtb:tatlPageCount" content="0"/>
<meta name="dtb:maxPageNumber" content="0"/>
</head>
<docTitle>
<text>ePub 2.0 ことはじめ</text>
</docTitle>
<navMap>
<navPoint id="hello" playOrder="1">
<navLabel>
<text>サンプル</text>
</navLabel>
<content src="hello.xhtml"/>
</navPoint>
</navMap>
</ncx>
見た目の通りですが、1 つ注意点。<meta name="dtb:uid" content="akaato.com20110418"/>
で、content 属性の値には、content.opf ファイルの dc:identifier 属性の値から先頭の「urn:uuid:」を除いた文字列を入れます。
XHTML ファイル
本当にシンプルな XHTML ファイルを作りましょう。ファイル名は hello.xhtml です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 STRICT//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>こんにちは</title>
</head>
<body>
<p>こんにちは</p>
</body>
</html>
ePub の作成
ePub を作るファイルは全て用意できました。それでは、これらのファイルを固めて ePub ファイルにしましょう。
ePub は zip で固めます。注意点は 2 つ。1 つ目は圧縮しないこと。2 つ目は mimetype ファイルを zip アーカイブの先頭に置くことです。以下のコマンドを実行すると、上記の条件を満たした zip ファイルが出来上がります。
$ zip -0 ../epub-first-step.epub mimetype
$ zip -r ../epub-first-step.epub * -x mimetype
次回は、ePub ビューワーで作成した ePub ドキュメントを見てみましょう。
参考サイト