【第26回】Kindle 単行本にしてみた話——画像 EPUB の落とし穴と、35% 投げ銭モデルの限界
議論力 EP01-09 を Kindle 単行本 2 巻として出版。EPUB 仕様違反、ファイルソート問題、KDP 内部変換エラー、KCC への乗り換え、画像 EPUB を半分テキスト化したら何が変わったか、35% 強制の経済合理性まで——web 無料公開作品を Kindle に出したらどうなるかの記録
← 前の記事: 【第25回】吹き出しの配置をエージェントに任せたら 1 イテで揃った第19回 で manginus に PDF と EPUB3 エクスポートが入った話を書いた。 第22回 で議論力第2部が EP09 で完結した話を書いた。
その続きとして、EP01-09 を Kindle 単行本 2 巻として出版した記録を残す。
結論を先に書くと、 web 無料公開作品の Kindle 単行本化は経済的にはほぼ投げ銭モデル にしかならない。Amazon.co.jp の 70% ロイヤリティは KDP セレクト加入が必須で、KDP セレクトの独占要件は web 公開と両立しない。35% で出すしかなく、想定売上は月数千円が天井になる。
それでも出版する意味はあるし、そこに至るまでに踏んだ落とし穴はそれなりに多かった。記録として残す。
なぜ Kindle 化したか
yatmita で全話無料公開している作品を、Kindle で有料販売する。これは普通に考えると 筋が悪い。読者は「web で読めるのになぜ Kindle で買うのか」と思うし、実際そう思って買わない人がほとんどだ。
それでも単行本化したかった理由は次の通り:
- 制作プロセス (3BIG AI ネーム会議システムが書いたシナリオ) を 併録した特典本 として位置付ける
- 「Kindle 出版作家」という肩書き・実績を作る
- 完成した作品を 保存版 として残したい読者に届ける
- 次作のマーケティング材料になる
経済合理性ではなく、 既に作ったものを読み物として整える の延長として位置付けた。
価格は第1巻 ¥499、第2巻 ¥599。両巻で ¥1,098。中堅の Kindle マンガ単行本相当の価格帯にした。
EPUB ビルドの落とし穴
manginus には EPUB3 固定レイアウトの自作エクスポータが入っている。第19回で書いた通り、PDF と並んで作った。
これを使って 273 ページの単行本 EPUB を吐き、KDP にアップロードしたら一瞬で Kindle 変換で内部エラー で死んだ。
仕様違反: spread 属性
epubcheck を回したら 540 件のエラー:
ERROR(RSC-005): attribute "spread" not allowed here;
expected attribute "id", "linear" or "properties"
EPUB 3 では <itemref> 直下に spread 属性は置けない。
<!-- NG: 自作エクスポータが吐いていた -->
<itemref idref="page01" spread="none"/>
<!-- OK -->
<itemref idref="page01" properties="rendition:spread-none"/><meta property="rendition:spread">none</meta> をパッケージレベルで一回宣言すれば個別指定は不要だが、明示的に書くなら properties 経由で。
natural sort 問題
仕様違反を直しても、Kindle Previewer で開いたら本編の途中で唐突に付録ページが挟まる症状が出た。原因は EPUB のページソート:
sorted(png_dir.glob("page_*.png"))
# → page_01, page_02, ..., page_09, page_10, page_100, page_101, ..., page_99lexicographic 順だと page_100.png が page_11.png の前に来る。spine がぐちゃぐちゃになる。100 ページ未満の EPUB では問題が顕在化しないが、273 ページの単行本だと一発で破綻する。
def _natural_key(p):
m = re.search(r"page_(\d+)\.png$", p.name)
return int(m.group(1)) if m else -1
png_files = sorted(png_dir.glob("page_*.png"), key=_natural_key)地味だが致命的なバグ。manginus 側に修正を入れた。
KDP の内部変換が通らない
epubcheck 0 errors の EPUB ができても、KDP の内部変換は通らない。エラーログには Kindle 変換で内部エラーが発生しました。3 営業日以内にメールで返信します としか書かれていない。
manginus の自作 EPUB は他社電子書籍ストア (BookWalker, Kobo, Apple Books 等) では多分通るが、KDP 専用の何かに引っかかっている。原因はこの記事の執筆時点では未特定で、manginus 側の課題(KCC 統合フラグの検討)として残してある。
今回は諦めて Kindle Comic Converter (KCC) に乗り換えた。マンガ専用の OSS で、KDP 互換 EPUB を確実に吐く。manginus が吐いた PNG 一式を入力にして、
python3 kcc-c2e.py \
-m -p K11 -f EPUB --nokepub --forcecolor \
-t "最後は議論力がモノをいう 第1巻 召喚編" \
--author "幸田蔵人" \
-o vol1.epub \
./png_dir/これで通った。
KCC で踏んだ追加の罠が 2 つ:
- デフォルトで grayscale 化される。カラーマンガなら
--forcecolor必須 - EPUB の
<dc:language>がen-US固定。KDP の本登録時に日本語を選んでいると「ファイルの言語が、本の設定時に選択された言語と一致しません」で弾かれる。後処理でjaに書き換える必要がある
ブラウザ拡張で KDP が壊れる
KDP の入稿フォームで 予期しないエラー が連発する時期があった。タイトルだけ入れて下書き保存してもエラー、別のブラウザでも再現する。
開発者ツールでログを開いたら原因が見えた:
inpage.js: MetaMask encountered an error setting the global Ethereum provider
/ja_JP/title-setup/kindle/new/static/js/10-...chunk.js: 404 ()
Refused to execute script ... MIME type 'text/html'
MetaMask 拡張が KDP の React アプリに inject していて、JS チャンクのロードが失敗している。シークレットウィンドウで開けば一発解決。
KDP のような重要フォームは シークレットで開く を最初から運用に組み込むのが正解。
35% 強制——KDP セレクトの独占要件
ここから本題のビジネス話。
KDP のロイヤリティは 35% と 70% から選べる。
| プラン | 価格帯 | ファイルサイズ手数料 | 独占要件 |
|---|---|---|---|
| 35% | ¥99-¥1,250 | なし | なし |
| 70% (Amazon.co.jp) | ¥250-¥1,250 | あり (¥1/MB) | KDP セレクト加入必須 |
70% を選ぼうとすると Amazon.co.jpで本を販売して 70% のロイヤリティを得るには、KDP セレクトに本を登録する必要があります と表示される。
KDP セレクトの独占要件は厳格だ。 自分のブログ・サイトでも電子配信は禁止。例外は 10% までのサンプル抜粋のみ。「ボーナス追加して別作品扱い」も Amazon 公式で明示的に NG とされている。
つまり yatmita で全話無料公開を続けながら 70% を取るのは不可能。35% で出すしかない。
| 巻 | 価格 | 取り分/冊 (35%) |
|---|---|---|
| 第1巻 召喚編 | ¥499 | ¥159 |
| 第2巻 国内編 | ¥599 | ¥191 |
| 2 巻買い計 | ¥1,098 | ¥350 |
正直に言って、 月数百冊売れて月数万円 が現実的な天井だ。yatmita 読者の何割が「web で読める作品の Kindle 版」を買うか、Amazon 検索からどれだけ拾えるか。AI 制作・議論力という niche ジャンルでは大きく望めない。
画像ベース EPUB の限界
ここから技術と UX の話。
manginus の export パイプラインは、コラム (縦書きテキスト) ノードも HTML/CSS で組んだあと Playwright でスクリーンショット → PNG → EPUB に詰める。漫画コマと同じ扱いで、AI 原案小説の付録部分まで画像化されていた。
273 ページの Vol 1 のうち、約 100 ページが付録の縦書き小説 (AI が書いたシナリオ全文) で、それが全部画像になっている。
これだと:
- 文字サイズ変更不可
- Kindle 内検索でヒットしない
- 読み上げ機能が読まない
- アクセシビリティスコアがゼロ
- 画像 1 ページ ≈ 300KB、テキストなら ≈ 5KB (60 倍)
「文字を画像にする」という選択は、読者にも作者にも損が出る。 読者は読みづらく、作者はファイルサイズ手数料で侵食される。
ハイブリッド EPUB の実装
ページのタイプを 2 つに分けて作り直した:
| ページタイプ | EPUB 内表現 |
|---|---|
| 漫画 (panel + speech bubble) | JPEG 画像、固定レイアウト |
| 付録 (column markdown) | XHTML テキスト、固定レイアウト + 縦書き CSS |
manginus のページ分類はノードタイプを見ればすぐ判定できる:
def classify_page(page):
for c in page.get("children", []):
if c.get("type") == "column":
return "text"
return "image"テキストページの XHTML は固定レイアウト EPUB の枠内で縦書き CSS を適用する。-epub-writing-mode プレフィックスも忘れずに:
def render_text_xhtml(markdown_src, meta, page_num, w, h):
body_html = markdown.markdown(markdown_src)
return f"""<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width={w}, height={h}"/>
<style>
.page-inner {{
writing-mode: vertical-rl;
-epub-writing-mode: vertical-rl;
width: {w}px; height: {h}px;
padding: 50px 40px;
box-sizing: border-box;
}}
</style>
</head>
<body>
<div class="page-inner">{body_html}</div>
</body>
</html>"""漫画ページは PNG → JPEG (1264x1680, q80) に圧縮。Kindle Paperwhite/Oasis 解像度に合わせる。
結果
| 巻 | 全画像版 | ハイブリッド版 | 削減 |
|---|---|---|---|
| Vol 1 (273 ページ) | 87 MB | 64 MB | -26% |
| Vol 2 (432 ページ) | 105 MB | 82 MB | -22% |
経済合理性——ハイブリッド化の意味は何か
ここで一つ重要な事実がある。
35% プランはファイルサイズ手数料がかからない。
つまり 35% で出すこのケースでは、ハイブリッド化による経済メリットは ゼロ だ。利益増は得られない。
仮に 70% で出せた場合の比較:
| 巻 | 全画像 (70%, fee 控除後) | ハイブリッド |
|---|---|---|
| Vol 1 ¥499×70%-fee | ¥262 | ¥285 (+¥23) |
| Vol 2 ¥599×70%-fee | ¥314 | ¥337 (+¥23) |
70% 帯では確かに +30% の利益増だが、KDP セレクト必須なので web 公開を続ける限り関係ない。
それでもハイブリッド化はやる価値がある。 読者 UX のために。
- 文字サイズ変更可
- 検索可、コピペ可
- 読み上げ対応
- アクセシビリティスコア向上
「読み物として読んでもらえる」のはテキスト形式だけだ。画像化された文字は、読者と作者の間にもう一枚ガラスを置く。
教訓
web で全話無料公開している作品の Kindle 単行本化は、ビジネス的にはほぼ「投げ銭モデル」になる。35% で出すしか道がなく、想定売上は月数千円-数万円が天井だ。
ただ、そう割り切ってしまうと別の景色が見える。
経済合理性ではなく:
- 「Kindle 出版作家」という肩書き・実績
- AI 共創マンガの完成形を販売物として残せる
- 次作のマーケティング材料になる
- 「作りきる経験」自体が技術投資
これらを目的にすると、Kindle 出版は十分意味がある。投げ銭収益 ¥350/2巻買い × 100 人で ¥35,000 出れば御の字、くらいの感覚だ。
それより EP10 以降をどうするか の方が大きい。今のまま web 公開を続けるなら 35% に張り付く。新作を Kindle 専属で出すなら 70% + KU 露出が取れるが、既存読者層との断絶コストがある。
このシリーズの 9 話は「実験タイトル」として残し、次作で戦略を分ける——というのが、この記録を書きながら考えている。
最後は議論力がモノをいう
公開された。
「web で読んで気に入った」「制作の裏側に興味がある」「保存版が欲しい」という方向けの特典本としてお届けします。
補遺: 使ったもの
- manginus (自作マンガ制作環境)
- Kindle Comic Converter (KCC)
- epubcheck
- Pillow (JPEG 化)
- Python markdown (テキストページレンダリング)
- KDP