
出力前に旧パスが1件でも残れば止める
画像入りEPUBへリンク切れを持ち越さないための答えは、出力後に気付くのを待たず、出力前の旧パス検索を必須関門にすることです。今回の標本には意図的に古い画像参照を1件入れました。検索で1件を検出し、1件を修正し、同じ旧パスの再検索が0件になってからexportへ進みました。
一般的な予防手順は、実ファイルの存在、原稿内参照、出力計画、生成物内の登録を順に確認することです。どこか一つでも期待値と合わなければ、その時点で止めます。出力ボタンを押せることと、出力してよい状態であることは別です。
一章・画像2枚・故障1件の小さな標本を作る
標本は一章で、images/figure01.pngとimages/figure02.jpgの2枚を使います。開始時点では、figure01.pngは正しい参照、figure02.jpgは../old/figure02.jpgという古い参照にしてあります。期待値は、古い参照1件、修正後の古い参照0件、パッケージ画像2件、missing 0件です。
一章に絞る理由は、予防ゲートそのものを検証するためです。章数を増やすと、修正対象を見落としたのか、別章の問題なのかが分かりにくくなります。失敗時の戻り先は、ファイルがなければimagesフォルダ、古い参照があれば章原稿、計画が不正なら章選択、生成物で欠落すればexport設定です。
四つの関門を通過するまで生成しない
第一関門は実ファイルです。原稿が参照するfigure01.pngとfigure02.jpgが、期待するimagesフォルダにあることを確認します。第二関門は原稿検索です。既知の旧パス../old/figure02.jpgを検索し、0件でなければ生成を止めます。
第三関門はplanです。修正後の原稿について、選択ファイルと章数が期待値に一致し、valid trueであることを確認します。第四関門はexport後のinspectです。EPUB内部の画像数、missing、navigation、spineを見ます。前半三関門は不良を持ち込まないため、最後の関門は持ち込みがなかったことを確かめるためのものです。
旧パス1件を直し、逆検索0件を確認した
専用コピーを検索すると、../old/figure02.jpgはfileCount 1、occurrenceCount 1でした。該当箇所はchapters/01.mdの3行目です。そこだけを../images/figure02.jpgへ置換し、replacedCount 1を記録しました。
同じ旧パスを再検索するとfileCount 0、occurrenceCount 0でした。この逆検索が予防ゲートの合格条件です。新しいパスを入力したという操作記録だけでは、別の場所に旧パスが残っていないことを証明できません。0件を確認してからplanへ進み、fileCount 1、chapterCount 1、valid trueを得ました。
出力後は画像2件、missing 0件だった
生成物studio-392-260831.120000.epubは5,286 bytesで、SHA-256は7b7035で始まります。inspectはentryCount 11、spineItemCount 4、imageCount 2、missing 0、nav.xhtmlあり、NCXあり、各ナビゲーション項目1件、valid true、issues空でした。一章と2枚の画像という開始値に一致します。
別の共通基準走行は二章、画像1件、横書き、version 1.2で、spine 6、missing 0、nav.xhtmlとNCXあり、valid trueでした。これは通常出力の補助証拠です。旧パス1件を出力前に取り除いた証拠は、記事固有の検索、置換、逆検索です。
構造合格の外にある確認を残す
今回のpassedは、専用コピーで旧パスを0件にし、ローカル生成物の構造上の欠落が0件だったことを示します。Finderやクラウドストレージの変更を自動追跡した結果ではありません。画像の画質や構図、KDPなどの外部受理、実機や全閲覧アプリでの表示も確認していません。
画像の見た目に問題があれば元画像へ戻り、外部サービスで問題が出ればその診断へ戻ります。EPUBのmanifestやspineの役割はEPUB 3.3で定義されていますが、ローカル構造の検査を外部環境の保証へ広げないでください。
Rune Studioの公開機能は予防ゲートの一部として使う
Rune Studioには、Markdown原稿を選択し、EPUB 3を出力する公開機能があります。また、txt、text、md、markdown内の相対画像・リンク参照を更新する機能があり、../を含む参照を対象にできます。外部URLとページ内アンカーは更新対象外です。
今回確認したのは、専用コピーに対する明示的な検索・一箇所置換・plan・export・inspectです。製品機能があることと、すべてのファイル移動を自動検出したことは同じではありません。予防ゲートでは、検索結果の件数を人が確認してから次へ進みます。
結論:検出1、修正1、再検索0を出力条件にする
画像入りEPUBへ仕上げる前に、既知の旧パスを検索し、1件見つけたら1件だけ修正し、同じ検索が0件になるまでexportしない。この小さな規則が、リンク切れを生成物へ持ち越さない中心です。
今回の一章・画像2枚の標本では、旧パス1件を修正して0件にし、生成後は画像2件、missing 0件、valid trueを確認しました。故障したEPUBの原因診断ではなく、出力前に止めるための予防手順として使ってください。


