便利なepubcheckを使ってみよう(下) カスタマイズ編

epubcheckはとても便利ですが、実運用に載せようとすると、以下のようなことをしたくなることがあります。

  • mimetypeチェックなど、特定のビューアでは実害のないエラーを無視したい
  • ワーニングとエラーをコマンドラインで簡単に判別したい

エラーのあるEPUBファイルは、もちろんすぐに修正をすべきです。ワーニングも無視すべきではないでしょう。

しかし残念ながら、実際にはエラーのあるEPUBファイルは、商用・非商用問わずすでに広く流通してしまっています。特に多いのはmimetypeファイルの不正で、「deflatedになっている」「先頭にない」「内容に改行が含まれている」などがよく見受けられます。

一時期よりはましになりましたが、WebもHTML/CSSのエラーを放置する文化が蔓延っていますので、多少は仕方ないのかもしれません。

よく不思議に思うのですが、皆さん流通コンテンツまで手動で全部作ってるんでしょうか?ツールで自動生成したらまずあり得ないようなエラーもたまに見かけるんですが…

エラーがあるとはいえ内容が読めないわけではないので、これらのEPUBもOKと判定したいこともあるでしょう。
そこで、epubcheckを以下のように書き換えて、特定のエラーを無視するようにしてしまいましょう。
ついでに、エラーの際は終了コード1、ワーニングのみの場合は終了コード2を返すようにしてみます。

ビルド環境を整える

お手軽にEclipseを使うことにします。mavenが必要なので、Eclipseにmavenプラグインのm2eをインストールします。

Eclipse marketplaceのインストール
Eclipse classicなどEclipse Marketplaceが入っていない環境では、Install New Softwareで以下のURLを指定してMarketplaceを追加します。

http://download.eclipse.org/mpc/indigo/

m2eのインストール
Eclipse Marketplaceを開き、Findにm2eと入力してm2eをインストールします。色々ありますが、Maven Integration for Eclipse WTPにしておきます。

プロジェクト・ビルド設定

Eclipseにプロジェクトをインポート
ダウンロードページからダウンロードしたソースコードを展開しておきます。

Import > Maven > Existing Maven Projectsで、epubcheck-src-3.0を指定します。pom.xmlを選択してImportを完了させます。

maven設定
プロジェクトのRun As > Maven Buildで、以下のように設定します。

  • Goalsをpackageにする
  • maven.test.skipをtrueにする

ビルド設定

ビルドする
Runすれば、target/epubcheck-3.0.jarが生成されます。
まだカスタマイズしていないですが、この状態でビルドが通ること・生成されたjarファイルがepubcheckとして動作することを確認しておきましょう。

カスタマイズする

ワーニングだけだったら終了コードを1ではなく2にする
以下のファイルを編集すれば実現できます。
epubcheck-src-3.0/src/main/java/com/adobe/epubcheck/tool/Checker.java
173行目

                System.err.println(Messages.THERE_WERE_ERRORS);
-               return 1;
+               if (report.getErrorCount() > 0) {
+                       return 1;
+               } else {
+                       return 2;
+               }

一部のエラーを無視する
report.error()を呼び出している箇所を探し、適宜削除してやることで実現できます。
たとえば、mimetypeファイルのチェックは以下のあたりで行われています。
epubcheck-src-3.0/src/main/java/com/adobe/epubcheck/api/EpubCheck.java

ここまで来れば、自由にチェック項目を削除・追加したりできますね。
あまりいじりすぎるべきではありませんが、簡易的に独自チェック項目を追加することも簡単にできそうです。

こんなバッドノウハウは不要になることを祈りつつ…

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。Ruby on Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。軽度の資格マニアで、情報処理技術者試験(15区分 + 情報処理安全確保支援士試験)、技術士(情報工学部門)、CITP、Ruby Programmer Goldなどを保有。

babaの書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ