目次項目を一度で確認!KDPの縦書き、目次・表紙付きEPUB出力

KDP向けの縦書きEPUBは、生成できたかどうかだけでは確認不足です。右開きの読書順、目次の項目、表紙の役割を分けて検査し、パッケージ内部で確かめられない見た目は未確認として残します。今回の合成標本では、二章、ルビ二件、表紙一件を収録しました。

kdp 縦 書き の出力で先に決めるのは、どの章をどの順で読ませるかです。画面のプレビューを眺めてから章順を考えるのではなく、章ファイル、目次ラベル、右開き設定を原簿にします。

ゲート1:右開きが必要な本かを決める

日本語の縦書き小説を右から左へ読む想定なら、EPUB内では縦書きCSSに加えてページ進行方向が重要です。横書き本や左開きの資料を同じ設定へ寄せる理由はありません。この記事は現行Mac版で作る日本語縦書き二章に範囲を限定します。

検証では rune epub series set に --writing-mode vertical --language ja を渡しました。この命令で、少なくとも生成条件としてverticalを選んだことを記録できます。実装中のiPad機能やKDP側の表示設定は含めません。

ゲート2:二章を目次の原簿として固定する

入力は chapter-01.md と chapter-02.md です。rune epub select へこの順番で二ファイルを渡し、rune epub plan でも fileCount=2、chapterCount=2、各章の includeInTOC=true を確認しました。

章を追加・除外する判断はplanの前に行います。目次から隠した章があるのに、生成後の件数だけを二件へ合わせると、本文の読書順と目次の役割が食い違います。今回の除外章は0件です。

ゲート3:ルビを章ごとに入れて原稿を確定する

第一章には rune text ruby --file /private/tmp/rune-g2c3-studio-288-8nccnysp/chapter-01.md --match 漢字 --reading かんじ --json を実行し、第二章も対象ファイルだけを変えて同じ操作を行いました。両方とも終了コードは0です。

生成後のXHTMLにはruby要素が2件ありました。これはマークアップが収録されたという確認です。文字の横にルビが何ピクセルで見えたか、縦中横が読者アプリでどう表示されたかは測っていません。

ゲート4:表紙を本文画像から分ける

表紙は rune epub cover set --workspace /private/tmp/rune-g2c3-studio-288-8nccnysp --number 0 --path /private/tmp/rune-g2c3-studio-288-8nccnysp/cover.png --json で巻0へ指定しました。本文の先頭に画像を置く操作ではありません。

パッケージのmanifestには Images/cover.png が properties="cover-image" として一件入りました。画像参照も一件です。表紙の内容や解像度をこの1ピクセル標本で評価することはできませんが、cover-imageとして収録された役割は確認できます。

ゲート5:navとNCXを別々に読む

生成したEPUBのnavリンクは二件で、全角の STUDIO-288 Chapter 1 と 2 でした。NCXも二件ですが、ラベルは半角の STUDIO-288 Chapter 1 と 2 です。参照先はそれぞれp001.xhtmlとp002.xhtmlで対応します。

したがって nav_ncx_same_labels=false です。件数と参照先が合っていても、ラベル文字列は一致していません。この差を黙って「目次確認済み」とするのではなく、KDPへ渡す前に表記を統一するか、販売先の扱いを別途確認する必要があります。

ゲート6:右開きと縦書きCSSを内部で確認する

出力命令は rune epub export --workspace /private/tmp/rune-g2c3-studio-288-8nccnysp --number 0 --file .../chapter-01.md --file .../chapter-02.md --fixed-now 2026-09-03T12:00:00+09:00 --deterministic --json です。生成物 studio-288-260903.120000.epub のSHA-256は a86da423310950d61b5339eea2b9949eb04ecfe1c33c59b76d9ae5dcf6bb8643 でした。

内部検査では page_progression_direction=rtl、縦書きCSSあり、ruby 2件、spineはcover・title・nav・二章・colophonの6項目です。valid=trueで欠落の指摘はありません。この値で、右開きと縦書きに必要な内部構造を追えます。

一方、KDPプレビューで実際に右からめくれるか、ルビや2桁数字が意図どおり見えるかは今回のCLIでは判定していません。パッケージ内部の合格と読者画面の合格は別のゲートです。

ゲート7:パッケージ合格とKDP合格を分ける

ローカルの合格票には、二章が選択済み、rtl、縦書きCSS、ruby 2件、cover-image 1件、欠落0件を書けます。ただしnavとNCXのラベル差は未解決として残ります。valid=trueだけでこの差を消してはいけません。

KDP側では公式プレビューで章順、目次表示、表紙、ルビ、縦中横を確認します。その結果はローカル命令の実測とは別の証拠です。全リーダーでの同一表示や販売先受理をRune Studioが保証するとは書けません。

現行Mac版の縦書きとEPUB出力の範囲はRune Studioの商品ページで確認できます。まずこの七つのゲートを二章の複製で埋め、目次ラベルの差を処理してから本番原稿へ広げてください。