Media Do Tech Do Blog

株式会社メディアドゥのエンジニアによるブログです。

EPUBファイルを手で作ってみる。

f:id:nullcat:20190221191610p:plain

メディアドゥ でリードエンジニアを担当している沓名です。

今回はEPUBファイルを手で作る方法を通して、EPUBフォーマットについて解説します。

EPUBとは

W3Cが仕様策定を行なっている国際的な電子書籍のフォーマットです。元々はEPUB推進団体IDPFで仕様の策定が行われていましたが、2017年2月1日にW3C と正式統合*1されました。

EPUBファイルフォーマットを理解する

EPUBは一定のルールに従った構造をもつ、Zipアーカイブファイルです。EPUBファイル構造を簡単に絵にすると、次の通りとなります。今回は、EPUBバージョン3.0をベースにしています。

f:id:masashi_kutsuna:20190326134300p:plain
EPUBフォーマット略図

ファイルの配置位置、名称まで仕様で固定されたものと、任意でファイル名、配置位置を変更できるものとの2つに分かれます。一つずつ、その役割について見ていきましょう。

mimetype

ファイルのメディアタイプを指定するためのファイルです。電子書籍フォルダの直下に配置します。ファイル名は固定です。ファイル内容も以下の内容を記載します。

application/epub+zip

META-INF/container.xml

「container.xml」は名称固定のファイルです。META-INFフォルダ配下に配置することがルール付けされています。

<?xml version="1.0" ?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
  <rootfiles>
    <rootfile full-path="OEBPS/package.opf" media-type="application/oebps-package+xml" />
  </rootfiles>
</container>

rootfileタグにて、パッケージドキュメントのファイルパスを指定します。 ここでは、OEBPSフォルダ配下にある、「package.opf」ファイルをパッケージドキュメントとして指定します。

パッケージドキュメント

電子書籍そのものの情報を管理するためのファイルです。ファイルの配置先、名前は任意ですが、上記「container.xml」ファイルにてそのパスを指定する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<package unique-identifier="idName" version="3.0" xmlns="http://www.idpf.org/2007/opf" xml:lang="ja">
  <!-- 書籍情報 -->
  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
    <dc:identifier id="idName">urn:uuid:0fa99cb8-f735-4994-91fd-6fb3667582d0</dc:identifier>
    <dc:publisher>メディアドゥ </dc:publisher>
    <dc:title>はじめての電子書籍</dc:title>
    <dc:language>ja</dc:language>
    <meta property="dcterms:modified">2018-09-19T13:50:40Z</meta>
  </metadata>
  <manifest>
    <item id="nav" href="toc.xhtml" media-type="application/xhtml+xml" properties="nav" />
    <item id="main_xhtml" href="main.xhtml" media-type="application/xhtml+xml" />
  </manifest>
  <spine page-progression-direction="default">
    <itemref idref="nav" />
    <itemref idref="main_xhtml" />
  </spine>
 </package>

ナビゲーションドキュメント(目次)

ファイル名は任意で決められます。どのファイルがナビゲーションファイルかは上記パッケージドキュメントにて指定します。ここでは「toc.xhtml」としています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
<head>
  <title>目次</title>
</head>
<body>
  <nav epub:type="toc">
    <h1>目次</h1>
    <ol>
      <li><a href="main.xhtml">最初のページ</a></li>
    </ol>
  </nav>
</body>
</html>

書籍内容

書籍内容そのものを保持するファイルです。ファイル名は任意です。また、複数ファイルに分割することも可能です。サイズが大きくなるようなケースでは、複数ファイルに分割することが推奨されています。ファイルの表示順序については、パッケージドキュメント内にて定義できます。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
<head>
  <title>本文</title>
</head>
<body>
手作り電子書籍です。
</body>
</html>

EPUBを手作りしてみる

EPUBファイルの構造を理解したところで、上記の構造に合わせてそれぞれのファイルを配置します。あとは、そのファイル一式をZipアーカイブするだけとなります。

ただし、その前にもう一つだけ知っておかなければならないEPUBフォーマットの仕様として、「Zipファイルの先頭ファイルは非圧縮の状態のmimetypeファイルを含んでいる必要がある」 というものがあります。

そのため、Zip圧縮する際は以下の手順となります。

① mimetypeを圧縮率0 (非圧縮)でZipファイルにエントリ。

# zip -0 sample.epub mimetype

② その他ファイルを圧縮率最高(9)でZipファイルにエントリ。

# zip -9r sample.epub META-INF OEBPS

実際に出来上がったEPUBファイルをEPUBビューワーで開けるか確認しましょう。 次のように開ければ、無事にEPUBファイル作成完了です。

f:id:masashi_kutsuna:20190326140342p:plain

まとめ

今回はEPUBファイルの作成方法を通じて、簡単なEPUBフォーマットの説明を行いました。少しでもEPUBフォーマットに興味を持っていただければ幸いです。