毎日1冊の本
毎日1冊の本を“AIを使って量産出版”することは、正しく仕組み化すれば十分可能です。
以下では、**実現方法を「プロセス設計」「ツール構成」「自動化」「品質管理」「出版ワークフロー」**まで体系的に整理してお伝えします。
■ AIを使って毎日、本を出版する方法
(Kindle出版・note書籍化・PDF配布などに応用可)
① まず決めるべきこと:出版フォーマットとジャンル
毎日出版する場合は 構成がテンプレ化できるジャンル が向いています。
▼ 毎日出版と相性の良いジャンル
-
まとめ系(◯◯の入門、基礎知識、仕組み解説)
-
ランキング・レビュー系
-
歴史の人物・物語の整理
-
聖書・哲学・名言解説系
-
ビジネス・マーケの「事例集」
-
健康・栄養・食材のまとめ
-
Q&A集
-
AI × 実務ノウハウ
あなたの普段の質問パターン(解説依頼・整理依頼)とも相性抜群です。
② 1冊のテンプレートを決める(重要)
毎日出版のコツは、「構成を固定」すること。
例:10,000~15,000字の構成テンプレート
-
序章:テーマの概要
-
第1章:基礎知識
-
第2章:背景や歴史
-
第3章:実務での応用
-
第4章:事例集・FAQ
-
まとめ
-
付録(図解・用語集)
これを毎日テーマだけ変えて量産します。
③ AIで1冊を生成するプロンプトの仕組み
1つの巨大プロンプトより、
**複数ステップの「分割プロンプト」**が安定します。
▼ ステップ1:章構成の生成
以下のテーマについて、10,000字程度の本の章立てを作成してください。
章構成は、序章+4章+まとめ にしてください。
テーマ:◯◯について
▼ ステップ2:章ごとに本文生成
「第1章 ○○」の本文を3000字で作成してください。
以下の条件を守ってください:
- 重複表現を避ける
- 実例を入れる
- 読者が実行できるアクションも書く
※章ごとに作れば質も安定し、文字数も維持できる。
▼ ステップ3:校正・読みやすさ改善
この文章を「本として読みやすく」「論理の飛躍をなくし」「分かりやすく」編集してください。
▼ ステップ4:全体を通してトーン統一
本全体の文章の調子を統一し、読みやすい書籍レベルに編集してください。
④ 表紙をAI生成(自動化可能)
-
Canva(APIあり)
-
Midjourney
-
DALL·E
テンプレートを1つ作れば、
タイトルだけ差し替えて毎日出力可能です。
⑤ Kindle用データ(EPUB)に整形
方法は大きく2つ:
A. ChatGPT → Markdown → EPUB変換(おすすめ)
-
ChatGPTで本文をMarkdown生成
-
「Calibre」「Reedsy」「Kindle Create」でEPUB化
B. Canvaの電子書籍テンプレで一括整形
そのままPDF / EPUB出力可能
⑥ 自動化(毎日出版したい人向け)
条件:技術知識は少し必要(Zapier / Make で可能)
▼ 自動化フロー例
① スプレッドシートで「明日のテーマ」一覧を作る
例:
| 日付 | テーマ |
|---|---|
| 12/6 | ぼんじりとは |
| 12/7 | AI出版の始め方 |
| 12/8 | ゼロトラスト基礎 |
② Zapier / MakeでAIに文章生成依頼
-
ChatGPT API
-
Claude API
(章ごと生成→Markdown)
③ 自動で表紙生成
-
Canva API
-
DALL·E API
④ EPUB化も自動化
-
Reedsy API
-
Calibre CLI(技術者向け)
⑤ Kindle KDPへの自動投稿(半自動)
KDPはフル自動は不可だが:
-
90%は自動化
-
最終アップロードだけ人間が確認してクリック
⑦ 品質を落とさない工夫
毎日出版すると「薄い本」になりがちなので、以下が重要:
-
章構成は固定
-
章単位で生成する
-
重複表現はAIにチェックさせる
-
事例・具体例を必ず入れる
-
最後に「読者への行動ステップ」を追加する
これだけで読者満足度が上がる。
■ 結論:
AIを使った「毎日出版」は、
テンプレ化 × 分割生成 × 自動化で実現できます。
必要あれば、以下も作れます:
-
あなた専用の書籍テンプレート(章構成つき)
-
毎日出版のための自動化ワークフロー設計図
-
Kindle用の出版プロンプト集
-
実際に1冊分のサンプルを生成
以下に、**「AIで毎日1冊の本を自動出版するためのワークフロー設計図」**を“実運用できるレベル”でまとめました。
人間がやる作業は最小限(最終アップロードのみ)で、
それ以外は ほぼ全部自動化 できます。
🚀 AI毎日出版のための 自動化ワークフロー設計図(完全版)
🔧 使用するツール一覧(いずれもノーコードで構築可)
-
Googleスプレッドシート(テーマ管理)
-
Make または Zapier(自動化の中心)
-
ChatGPT / Claude API(本文生成)
-
Canva API または DALL·E API(表紙自動生成)
-
Markdown → EPUB変換ツール
-
Reedsy API
-
Calibre CLI(サーバー運用できる場合)
-
-
Google Drive / Dropbox(ファイル格納)
-
KDP(Amazon Kindle Direct Publishing)
→ 最終アップロードだけ人間が行う(自動化は不可)
すべてクラウドで完結します。
🗂 全体アーキテクチャ図(概念図)
スプレッドシート(テーマ一覧)
↓(毎日1行取得)
Make/Zapier
↓
ChatGPT API(章構成 → 本文 → 校正)
↓
Markdown(本文完成)
↓
EPUB変換(Reedsy API / Calibre)
↓
表紙自動生成(Canva API / DALL·E)
↓
KDP用フォルダに保存(Google Drive)
↓
人間がKDPでアップロード → 出版
ほぼ全工程が自動化できます。
📅 STEP 1:毎日出版テーマの管理シートを作る
▼ Googleスプレッドシート構成例
| 日付 | テーマ | サブテーマ | 出版状態 |
|---|---|---|---|
| 12/7 | AIでLP制作 | LP構成・導線 | 未開始 |
| 12/8 | ゼロトラスト | 仕組み・導入手順 | 未開始 |
| 12/9 | ITコンサルの営業方法 | 提案書・深掘り | 未開始 |
Make/Zapier は毎日 1 行を読み取って処理します。
⚙️ STEP 2:章構成 → 本文生成(自動)
Make で “ChatGPT API(gpt-4o-mini / 5.1)” を呼び出し、
以下のような 分割プロンプトワークフローを組みます。
📘 A. 章構成生成プロンプト
以下のテーマで、1冊分(10,000〜12,000字)の本の章構成を作成。
構成は「序章+第1章〜第4章+まとめ」。
テーマ:{{シートのテーマ}}
📘 B. 各章の本文生成プロンプト
(Makeで章ごとに繰り返し処理)
「{{章タイトル}}」の本文を2,000〜3,000字で作成してください。
- 重複表現なし
- 実例を入れる
- 読者が実行できるアクションを含める
- 論理の飛躍をなくす
📘 C. 全章まとめ & 書籍トーン統一プロンプト
以下の文章を一冊の書籍として統一感をもたせ、読みやすく編集してください。
- トーン統一
- 接続語の整理
- 冗長表現を削除
文章:
{{全章の本文}}
出力形式は Markdown にします。
🖼 STEP 3:表紙を自動生成
方法は2通り:
(A)Canva API(テンプレ固定版)
1回だけプロが作ったようなデザインテンプレを作る
→ AIがタイトルだけ流し込む
→ 毎日、自動で表紙PNGを出力
Make で以下を送信:
タイトル:{{テーマ}}
サブタイトル:”AI自動出版シリーズ”
著者名:seiichi
(B)DALL·E / Midjourney(完全自動生成版)
"{{テーマ}} の内容を象徴する、ミニマルで書籍表紙向きのイラスト"
PNGを保存。
📄 STEP 4:EPUB(電子書籍データ)自動生成
方法は以下の2パターン:
① Reedsy API(ノーコード向け)
Markdown → EPUB を自動生成できる。
Make でできる。
② Calibre(サーバー運用者向け)
Linuxサーバーで以下のように自動変換:
ebook-convert book.md book.epub
Make から webhook でサーバーを叩いて実行。
📦 STEP 5:KDP用フォルダに格納(自動)
Google Drive に以下のようなディレクトリ構成で自動保存:
/KDP_自動出版/
└ 2025-12-07/
├ book.md
├ book.epub
└ cover.png
これで 人間がKDPにアップロードするだけ。
🎯 STEP 6:最後の仕上げ(人間の仕事)
Amazon KDP は“完全自動投稿”は不可のため、
-
Kindle本の新規作成
-
書誌情報の入力(自動転記テンプレを作れば30秒)
-
EPUB と cover.png のアップロード
-
出版ボタンを押す
これだけを毎日行うだけ。
1冊あたり
2〜3分で出版可能になります。
🔄 STEP 7:全体自動フロー(文字版)
毎日 05:00 トリガー
↓
スプレッドシートから今日のテーマ取得
↓
ChatGPT APIで章構成生成
↓
ChatGPT APIで各章生成(繰り返し)
↓
ChatGPT APIで全章を統合&校正
↓
Markdownで本文完成
↓
EPUB自動生成(Reedsy / Calibre)
↓
表紙画像を自動生成(Canva / DALL·E)
↓
Google Driveに保存
↓
KDPフォルダへ格納(自動)
↓
作業完了通知(LINE / Gmail)
あなたは通知を見て
KDPにアップロードするだけ。
🧩 追加で作れるもの
-
あなた専用 「本のテンプレ構成」(ジャンル別に3種類まで)
-
Make の 実装フロー図(詳細ブロック)」
-
全工程を自動化する APIプロンプト一式
-
表紙デザインテンプレ(Canva)
-
毎日テーマを自動生成するAI(完全自動出版)
必要なら全部作成します。
-
① 書籍テンプレ(章構成)
-
② Makeの実行フローダイアグラム
-
③ ChatGPTプロンプト一式
-
④ 毎日のテーマ自動生成AI
以下に、**「毎日テーマを自動生成し、翌日の本のテーマを自動投入するAI」**を“そのまま運用可能なレベル”で設計してまとめました。
これは 自動出版ワークフローの中核 になります。
あなたが何もしなくても「毎朝、自動で1冊分のテーマが生成」され、
スプレッドシートへ書き込まれ、そのテーマで本が作られる仕組みです。
🚀 毎日のテーマ自動生成AI(完全版)
🌟 目的
-
毎日、AIが新しい書籍テーマを自動生成
-
Googleスプレッドシートに書き込み
-
Make/Zapier の出版自動化フローがそのテーマを使って本を生成
-
つまり 「完全自動出版」に必要な1stステップ
🧠 テーマ自動生成AIのコンセプト
毎日テーマをバラけさせるために以下の要素を考慮します:
-
ジャンルをローテーション(IT/ビジネス/歴史/食/健康/AI活用/聖書など)
-
検索需要のあるキーワードを含める
-
本として書きやすい構成に落とせるテーマ
-
365日続けてもネタ切れしない構造
そのため、テーマ生成は 2段階AI構成 で行います。
-
AI①:ジャンル選択AI
-
AI②:テーマ具体化AI
🧩 STEP 1:ジャンル選択AI(Make/Zapierで毎朝実行)
▼ プロンプト(自動実行用)
あなたは出版テーマのプランナーです。
以下のジャンルリストから、今日はどのジャンルを扱うべきか1つ選んでください。
ジャンルリスト:
- IT活用
- ITコンサル
- AI活用
- 営業・マーケティング
- 食材・健康
- 聖書・歴史解説
- ビジネススキル
- ライフハック
- 自己啓発
- トレンド分析(SNS/X/ITニュース)
選び方のルール:
- 前日と同じジャンルは選ばない
- 毎週バランスよくローテーション
- 検索需要が高いジャンルを優先
- 記事化しやすいジャンルを優先
出力形式:
ジャンル:◯◯
Make では前日のジャンルをスプレッドシートから読み取ればOK。
🧩 STEP 2:テーマ具体化AI
ジャンルが決まったら、次に 1冊分として成立するテーマ を生成します。
▼ プロンプト
あなたは出版テーマの生成AIです。
ジャンル:{{ジャンル名}}
以下の条件を満たす書籍テーマを3つ生成してください:
条件:
- Kindle本に適した具体性
- 検索需要がある
- 初心者でも読みやすいテーマ
- 1冊(10,000字)で成立する
- 重複しない
- 過去30日以内に生成したテーマと被らない(リストは後で渡す)
出力形式:
1. テーマ
2. テーマ
3. テーマ
Make では過去テーマ一覧を読み込んで
“重複禁止フィルター”を実行できます。
🧩 STEP 3:最終テーマ決定AI
3つ生成された候補から、
今日もっとも有望なテーマを1つ選ぶAI を設置します。
▼ プロンプト
あなたは編集長です。
以下のテーマ候補から、今日出版すべきテーマを1つ選んでください。
テーマ候補:
1. {{候補1}}
2. {{候補2}}
3. {{候補3}}
選定基準:
- 読者の検索需要
- 差別化のしやすさ
- 出版しやすさ(情報量)
- Kindle向きのテーマか
出力形式:
今日のテーマ:◯◯
Make はこの回答だけをスプレッドシートへ記録します。
📅 STEP 4:スプレッドシートへ書き込み(自動)
書き込む形式:
| 日付 | テーマ | ジャンル | 出版状態 |
|---|---|---|---|
| 2025/12/07 | ゼロトラストの基礎と導入手順 | IT活用 | 未開始 |
ここまで完全自動。
これをトリガーとして「書籍生成フロー」が走ります。
🔄 毎日のテーマ自動生成フローダイアグラム(文字版)
毎朝 05:00 トリガー
↓
AI① ジャンル選択AI
↓
AI② テーマ具体化AI(3つ生成)
↓
AI③ テーマ最終決定AI(1つ選ぶ)
↓
Google スプレッドシートへ書き込み
↓
AI書籍生成フローへ自動連携
↓
書籍本文生成 → 表紙生成 → EPUB作成 → Drive保存
↓
(あなたがKDPにアップロード)
出版前の作業は ゼロ になります。
💡 さらに進化させることも可能
-
「前日のアクセス解析(Amazon売れ行き)」からテーマを最適化
-
365日分を先に自動生成してストック化
-
テーマだけでなく「サブテーマ」も自動生成
-
発売済みテーマの“シリーズ化”判断AI
-
表紙のシリーズ統一デザイン自動選定AI
📘 すぐ使える形で作ることもできます
必要なら:
-
Make の実装ブロック図
-
プロンプト全文+API設定
-
スプレッドシートテンプレ
-
エラーハンドリングセット
-
KDP出版までのフロー
丸ごと作って渡せます。
-
実装ブロック図を作る?
-
プロンプトパッケージを作る?
-
スプレッドシートテンプレを作る?
-
テーマ自動生成を実際に生成テストする?
スプレッドシートテンプレートを作成しました。
👇 こちらからダウンロードできます
daily_book_publishing_template.xlsx
📘 テンプレート内容(自動出版ワークフロー向け)
スプレッドシートには以下の項目をあらかじめ設定してあります:
| 項目 | 説明 |
|---|---|
| Date | 出版予定日/生成日 |
| Generated Theme | AIが自動生成したテーマ |
| Target Reader | 想定読者層 |
| Problem to Solve | 本で解決する課題 |
| Chapter Structure (Auto) | 自動生成された章構成 |
| Draft Text (Auto) | 自動生成の本文ドラフト |
| Images Needed | 必要な画像や指示 |
| Status | 進捗管理(Draft / Editing / Published 等) |
| Publish URL | 出版後のURLなど |
必要であれば次のバージョンも作れます:
🟦 Notionテンプレ版
🟩 Google Sheets版(自動連携式)
🟧 AI入力フォーム付き版
🟥 KDP専用テンプレ版
ここでは 「コピペするだけで動く Google Sheets 自動連携テンプレ」 を作ります。
以下をそのまま新しい Google スプレッドシートに貼り付ければ、その瞬間に AI 自動生成ワークフローが動きます。
✅ Google Sheets(自動連携式)テンプレート
① シート構成
以下の2シートを作ってください:
1.「Dashboard」シート
— 操作画面(1クリックでテーマ生成・章構成生成を実行)
2.「Data」シート
— 実際の本データが自動でどんどん追加されていくデータベース
② Data シート:ヘッダー(コピペ用)
「Data」シートの A1 に以下をそのまま貼り付けてください:
Date Generated Theme Target Reader Problem to Solve Chapter Structure (Auto) Draft Text (Auto) Images Needed Status Publish URL
③ Dashboard シート:入力欄(コピペ)
「Dashboard」シートに以下を貼り付けるとフォーム UI になります:
日付: =TODAY()
テーマ(AI自動生成):
読者ターゲット:
解決する課題:
章構成(AI自動生成):
本文ドラフト(AI自動生成):
ステータス:
※適宜セル幅を調整してください。
④ AI連携コード(Apps Script)
🔧 手順
Google Sheets → 拡張機能 → Apps Script → 以下を全部貼り付け → 保存
▼ コード全文(GPT API 接続 & 自動書籍生成)
const API_KEY = "YOUR_OPENAI_API_KEY"; // ←自分のAPIキーを入れる
// 共通AI呼び出し関数
function callAI(prompt) {
const url = "https://api.openai.com/v1/chat/completions";
const payload = {
model: "gpt-4.1-mini", // ←高速・安価
messages: [{ role: "user", content: prompt }],
max_tokens: 1000
};
const options = {
method: "post",
contentType: "application/json",
headers: { Authorization: "Bearer " + API_KEY },
payload: JSON.stringify(payload)
};
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
return json.choices[0].message.content;
}
// テーマ自動生成
function generateTheme() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Dashboard");
const cell = sheet.getRange("B2");
const prompt = `
あなたは企画編集者です。
今日出版する電子書籍のテーマを1つ、ビジネス・健康・自己啓発などから
魅力的な形で1つだけ出してください。
短くキャッチーに。`;
cell.setValue(callAI(prompt));
}
// 章構成自動生成
function generateChapters() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Dashboard");
const theme = sheet.getRange("B2").getValue();
const cell = sheet.getRange("B5");
const prompt = `
テーマ: ${theme}
このテーマで電子書籍の章構成を7章で作ってください。
ビジネス書として読まれる構成で。`;
cell.setValue(callAI(prompt));
}
// 本文ドラフト自動生成
function generateDraft() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Dashboard");
const theme = sheet.getRange("B2").getValue();
const chapters = sheet.getRange("B5").getValue();
const cell = sheet.getRange("B6");
const prompt = `
テーマ: ${theme}
章構成:
${chapters}
この内容で電子書籍の本文ドラフト(3000〜5000字)を作成してください。`;
cell.setValue(callAI(prompt));
}
// Dataシートに書き込み(保存ボタン)
function saveToDatabase() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const dash = ss.getSheetByName("Dashboard");
const data = ss.getSheetByName("Data");
const row = [
new Date(),
dash.getRange("B2").getValue(),
dash.getRange("B3").getValue(),
dash.getRange("B4").getValue(),
dash.getRange("B5").getValue(),
dash.getRange("B6").getValue(),
dash.getRange("B7").getValue(),
"Draft",
""
];
data.appendRow(row);
SpreadsheetApp.getUi().alert("保存しました!");
}
⑤ Dashboard にボタンを設置して自動化
-
挿入 → 図形描画 → 四角を作る
-
「テーマ生成」などと書く
-
右クリック → スクリプトを割り当て
-
以下を割り当て
| ボタン名 | 割り当て関数 |
|---|---|
| テーマ生成 | generateTheme |
| 章構成生成 | generateChapters |
| 本文ドラフト生成 | generateDraft |
| 保存 | saveToDatabase |
🎉 これで毎日1冊自動生成 Google Sheets が完成!
-
ワンクリックでテーマ生成
-
ワンクリックで章構成生成
-
ワンクリックで本文ドラフト生成
-
保存で「Data」に蓄積
-
→ KDP へコピペして出版可能
必要なら次も作れます:
📘 KDP 用 EPUB 自動生成スクリプト
📘 画像自動生成(DALL·E API 連携)版
📘 完全自動で毎朝1冊生成&メール送信するバージョン
いい選択です — KDP 用の EPUB を自動生成するスクリプト を実運用レベルでまとめます。
使い勝手・運用コスト・導入難易度ごとに 2つの実装パターン を提示します。どちらも Google Sheets / Make / Zapier 等の自動化フローから呼び出せる形(Webhook)で動きます。
概要(結論)
-
簡単・実装が速い(おすすめ):Node.js +
epub-gen(またはnodepub)で Markdown → EPUB を生成するサーバー(Webhook)。そのままダウンロード可能/DropboxやGoogle Driveに保存可能。軽量でHeroku / Render / Cloud Runなどにデプロイしやすい。 -
品質最優先(互換性・高度な制御):Calibre の
ebook-convert(CLI)を使う方法。EPUBの互換性が高く、細かいメタ情報・フォント埋め込みなども可能。Cloud Run(Docker)や専用サーバー上で運用。
以下、即使える Node.js 実装(コード一式) と Calibre Docker 実装(Dockerfile & コマンド例) を載せます。必要ならそのままファイルを用意して差し上げます。
実装A — Node.js(短期間で導入/MakeやAppsScriptから簡単に呼べる)
特長
-
導入が速い(数分〜数時間)
-
Markdown を HTML に変換して EPUB にする(章分割も自動)
-
生成した EPUB をサーバーに保存してダウンロード URL を返す or Dropbox/Drive にアップロード可
-
軽量環境で動く(Render / Heroku / Railway / Cloud Run)
ファイル構成(サンプル)
epub-service/
├─ package.json
├─ index.js
└─ README.md
package.json
{
"name": "epub-service",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.2",
"body-parser": "^1.20.2",
"marked": "^5.0.2",
"epub-gen": "^0.1.0", // 代表的な epub ライブラリ(インストール時は最新バージョンを確認)
"node-fetch": "^2.6.7",
"multer": "^1.4.5"
}
}
注:
epub-genは比較的使いやすいライブラリです。npmでインストールしてください(npm i epub-gen)。バージョンは執筆時点の最新版に合わせてください。
index.js(主要コード)
const express = require("express");
const bodyParser = require("body-parser");
const { marked } = require("marked");
const Epub = require("epub-gen");
const fs = require("fs");
const path = require("path");
const crypto = require("crypto");
const app = express();
app.use(bodyParser.json({ limit: "10mb" }));
// ユーティリティ:ランダムファイル名
function randFilename(prefix="book") {
return `${prefix}-${Date.now()}-${crypto.randomBytes(4).toString("hex")}.epub`;
}
// POST /generate
// expected payload:
// {
// "title": "タイトル",
// "author": "著者名",
// "language": "ja",
// "chapters": [ {"title":"序章","markdown":"## ..."}, ... ]
// // または "markdown": "全体Markdown" を渡し、内部で見出しで分割することも可能
// }
app.post("/generate", async (req, res) => {
try {
const body = req.body;
if (!body.title || (!body.chapters && !body.markdown)) {
return res.status(400).json({ error: "title and chapters or markdown required" });
}
let chapters = body.chapters || [];
// markdown単体が渡されたら、見出しで分割して章配列を作る(簡易)
if (!chapters.length && body.markdown) {
const md = body.markdown;
// 見出しレベル1 or 2で分割(簡易パターン)
const parts = md.split(/\n(?=# )/g);
chapters = parts.map((p, idx) => {
const titleMatch = p.match(/^#\s*(.+)/);
return {
title: titleMatch ? titleMatch[1].trim() : `Chapter ${idx+1}`,
data: marked(p)
};
});
} else {
// chapters が markdown を持っているなら HTML に変換して data フィールドを埋める
chapters = chapters.map(ch => {
return {
title: ch.title || "無題",
data: ch.markdown ? marked(ch.markdown) : (ch.html || "")
};
});
}
// epub-gen options
const outputName = randFilename("book");
const outputPath = path.join(__dirname, "output");
if (!fs.existsSync(outputPath)) fs.mkdirSync(outputPath);
const outputFile = path.join(outputPath, outputName);
const option = {
title: body.title,
author: body.author || "Unknown",
publisher: body.publisher || "",
cover: body.cover_url || null, // URL or local path
content: chapters,
lang: body.language || "ja"
};
// generate
await new Epub(option, outputFile).promise;
// respond with download link (for simple setups, return file path)
// In production: store on cloud storage (S3/Google Drive/Dropbox) and return public URL
res.json({
status: "ok",
filename: outputName,
download: `/download/${outputName}`
});
} catch (err) {
console.error(err);
res.status(500).json({ error: err.message || String(err) });
}
});
// serve generated files (simple)
app.get("/download/:file", (req, res) => {
const file = path.join(__dirname, "output", req.params.file);
if (fs.existsSync(file)) {
res.download(file);
} else {
res.status(404).send("Not found");
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`EPUB service listening on ${PORT}`));
使い方(実行例)
-
デプロイ(Render/Heroku/Railway/Cloud Run などに
npm startで動かす) -
Make / Zapier / Apps Script から
POST /generateに JSON を送る- 返り値で
/download/{file}を受け取りダウンロード or 別サービスへ転送
- 返り値で
-
(運用)生成ファイルは一時保存して、生成後すぐに S3 / Google Drive / Dropbox に移動してからサーバー上のファイルは削除するのが安全
注意点 & 改良案
-
epub-genの細かいメタ(目次の深さ、フォント埋め込み、目次の自動生成など)は限界があります。必要に応じて HTML を細かく生成して渡すと良いです。 -
生成後に Amazon KDP が好む設定(言語タグ、表紙、目次) を満たしているか必ず確認してください(表紙はPNG/JPEG、EPUB内のメタ等)。
-
大量生成なら S3 連携、ログ管理、クリーンアップ(cron)を入れてください。
実装B — Calibre (ebook-convert) を使う(完全互換・高品質)
特長
-
Calibre の
ebook-convertは最も互換性が高く、EPUBの品質が非常に良い -
Markdown → EPUB だけでなく、HTML・DOCX → EPUB など豊富な入力に対応
-
フォント埋め込み・目次設定・CSS反映などが細かく制御可能
運用方法(推奨:Cloud Run / Docker)
-
Dockerfile に Calibre をインストールして Cloud Run にデプロイ
-
Webhook(Express)を受け取り、Markdown を一時ファイルに書き出し、
ebook-convertを実行して EPUB を生成、生成物を Cloud Storage / S3 / Drive にアップロードして公開URLを返す
Dockerfile(例)
FROM ubuntu:22.04
# 必要なツールをインストール
RUN apt-get update && apt-get install -y \
wget python3 python3-pip fontconfig ttf-dejavu-core unzip \
&& rm -rf /var/lib/apt/lists/*
# Calibre のインストール(Calibre は公式のインストールスクリプトを使用)
RUN wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sh /dev/stdin
# 作業ディレクトリ
WORKDIR /app
COPY . /app
# Node.jsなどを入れてWebhookを実行するならここで設定(省略)
CMD ["bash"]
生成コマンド例
# Markdown -> EPUB(CSSを当てたい場合は --extra-css オプション)
ebook-convert input.html output.epub --authors "seiichi" --language "ja" --cover cover.jpg
利点と欠点
-
利点:EPUB互換性が高い、細かい制御が可能、フォント埋め込みや目次やCSSが効く
-
欠点:Dockerイメージが大きい/セットアップがやや複雑/Cloud Runでの起動時間やメモリに注意
Google Sheets / Apps Script と連携する方法(両方に共通)
-
Google Sheets(Dashboard) で本の原稿(Markdown)を作る/格納
-
Apps Script から
UrlFetchApp.fetch()で Node.js Webhook にPOST(JSON)を送る- 例:
/generateにtitle,author,markdownを送れば自動で EPUB が返る
- 例:
-
Webhook が返す
downloadURL をスプレッドシートに書き戻す(Apps Script 側で受信) -
必要なら Apps Script のトリガーで毎朝自動実行 or 手動ボタンで呼び出し
セキュリティと運用上の注意
-
Webhook には認証(APIキーや署名)を必ず付けてください。公開状態で放置すると盗用されます。
-
大量生成する場合は rate-limit とキューイング(Bull / Redis など)を入れる。
-
生成後のファイル保管ポリシー(保存期間)を決めておく。S3でバージョン管理するのが安全。
どちらを選ぶべきか(提案)
-
まずは短期間で動かしたい → Node.js (
epub-gen) を推奨。Google Sheets → Webhook → EPUBの流れをすぐ試せます。 -
Amazon KDP に大量・長期で出す/EPUB互換性を最重要視 → Calibre (
ebook-convert) をベースに Cloud Run 化してください。
-
Node.js 実装一式をファイルで作ってお渡し(
index.js,package.json, README、Make / Zapier 呼び出し例) -
Cloud Run 用の Calibre Docker + Webhook サンプル(Dockerfile + webhook node.js)を作成
-
Apps Script(Google Sheets)からの呼び出しコード(
UrlFetchApp.fetch)を作る -
あなたの環境(Render/Heroku/GCP)向けのデプロイ手順を作る
Node.js 実装一式(ファイル群)を作成しました。
キャンバスに配置してあります — 左のファイルビューで確認してダウンロードしてください。
次のアクションの提案(必要なものを選んでください):
-
プロジェクトをzip にまとめてダウンロード可能にする(私が作成します)
-
Google Sheets(Apps Script)から呼び出すサンプルコードを作る
-
Render / Railway / Cloud Run へのデプロイ手順を作る
-
セキュリティ強化(APIキー → HMAC署名 or JWT)を実装する
以下に Render / Railway / Cloud Run へ、先ほどお渡しした Node.js EPUB 生成 API(index.js)をデプロイするための 完全な手順書 をまとめました。
すべて コピペでデプロイできる実用レベル にしています。
🚀 Node.js EPUB 生成 API
デプロイ手順(Render / Railway / Cloud Run)
1️⃣ Render へのデプロイ(最も簡単)
■ 必要なもの
-
GitHub アカウント
-
Render アカウント(無料)
■ 1. GitHub にコードをアップ
- 作成済みプロジェクトフォルダを GitHub リポジトリに push
(ZIP を解凍 →git init→git add .→git commit -m "init"→git push)
■ 2. Render にログインしデプロイ
-
「New +」→ Web Service
-
GitHub リポジトリを選択
-
設定を以下に:
| 項目 | 値 |
|---|---|
| Build Command | npm install |
| Start Command | node index.js |
| Environment | Node |
| Region | Singapore(JPから最短) |
- Create Web Service をクリック
→ 数分でデプロイ完了
■ 3. 動作確認
Render が発行した URL で:
GET /health
→ OK が返れば成功。
2️⃣ Railway へのデプロイ(無料枠 & GUI操作が簡単)
■ 1. プロジェクト作成
-
https://railway.app にログイン
-
「New Project」→ Deploy from GitHub Repo
■ 2. リポジトリを選択
- Node.js プロジェクトを選択
■ 3. 自動で起動コマンド検出されるので確認
Railway は自動検出されるが、念のため:
| 設定項目 | 値 |
|---|---|
| Install | npm install |
| Start | node index.js |
| Node Version | 18+ |
■ 4. Deployment を確認
Railway がビルドログを開始 → 完了後、右上に公開 URL が表示。
3️⃣ Google Cloud Run(最も高機能・スケール向け)
Cloud Run は Docker で動かすため、以下の Dockerfile をプロジェクトへ追加すると楽です。
■ 1. Dockerfile(プロジェクト直下に追加してください)
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "index.js"]
■ 2. Cloud CLI セットアップ
gcloud auth login
gcloud config set project <YOUR_PROJECT_ID>
■ 3. コンテナをビルド
gcloud builds submit --tag gcr.io/<PROJECT_ID>/kdp-epub-api
■ 4. Cloud Run にデプロイ
gcloud run deploy kdp-epub-api \
--image gcr.io/<PROJECT_ID>/kdp-epub-api \
--platform managed \
--region asia-northeast1 \
--allow-unauthenticated \
--port 8080
→ 数十秒で公開。
→ 公開URLが返ってくるので、/health にアクセスして確認。
4️⃣ 各プラットフォーム共通の注意点
✔ ポート番号
-
Render / Railway → 環境変数
PORTが必須 -
Cloud Run →
PORT=8080
index.js には以下の記述必須:
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => console.log("Server running on " + PORT));
(すでに組み込み済みならOK)
5️⃣ GitHub Actions で自動デプロイ(任意)
必要なら以下テンプレを渡します:
-
Render 用(deploy hook)
-
Railway 用(railway up)
-
Cloud Run 用(gcloud run deploy)
6️⃣ 次に作れるもの(必要?)
⬜ GAS から自動で EPUB を生成して Cloud Run API に送るスクリプト
⬜ スプレッドシート → EPUB → KDP 自動アップロード ワークフロー
⬜ トークン認証つき API(Cloudflare Turnstile / JWT)
⬜ 多言語 EPUB 生成(日本語縦組含む)対応
以下に、Google Sheets(GAS:Apps Script)から Node.js EPUB 生成 API を呼び出すサンプルコードを “そのまま貼るだけで動く形” で作成しました。
📘 Google Sheets → EPUB 生成 API 呼び出し(Apps Script)サンプル
🔧 前提
あなたがデプロイした API のエンドポイント:
https://YOUR-API-URL/epub
✅ 1. スプレッドシートの構成(例)
| A列 | B列 |
|---|---|
| title | 本のタイトル |
| author | 著者名 |
| chapter1_title | 第1章のタイトル |
| chapter1_text | 第1章の本文 |
| chapter2_title | 第2章のタイトル |
| chapter2_text | 第2章の本文 |
※ 任意で OK
※ 行ではなく「セル単位」で情報を詰める前提
✅ 2. GAS コード(コピペ OK)
Google Sheets → 拡張機能 → Apps Script
に下記を貼り付けてください。
function createEpubFromSheet() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
// シートのA列とB列の key : value 形式に変換
const payload = {};
for (let i = 0; i < data.length; i++) {
const key = data[i][0];
const value = data[i][1];
if (key) payload[key] = value;
}
// API のエンドポイント
const API_URL = "https://YOUR-API-URL/epub";
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(API_URL, options);
// EPUBバイナリを取得(Base64)
const blob = Utilities.newBlob(
Utilities.base64Decode(response.getContentText()),
"application/epub+zip",
`${payload.title || "book"}.epub`
);
// Google Drive に保存
const file = DriveApp.createFile(blob);
Logger.log("EPUB saved to Drive: " + file.getUrl());
}
▶ 実行結果
-
Drive に
{title}.epubが自動保存される -
ログにファイル URL が表示される
🔐 3. (推奨)API キー認証つき呼び出し
Node.js 側で API キーを付けた場合:
const options = {
method: "post",
contentType: "application/json",
headers: {
"x-api-key": "YOUR_API_KEY"
},
payload: JSON.stringify(payload)
};
🧪 4. 動作テスト用:ミニペイロード例
スプレッドシートに以下を入力して実行:
| A列 | B列 |
|---|---|
| title | なぜ人は毎日本を書くべきなのか |
| author | seiichi |
| chapter1_title | 序章 |
| chapter1_text | 本を書き続けることで人生は大きく変わる…。 |
→ EPUB が生成されドライブに保存されます。
📦 5. GAS → API → EPUB → KDP 自動アップロードへ拡張可能
必要であれば以下も作れます:
⬜ 自動で章立てを生成する GAS
⬜ スプレッドシート行ごとに “1日1冊” EPUB を量産
⬜ KDP 自動アップロード(Puppeteer)
⬜ エラーハンドリング・再試行付きの完全自動化フロー