EPUB Maker v0.1.5リリース

PhysicalContainer.mtime APIの追加

EPUB Makerのv0.1.5をリリースした。

EPUBファイルというのはZIPアーカイブの一種なのだけど、そのZIPアーカイブ内のファイルの変更日時を編集する機能を付けた。

EPUBを扱う時は普通、コンテンツ内容にしか関心が向かないのでファイルの編集日時とかどうでもいいのだけど、実際に編集日時に関係あるユースケースが報告された:Is it possible to "Save as..."

内容に関してdeterministicにしたいということだから、報告者の言うようにCRCチェックサムでファイルの同一性を確認するのは筋がいいと思いつつ、実際にその環境を整えるのが面倒そうなのでやってしまえという感じ。

ZIPアーカイブ用のライブラリーで更新日時の変更ができるのだったらそれを案内しようかとも思ったのだけど、Zip/RubyArchive::ZipRubyZipもそういう編集には対応していないようだったので1、EPUB Makerの方にその機能を付けた。

とは言え上述の通り編集日時はEPUBとしては関心のない領域なので、PhysicalContainerという名前空間に押し込めることにした。

使い方:

EPUB::OCF::PhysicalCotainer.adapter = :ArchiveZip
EPUB::OCF::PhysicalCotainer.mtime = Time.new(2020, 1, 1)

これで、ファイル編集時にファイルの変更時刻が2020年1月1日0時0分0秒になる。

実際のユースケースを元に開発できるのは、嬉しい。

1

Zip/Rubyが内部で使っているlibzipにはそういう機能があるようなのだけど、Ruby側にそのAPIは公開されていない。