7zipでEPUB3を作るときに嵌った件

EPUB作成スクリプトを作る際にハマった事。

EPUBを作る際のZIPアーカイブ。

EPUBの仕様では、アーカイブの先頭に無圧縮のmimetypeを配置すること。
> 7z.exe a -mx1 epub.epub mimetype
> 7z.exe a -mx9 epub.epub OEBPS META-INF

以上のコマンドでアーカイブすると、一応EPUBビューアで見れるが…
チェッカーでチェックすると…

$ epubcheck epub.epub
ERROR(PKG-006): ./epub.epub/epub.epub(-1,-1): mimetypeファイルエントリが存在しないか、アーカイブの先頭以外の場所に存在しています.

のエラー。7zipのコマンドで中身を調べてみると
# 7z.exe l epub.epub

Date        Time    Attr         Size  Compressed   Name
------------------- ----- ------------ ------------ ------------------------
2019-06-15 11:13:13 D....            0            0 META-INF
2019-06-15 11:13:13 ....A          244          169 META-INF\container.xml
2019-06-15 11:13:13 ....A           20           20 mimetype
2019-06-15 11:13:13 D....            0            0 OEBPS
2019-06-15 11:13:13 ....A         7500         1174 OEBPS\content.opf
2019-06-15 11:13:13 D....            0            0 OEBPS\Images
2019-06-04 13:46:07 ....A       403417       400058 OEBPS\Images\01.jpg

コマンドで最初にアーカイブしても、先頭には来ない。アルファベット順に並んでいる様子。なので、mimetypeのファイル名を00mimetypeで作成。アーカイブ後にリネーム。

> 7z.exe a -mx1 epub.epub 00mimetype
> 7z.exe a -mx9 epub.epub OEBPS META-INF
> 7z.exe rn epub.epub 00mimetype mimetype

Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2019-06-15 11:13:13 ....A           20           20 mimetype
2019-06-15 11:13:13 D....            0            0 META-INF
2019-06-15 11:13:13 ....A          244          169 META-INF\container.xml
2019-06-15 11:13:13 D....            0            0 OEBPS
2019-06-15 11:13:13 ....A         7500         1131 OEBPS\content.opf
2019-06-15 11:13:13 D....            0            0 OEBPS\Images
2019-06-04 13:46:07 ....A       403417       398861 OEBPS\Images\01.jpg

これで、チェッカーにかけると

$ epubcheck epub.epub
EPUB version 3.0.1 のルールを使って検証します.
エラーも警告も検出されませんでした.

まぁ、アーカイブしたEPUBをSigilなどのエディタで開いて保存し直せば、このエラーは消えるんですけどね。