EPUBジェネレーターの成否は、出力ボタンの前に決まる部分が大きいものです。epub generatorに渡す入力は、文字コード、改行、章順、画像参照を正規化してから固定します。生成後に文字化けを見つけても、パッケージ内のXHTMLを直接編集するのではなく、入力原稿へ戻ります。
生成器へ渡したUTF-8複製の結果
同一文のUTF-8、Shift_JIS、UTF-16LEを検査し、それぞれの検出形式と復号文字数を記録しました。生成器へはUTF-8・LFとして再読込みに通った複製を渡しました。結果のEPUBはvalid=true、spine6、nav3、NCX3で、OPFとnavのハッシュを永続保存しています。
「生成できたから文字も正しい」と判定するのが代表的な失敗です。ZIP構造が正常でも、XHTMLへ渡す前の復号が誤っていれば、パッケージは壊れた文面を正常に収録します。復旧時は不合格EPUBを保存して、入力複製の復号条件からやり直します。
完了条件は、入力ハッシュ、文字コード、末尾語、章数、パッケージ検査の五つが同じ試行番号でひも付くことです。生成器のローカル成功と、販売先の受理は別の審査です。
生成器へ渡す直前の入力台帳を凍結する
入力台帳には章ファイルの順序、文字コード、改行、文字数、末尾語、画像参照数を記録し、すべてのハッシュを取ります。凍結後に校正が入った場合は、同じ台帳を上書きせず試行番号を進めます。どの入力からどのEPUBができたか一対一で結べるため、生成物の不具合を再現できます。
ZIPとして開けることは最低条件にすぎません。本文XHTMLの確認語、navの章数、NCXの項目、OPFの言語と出版社を読み、入力台帳と照合します。文字化けがあれば生成物を直さず復号済み複製へ戻り、画像欠落なら参照表へ戻ります。販売先の検査はローカル合格後の別試行です。
失敗EPUBを原因別に保存する
生成に失敗したファイルをすぐ削除すると、入力を直した後の比較材料がなくなります。試行番号と失敗分類を名前へ付け、文字化け、画像欠落、目次不一致、書誌不一致を別フォルダへ保管します。各EPUBには対応する入力台帳のハッシュを添えます。
文字化け試行ではXHTMLの確認語を、画像試行ではmanifestと参照先を、目次試行ではnavとspineを読みます。原因に応じた一項目だけを元プロジェクトで直し、新しい試行を生成します。同時に複数を動かすと、何が改善したか分からなくなります。
合格試行も同じ方法で保存し、OPF、nav、NCXのハッシュを残します。販売先で別の問題が出た場合、ローカル合格物と同一ファイルかを最初に確認できます。
生成器の役割は正規化済み入力を再現可能なパッケージへ変えることです。入力台帳と生成物を一対一に結ぶ運用が、その役割を検証可能にします。
Generatorの入口で破損候補を検疫する
EPUB生成器は、受け取った文字列が正しいかを代わりに決めてくれません。STUDIO-239の五形式試験では、同文をそれぞれ正しい文字コードとして検出でき、UTF-8の作業タブも設定値UTF-8として再取得できました。この値を「Generatorが修復した」と読まず、投入可否の証憑に使います。
投入票には、認識した形式、再読込文字数、置換記号の件数、冒頭・中央・末尾の確認語を置きます。一つでも不一致があれば入力リストから外し、良い文字を似た文字へ自動置換しません。
失敗EPUBはログと一緒に旧SHAで凍結する
出力後に文字化けが見つかった場合、上書き再生成を繰り返すと原因が消えます。失敗EPUB、投入複製、生成ログの三つを同じ試行番号で残し、その後に受け入れ済みUTF-8複製から新名で生成します。新旧EPUBのXHTMLで固有名と末尾語を比較すれば、修正が入力側で効いたかを判定できます。
合格は、受け入れたUTF-8・LFのSHA、生成EPUBのSHA、解凍XHTMLの三地点が一本の記録で追えた状態です。販売先の受理やフォント置換は別の検査とします。
Generator投入の検疫を別担当へ渡す最終票
最終票の一行目にSTUDIO-239の入力パスとSHA-256、二行目に実行した画面名または命令、三行目に保存後の再読込値を記録します。このテーマで必要な比較列は「投入複製SHA、三確認語、失敗EPUB、再生成EPUB」です。どの値が入力、保存、生成物、表示のどの層に属するかを空欄にせず書きます。
Generator検疫が不合格のときは、返り先をその層に限定します。入力なら読み込み複製、保存なら別名の復旧ファイル、生成なら新しいEPUB、表示ならReader名付きの再試験です。失敗したファイルを上書きせず、復旧結果に別SHAを付けることで、修正者と査読者が同じ差分を見られます。
この最終票の判定原則は「壊れた入力を正常に梱包したパッケージを成功にしない」ことです。ローカルの構造検査が合格しても、販売先受理、全Readerの同一表示、未操作のUIは別の未検証欄に残します。次の担当者が一枚の票から実測済みと未実測を読み分けられることが完了条件です。


