0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オライリーEPUBがSend to Kindleで弾かれたとき、結局Calibreのラウンドトリップ変換だけが効いた

0
Last updated at Posted at 2026-05-10

TL;DR

O'Reilly Japan の EPUB を Send to Kindle に送ろうとしたが、何度やっても失敗した。

epubcheck をかけると OPF-096 が出ていたので、OPF の spine にある linear="no" を修正した。これで epubcheck はクリーンになった。

ただし、それでも Send to Kindle は通らなかった。

最終的に通ったのは、Calibre で

EPUB → MOBI → EPUB

とラウンドトリップ変換したファイルだった。

Amazon 側の変換器が具体的に何を嫌っていたのかは分からない。

環境

  • macOS / Homebrew
  • 対象: O'Reilly Japan の EPUB 3.0
    • 『ゼロから作るDeep Learning』
  • 使用ツール
    • epubcheck
    • Calibre の ebook-convert

起きたこと

O'Reilly Japan からダウンロードした EPUB を Send to Kindle にアップロードしても、処理が完了せず、Kindle ライブラリに反映されなかった。

最初はファイル名、ファイルサイズ、DRM あたりを疑った。

file oreilly-XXXX.epub
ls -la oreilly-XXXX.epub
unzip -l oreilly-XXXX.epub | grep -iE "encryption|rights|drm"

結果は以下。

  • EPUB ファイルとして認識されている
  • サイズは約 10MB で、Send to Kindle の上限内
  • DRM っぽいファイルも見当たらない

epubcheck で確認する

次に epubcheck を入れて検証した。

brew install epubcheck
epubcheck oreilly-XXXX.epub

すると、次のエラーが出た。

Validating using EPUB version 3.3 rules.
ERROR(OPF-096): .../OEBPS/deep-learning-from-scratch.opf(22,98):
  Non-linear content must be reachable, but found no hyperlink to "OEBPS/index.xhtml".

Check finished with errors
Messages: 0 fatals / 1 error / 0 warnings / 0 infos

OPF の spine に、次のような記述があった。

<itemref idref="deep-learning-from-scratch" linear="no"/>

linear="no" は非リニアコンテンツ扱いになる。
EPUB 3.3 の検証では、非リニアコンテンツも本文側からリンクで到達可能である必要があるらしい。

今回のファイルでは、その到達経路がないため OPF-096 になっていた。

OPF を直して再パッキングする

いったん EPUB を展開する。

mkdir -p /tmp/epub-fix/extracted
cd /tmp/epub-fix/extracted
unzip -q /path/to/oreilly-XXXX.epub

OPF を編集する。

- <itemref idref="deep-learning-from-scratch" linear="no"/>
+ <itemref idref="deep-learning-from-scratch"/>

その後、EPUB として再パッキングする。
EPUB では mimetype を先頭に、かつ無圧縮で置く必要がある。

zip -X0 /tmp/epub-fix/fixed.epub mimetype
zip -Xr9D /tmp/epub-fix/fixed.epub META-INF OEBPS

再度 epubcheck を実行する。

epubcheck /tmp/epub-fix/fixed.epub

結果はクリーンになった。

No errors or warnings detected.
0 fatals / 0 errors / 0 warnings / 0 infos

これで通るかと思ったが、Send to Kindle ではまだ失敗した。

Calibre でラウンドトリップ変換する

次に Calibre の ebook-convert を試した。

brew install --cask calibre

まず EPUB から MOBI に変換する。

ebook-convert fixed.epub intermediate.mobi --language=ja

その後、MOBI から EPUB に戻す。

ebook-convert intermediate.mobi roundtrip.epub --language=ja

この roundtrip.epub を Send to Kindle に送ったところ、ようやく通った。

ただし、このファイルを epubcheck にかけると、大量の RSC-005 が出る。

たとえば、

  • <img>alt 欠落
  • valign などの古い HTML 属性
  • EPUB としては厳密でない HTML

といった類のエラーが出る。

何が効いたのか

正確な原因は分からない。

ただ、MOBI を経由すると Calibre が内部的に構造を作り直すため、元の EPUB 3 固有の構造がかなりならされる。

たとえば、以下のような要素が影響していた可能性はある。

  • SVG titlepage
  • spine 周りの指定
  • CSS
  • EPUB 3 系の構造
  • Amazon 側の変換器との相性

ただし、どれが決定打だったかまでは切り分けていない。

分かったこと

epubcheck は EPUB としての妥当性を見るには有用だが、Send to Kindle の通過可否を保証するものではない。

Amazon 側の変換器は独自にチェックや変換をしているはずで、その詳細な失敗理由は外からは見えない。
そのため、epubcheck のエラーを全部潰しても、Kindle 側で弾かれることはある。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?