【要約】小説をビルドする — Markdown原稿からepubを自動生成し、「陳腐化する語」をlintで拾う [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
著者がシリーズもの(全8巻)の電子書籍を制作する際、版管理や情報の整合性維持に課題を抱えた。具体的には以下の問題に直面した。
- ・版管理の複雑化:AIとの共作により、どの版が最新か、どの指摘がどの版に向けたものかの判別が困難になった。
- ・情報の陳腐化:新刊発売に伴い、旧刊内の「続刊予定」や「既刊リスト」が事実と異なる「嘘」に変わる問題が発生した。
- ・組版の制約:PandocのHTML構造により、CSSのみでは実現できない改ページ制御が必要となった。
- ・手作業によるミス:epubやPDFを直接修正すると、次回のビルドで変更が消失するリスクがあった。
// Approach
著者は、ソフトウェア開発のビルドプロセスを小説制作に適用し、Markdownをソース、生成物を成果物とするパイプラインを構築した。以下のステップで解決を図っている。
- ・prepare.pyによる前処理:正規表現を用いた前付の差し替え、最新版の自動選択、画像のリサイズを実施した。
- ・PandocとWeasyPrintの併用:epub3生成にはPandocを、校正用PDF生成にはWeasyPrintを使用する構成とした。
- ・CSSの限界への対処:CSSで制御不能な改ページは、変換段階でHTMLタグを注入して解決した。
- ・カスタムLintの実装:時間の経過とともに事実と乖離する語句や、ASINの整合性を自動検算する仕組みを導入した。
// Result
著者が8冊(約32万字)のシリーズを効率的にリリースする基盤を確立した。具体的な成果は以下の通りである。
- ・検算による品質向上:人間が見落としがちな「冒頭の古い記述」をlintが検知し、情報の正確性を担保した。
- ・運用コストの低減:巻末の全巻案内更新など、一箇所の修正で全巻に反映可能な構造を実現した。
- ・「生成物は手で直さない」の徹底:上流の修正のみで一貫性を保つ、堅牢なワークフローを構築した。
Senior Engineer Insight
> 文書制作を「コードのビルド」として捉える思想は、ドキュメントのライフサイクル管理において極めて合理的だ。特に「陳腐化する語」をlintで弾くアプローチは、情報の鮮度を重視する大規模システムにおけるデータ整合性管理に通じるものがある。外部ツールに依存しすぎず、標準ライブラリと既存の変換エンジンを組み合わせた構成は、メンテナンスコストを低く抑えられており、実戦的である。