Tech Racho エンジニアの「?」を「!」に。
  • 開発

便利な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

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

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


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。