KoboとAdobe RMSDK: なぜ有効なEPUBファイルを電子書籍リーダーで失敗するのか

モダンCSSが有効なEPUBファイル内でサイレントエラーを引き起こす可能性がある

業界標準の epubcheck バリデーションを通過するEPUBファイルであっても、Kobo電子書籍リーダーでは「破損」していると報告されることがあります。これは、KoboがAdobe独自の RMSDK (Reader Mobile Software Development Kit) レンダリングエンジンを使用しており、それがモダンなCSS仕様をサポートしていないために起こります。RMSDKが、CSS Level 4の min() 関数のように、認識できないCSSプロパティや関数に遭遇すると、サポートされていないスタイルを無視するのではなく、本全体をサイレントにレンダリングできなくなる場合があります。

原因の核心: Adobe RMSDKのレガシーCSSパーサー

epubcheck は、EPUBがInternational Digital Publishing Forum (IDPF) のルールに従って適切に構成されていることを保証しますが、すべてのプロプライエタリなレンダラーの特定の制限に対してCSSを検証するわけではありません。

記録されている事例では、epubcheck ルールセット 3.3 を通過した書籍が、複数のKoboデバイスで読み込みに失敗しました。原因は、たった一行のCSSでした:

.copyright img {
    max-width: min(150px, 30vw);
}

このモダンなCSS関数を静的な値 (max-width: 150px;) に置き換えることで、問題が解決しました。RMSDKエンジンのCSSパーサーは、事実上2013年頃の状態で止まっており、以下のサポートが欠如しています:

  • Flexbox
  • CSS Grid
  • 数学関数 ( min(), max(), clamp() など)
  • カスタムプロパティ (CSS変数)

「破損したファイル」という誤解

RMSDKがクラッシュを引き起こすサポートされていないCSSに遭遇すると、ユーザーインターフェースはしばしばファイルを「破損」していると報告します。これは誤解を招くエラーメッセージです。ファイルは構造的に健全であり、オープンな標準規格に従って有効ですが、レンダリングエンジンがスタイルシートを処理できないだけです。Adobe Digital Editions (ADE) — RMSDKの内部構造を共有している — は、特定の詳細なエラーログを提供せずにサイレントに失敗することが多いため、これらの問題をデバッグするには、スタイルシートを完全に無効化して問題を特定するといった、退屈な切り分け作業が必要になります。

業界の視点と回避策

出版社や開発者の間での技術的な議論は、オープンな標準規格と、プロプライエタリなDRM重視のエンジンとの間のシステム的な緊張関係を浮材にしています。

レンダリングの代替案とツール

  • KoReader: Koboデバイスにインストールして、デフォルトのAdobeベースのエンジンを回避するための、人気のあるオープンソースの代替レンダラーです。
  • Kepubify: 標準的なEPUBを .kepub.epub ファイルに変換するためのツールであり、一部のユーザーは、これがKoboデバイス上でより高度なレンダリングパスを利用できる可能性があると示唆しています。
  • Basic HTML/CSS: 一部の開発者は、すべてのレガシーデバイス間での互換性を最大化するために、(初期のウェブにおけるIE6をターゲットにするのと同様に)「最小公倍数」をターゲットにすることを推奨しています。

EPUB標準の現状

批判的な意見を持つ人々は、EPUBのメンテナンスがW3Cに移管されたことで、「リビング・スタンダード」(WHATWG HTMLのような)への依存が進んだことを指摘しています。これにより、ウェブ標準のターゲットが常に変化し続けている一方で、E-inkデバイスは、常に最新の状態に保たれるウェブブラウザのように頻繁には更新されないため、ファイルがウェブ標準に従って「有効」であっても、E-inkデバイスでは全く読み取れないというギャップが生じる可能性があります。

市場の変化

最近の報告によると、Adobe Digital Editions と RMSDK は Wipro Engineering に売却されました。さらに、一部のユーザーは、KoboがEUにおいて、電子書籍リーダーのソフトウェアを完全に書き換えるベータテストを行っていると報告しており、これが、ついにプラットフォームを、老朽化したRMSDKエンジンへの依存から脱却させるきっかけになるかもしれません。

Sources