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
ここまで来れば、自由にチェック項目を削除・追加したりできますね。
あまりいじりすぎるべきではありませんが、簡易的に独自チェック項目を追加することも簡単にできそうです。
こんなバッドノウハウは不要になることを祈りつつ...