[{"data":1,"prerenderedAt":296},["ShallowReactive",2],{"content-/kdp-factory-vivliostyle-setup":3,"related-/kdp-factory-vivliostyle-setup":284,"all-pages-for-dir":294,"og-image-/kdp-factory-vivliostyle-setup":295},{"id":4,"title":5,"body":6,"category":266,"description":267,"extension":268,"meta":269,"navigation":221,"path":270,"project_name":271,"published":272,"publishedAt":273,"seo":274,"stem":275,"tags":276,"todo":282,"unpublished":272,"updatedAt":282,"__hash__":283},"pages/2026-06/2026-06-10/kdp-factory-vivliostyle-setup.md","Vivliostyle CLIでKindle出版環境を作る — kdp-factoryリポジトリ立ち上げの記録",{"type":7,"value":8,"toc":253},"minimark",[9,13,22,27,35,42,45,62,65,69,78,112,115,119,125,132,136,139,142,146,149,156,167,170,173,176,180,187,201,204,207,210,236,239],[10,11,5],"h1",{"id":12},"vivliostyle-cliでkindle出版環境を作る-kdp-factoryリポジトリ立ち上げの記録",[14,15,16,17,21],"p",{},"プログラミングコードでKindle出版する環境を、今日一日で立ち上げた。リポジトリ名は ",[18,19,20],"code",{},"kdp-factory","。Markdownで原稿を書き、CLIでEPUBを生成し、Kindle Previewer 3で確認するところまで一気通貫で動くようになった。",[23,24,26],"h2",{"id":25},"ストーリーブックみたいな名前のやつの正体探しから始まった","「ストーリーブックみたいな名前のやつ」の正体探しから始まった",[14,28,29,30,34],{},"発端は記憶の断片だった。「Kindleの出版に使えるオープンソースのライブラリがあったはず。確かストーリーブックみたいな名前の……」という曖昧な手がかりだけでClaude Codeに調査させたところ、最初に返ってきた答えは ",[31,32,33],"strong",{},"GitBook"," だった。たしかに名前は近い。でも開発停止済みで、後継はHonKitだという。",[14,36,37,38,41],{},"調査結果を眺めながら数分考えて、思い出した。私が探していたのは ",[31,39,40],{},"Vivliostyle CLI"," だ。日本発のCSS組版ツールチェーンで、VFM（Vivliostyle Flavored Markdown）で書いた原稿から EPUB と PDF を同時に出力できる。GitBookじゃなくてこっちを詳細に調べ直してもらい、調査ドキュメントを丸ごと書き換えてもらった。",[14,43,44],{},"調査で判明した要点はこうだった。",[46,47,48,52,55],"ul",{},[49,50,51],"li",{},"KDPに公式APIは存在しない。コードで自動化できるのはEPUB生成・検証まで",[49,53,54],{},"MOBI / kindlegen は完全廃止済み。今は EPUB 3 の直接アップロードが標準",[49,56,57,58,61],{},"Vivliostyle の EPUB 出力は CSS をそのまま素通しするので、Kindle 非対応の CSS（CSS変数・Flexbox・Grid・",[18,59,60],{},"@page","）を避けたEPUB専用テーマが要る",[14,63,64],{},"最後の1点が、午後の試行錯誤の伏線になった。",[23,66,68],{"id":67},"kdp-factory-リポジトリの立ち上げ","kdp-factory リポジトリの立ち上げ",[14,70,71,74,75,77],{},[18,72,73],{},"~/Git_repo/"," 直下に新規リポジトリ ",[18,76,20],{}," を作った。初期セットアップで指示したのは次の通り。",[46,79,80,87,93,100,106],{},[49,81,82,83,86],{},"パッケージマネージャは npm ではなく ",[31,84,85],{},"pnpm"," に切り替えてもらった",[49,88,89,92],{},[18,90,91],{},"pnpm build"," で PDF + EPUB の生成疎通を確認（PDF 142KB / EPUB 23KB）",[49,94,95,96,99],{},"ビルド中間生成物の ",[18,97,98],{},".vivliostyle/"," がコミットに混入したので、gitignoreに追加して直前コミットから除外してもらった",[49,101,102,105],{},[31,103,104],{},"CLAUDE.md"," を作成。リポジトリの目的、pnpmコマンド、今日実証したハマりどころ（configの相対パスがcwd基準で解決される件、Kindle向けEPUBのCSS制約）、執筆ルール（ルビ記法・表の画像化・ページ参照禁止）まで書き込んでもらった",[49,107,108,111],{},[31,109,110],{},"memo/ ディレクトリ","を作り、調査メモもそちらに保存",[14,113,114],{},"サンプルプロジェクトとして、会計学習書のコンテンツが1冊分入っている。これを実験台にして以降の検証を回した。",[23,116,118],{"id":117},"余白が大きすぎる-テーマのデフォルト値を疑う","余白が大きすぎる — テーマのデフォルト値を疑う",[14,120,121,124],{},[18,122,123],{},"pnpm preview"," でブラウザのライブプレビューを立ち上げて、最初に目についたのが余白だった。本文の周りに白い空間が広がりすぎていて、ページの半分くらいしか文字が載っていないように見える。「こんなもんですか？」とClaude Codeに聞いたら、使っていたテーマ（theme-techbook）のデフォルト余白の値を調べてくれた。",[14,126,127,128,131],{},"余白調整のCSSを追加してもらったが、ここで小さい事故が連発した。プレビューが作業ディレクトリを掴んだままでビルドが失敗し、13000番ポートの残骸プロセスの掃除が要った。さらにシェルに ",[18,129,130],{},"$"," を食われてコマンドが化け、クォートの修正で再実行。一つずつ潰して、最終的に余白調整は反映された。",[23,133,135],{"id":134},"kindle-previewer-3-のファイルロック事件","Kindle Previewer 3 のファイルロック事件",[14,137,138],{},"EPUBの実機確認用に Kindle Previewer 3 を使ったのだが、途中でアップデートのインストーラーが「ファイルを上書きできない」と止まった。スクリーンショットを貼って原因を調べさせたら、犯人はさっきEPUB確認用に起動したKindle Previewer本体だった。プロセス（PID 65304）が実行中のままファイルをロックしていた。プロセスを終了させ、Tempフォルダに残っていたインストーラーを再実行して、3.104.0へのアップデートを完了させた。",[14,140,141],{},"ついでに分かった仕様がもう一つ。Kindle PreviewerはGUIが起動中だと、CLIの変換を同時に走らせられない。CLIの品質チェックが失敗して初めて気づいた。",[23,143,145],{"id":144},"プレビューと実際の出力が違う-原因は再レンダリングではなかった","プレビューと実際の出力が違う — 原因は再レンダリングではなかった",[14,147,148],{},"新しいPreviewerでEPUBを開いて見比べたとき、手が止まった。ブラウザで見ていたVivliostyleのプレビューと、Kindle Previewerに映っている画面が、だいぶ違う。プレビューにあったサンプル章の表示が、Kindle側には入っていない。",[14,150,151,152,155],{},"最初は「アップデート後に再レンダリングしていないからでは」と疑った。でも調べさせると、再レンダリングの問題ではなく",[31,153,154],{},"2つのフォーマットの仕様の違い","で、これが正常な挙動だった。ブラウザプレビューはPDF用のレイアウトを描画していて、EPUBはリフロー型なので同じ見た目にはならない。",[14,157,158,159,162,163,166],{},"ここで引き下がらずに食い下がった。「自費出版している人たちは、EPUBでもっと見た目をコントロールできているはず」と。すると話が一段深くなった。「Kindleが解釈できない」のは今入っているPDF用テーマ（CSS変数だらけ）の話で、",[31,160,161],{},"Kindle自体は普通のCSSをかなり解釈できる","。見出しのデザイン、表の罫線・背景色、字下げ、フォント指定（埋め込みも可）、余白。きれいに出している自費出版本はまさにそこを作り込んでいる。今の見た目が素っ気なかったのは、単に",[31,164,165],{},"EPUB用のCSSが1行も当たっていなかった","からだった。",[14,168,169],{},"そこでEPUB用CSSを書いてもらい、Kindle Previewerで開き直した。見出しに装飾が入り、表に罫線が通った画面を見て、ようやく「これなら本になる」と思えた。",[23,171,172],{"id":172},"判明した内容をドキュメントに固定",[14,174,175],{},"「どこまでCSSを使っていいか、今回判明した内容をしっかりめに残しておいて」と指示して、EPUB用CSSのドキュメントを書かせた。doc-communicationスキルを参照させて構成を組み、READMEも今日の構成変更に合わせて更新してもらった。口頭のやり取りで分かったことは、その日のうちにリポジトリへ沈めておかないと消える。",[23,177,179],{"id":178},"既存サイトの章をkdp用に変換するテスト","既存サイトの章をKDP用に変換するテスト",[14,181,182,183,186],{},"環境ができたので、実戦テストとして ",[18,184,185],{},"eurekapu-nuxt4"," リポジトリにある会計学習ノートのイントロダクション章を、KDP用に変換してもらった。",[46,188,189,192,195],{},[49,190,191],{},"章内の図版7点をPNG化（フォントの描画崩れがないか1枚ずつ目視確認）",[49,193,194],{},"本文をVFM Markdownに変換して第1章として組み込み",[49,196,197,198],{},"Kindle変換チェックは",[31,199,200],{},"エラー0で通過",[14,202,203],{},"Kindle PreviewerとブラウザのPDFプレビューを並べて見比べたが、これは率直に良かった。Webページとして書いたコンテンツが、ほぼそのまま本の章になる手応えを得た。",[23,205,206],{"id":206},"明日への積み残し",[14,208,209],{},"フェーズ1のイントロダクションが入ったので、フェーズ2以降の基本論点・決算・帳簿体系・演習も全部入れていきたい。ただしソース側のコンテンツを今まさに修正中で、内容が変わる可能性がある。その前提込みで計画メモを残してもらった。",[46,211,214,224,230],{"className":212},[213],"contains-task-list",[49,215,218,223],{"className":216},[217],"task-list-item",[219,220],"input",{"disabled":221,"type":222},true,"checkbox"," フェーズ2〜5の全19章を順次変換する（進捗チェックリスト・行数・図版数の見積もり付きでメモ化済み）",[49,225,227,229],{"className":226},[217],[219,228],{"disabled":221,"type":222}," 着手前にソースの確定状況を確認し、章ごとにソースのコミットハッシュを記録する",[49,231,233,235],{"className":232},[217],[219,234],{"disabled":221,"type":222}," 演習章の特殊構造や、表のSVG化判断を個別に検討する",[23,237,238],{"id":238},"学び",[46,240,241,244,247,250],{},[49,242,243],{},"曖昧な記憶でツールを探すと、名前が似た別物（GitBook）を掴まされる。実物（Vivliostyle CLI）に当たるまで疑うこと",[49,245,246],{},"EPUBはリフロー型なので、CSS組版のPDFプレビューと同じ見た目にはならない。「プレビューと違う＝バグ」と決めつけない",[49,248,249],{},"「Kindleでは凝ったレイアウトは無理」は半分嘘。CSS変数やGridを避ければ、見出し・表・フォントはかなり制御できる。素っ気ない見た目の原因は、たいてい「EPUB用CSSを当てていない」だけ",[49,251,252],{},"GUIアプリ起動中のファイルロックとCLI排他は、Windowsでの定番の罠。インストーラーが止まったら、まず実行中プロセスを疑う",{"title":254,"searchDepth":255,"depth":255,"links":256},"",2,[257,258,259,260,261,262,263,264,265],{"id":25,"depth":255,"text":26},{"id":67,"depth":255,"text":68},{"id":117,"depth":255,"text":118},{"id":134,"depth":255,"text":135},{"id":144,"depth":255,"text":145},{"id":172,"depth":255,"text":172},{"id":178,"depth":255,"text":179},{"id":206,"depth":255,"text":206},{"id":238,"depth":255,"text":238},"dev","MarkdownからEPUBを生成してKindle出版する環境をVivliostyle CLIで構築した日記。GitBookとの勘違いから始まり、余白調整、Kindle Previewer 3でのプレビュー差異の原因究明、EPUB用CSSの検証までの試行錯誤を記録。","md",{},"/kdp-factory-vivliostyle-setup","misc-dev",false,"2026-06-10T00:00:00.000Z",{"title":5,"description":267},"2026-06/2026-06-10/kdp-factory-vivliostyle-setup",[277,278,279,280,281],"Kindle出版","Vivliostyle","EPUB","KDP","CSS組版",null,"8kGlUqFjCZfC3j6NjhSBWy9dVp9KJj_OBwDRtFGd4bU",[285],{"title":286,"description":287,"path":288,"tags":289,"publishedAt":273,"updatedAt":282},"2026年6月10日の開発日記 - 書籍を読んで終わらせない日。OCR取り込みから教材化・スキル化・Kindle出版まで","数学参考書のOCR取り込みとインタラクティブ教材化、専門書のスキル化、Vivliostyle CLIでのKindle出版環境立ち上げ、輸出統計のSSOT化、4プロジェクト一斉バグスキャンまで盛りだくさんの一日。","/2026-06-10-diary",[290,291,292,277,293],"日記","OCR","スキル化","インタラクティブ教材",[],"https://log.eurekapu.com/og/blog/kdp-factory-vivliostyle-setup.png?v=2026-06-10T00%3A00%3A00.000Z&title=Vivliostyle%20CLI%E3%81%A7Kindle%E5%87%BA%E7%89%88%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B%20%E2%80%94%20kdp-factory%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%81%AE%E8%A8%98%E9%8C%B2&author=Kei%20Komatsu&sig=1e1dc7466a620cce",1781213455937]