ChatGPTでブログ記事構成を作る方法|無料で30分自動化
この記事は、はじめて自動化に挑戦する方向けに「ChatGPTでブログ記事の構成案を作る」手順を、最短で“動くところまで”見ていきます。
手動でのプロンプト運用に加え、無料ツールだけで「スプレッドシートにテーマを書くだけで構成が返る」ということを半自動化で作ります。
難しく考えずにまずは一緒にやっていきましょう!
1. この記事でできること
以下の2つを30分で完成させます。
- ChatGPTにコピペするだけで、安定してブログ記事の構成(見出し)を返すプロンプトテンプレートを用意
- Googleスプレッドシートに記事テーマを入れてボタン実行すると、構成が自動で埋まる環境(無料・クレカ不要)
まずは「手で回す→うまくいったら半自動化」という順番にします。理由としては、最初に結果の形を掴んでから自動化した方が迷いが減るからです。
2. 今回作る自動化の仕組みの全体像
全体像はシンプルです。
- あなたはスプレッドシートに「記事テーマ・想定読者・キーワード」を入力
- Apps Script(スプレッドシート内の自動化機能)が、用意したプロンプトを組み立ててAIに送信
- AIが見出し構成(H2/H3中心)を返し、そのままセルに書き込み
AIエンジンは無料枠のあるGemini APIを使います(クレカ登録なし)。記事タイトルのとおりChatGPTでも同じプロンプトが機能するため、最初にChatGPTで形を確認→その後に自動化、という流れで進みます。
3. 事前に必要なアカウント・準備物
無料でそろいます。所要10分です。
- ChatGPT(OpenAIアカウント):Web版の無料プランでOK。メール+SMS認証のみ。クレカ不要。
- Googleアカウント:GmailがあればOK。クレカ不要。
- Google AI Studio(Gemini API):APIキーを1つ取得します。無料枠で使えます(地域制限あり)。
- Googleスプレッドシート:ブラウザで使います。Chrome推奨。
PCとインターネット環境があれば十分です。スマホでも操作は可能ですが、コード貼り付けが少し不便なのでPC推奨です。
4. 必要なツール、アカウントの設定
4-1. ChatGPTでプロンプトテンプレートを用意する
まずはChatGPTで「どんな構成が返るか」を固定化します。テンプレを決めておくと、自動化後も品質が安定します。ChatGPTを開き、下のテンプレを丸ごと貼り付け、最後の入力欄だけ差し替えて試しましょう。
あなたはSEOブログ編集者です。以下の条件で日本語のブログ記事構成(見出し案)だけを出力してください。
出力形式:
- 見出しはMarkdownでH2(##)とH3(###)のみを使用
- H2は5〜8個、各H2の下にH3を2〜4個
- 導入(H2)とまとめ(H2)を必ず含める
- 箇条書きや本文は書かない(見出しのみ)
前提:
- 想定読者:{想定読者を一言で}
- 主要キーワード:{キーワード1, キーワード2}
- 記事テーマ:「{記事テーマ}」
- 口調:初心者にやさしく丁寧。
制約:
- 重複や同義反復を避ける
- 見出しは具体的に(読者の行動がわかる言い回し)
まずは見出し案のみを出してください。
見出しレベルを絞ると、後の自動化で整形が不要になります。ここで構成が想定通りになればOK。ならなくても後で微調整できるので安心してください。
4-2. Gemini APIキーを取得する(無料)
自動化で使うAIエンジンの鍵を1本だけ取ります。理由は、スプレッドシートから直接AIに問い合わせるためです。
- Google AI Studioにログイン
- メニューの「Get API key」から「APIキーを作成」→「プロジェクトを作成」




- 表示されたAPIキーをコピー(あとでスクリプトのプロパティに保存)
クレカ登録は不要です。無料枠には上限がありますが構成生成の用途なら十分足りると思います。
4-3. スプレッドシートの下準備
新しいスプレッドシートを作成し、1行目に以下のヘッダーを入れます。この列順にする理由は、スクリプトで参照しやすいからです。
- A列:記事テーマ
- B列:想定読者
- C列:主要キーワード(カンマ区切り)
- D列:口調(例:やさしく丁寧)
- E列:構成(AI出力)
- F列:ステータス(DONE/空白)
2行目以降に試したいテーマを1件入れておくと、すぐ動作確認できます。
5. 自動化ツールの設定
5-1. Apps Scriptを設定する
スプレッドシート上でコードを1つ貼るだけです。シートからAIに直接リクエストを送り結果をセルに書き戻すために必要です。
- スプレッドシートの拡張機能からApps Scriptエディタを開く

- 下記コードを貼り付けて保存
- プロジェクトの設定→「スクリプト プロパティを追加」で「GEMINI_API_KEY」という名前でAPIキーを保存

function onOpen() {
SpreadsheetApp.getUi().createMenu('アウトライン自動化')
.addItem('構成を生成', 'generateOutline')
.addToUi();
}
function generateOutline() {
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
if (lastRow < 2) {
SpreadsheetApp.getUi().alert('データ行がありません。2行目以降に入力してください。');
return;
}
const apiKey = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
if (!apiKey) throw new Error('GEMINI_API_KEY が未設定です(スクリプトのプロパティに保存してください)');
const url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=' + apiKey;
// 2行目から最終行まで処理
for (let r = 2; r <= lastRow; r++) {
const status = sheet.getRange(r, 6).getValue(); // F列
if (status === 'DONE') continue; // 既に生成済みはスキップ
const theme = sheet.getRange(r, 1).getValue(); // A
const reader = sheet.getRange(r, 2).getValue(); // B
const keywords = sheet.getRange(r, 3).getValue(); // C
const tone = sheet.getRange(r, 4).getValue() || 'やさしく丁寧'; // D
if (!theme) continue; // テーマが空ならスキップ
const prompt = buildPrompt({ theme, reader, keywords, tone });
try {
const payload = {
contents: [{ role: 'user', parts: [{ text: prompt }]}]
};
const res = UrlFetchApp.fetch(url, {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(payload),
muteHttpExceptions: true
});
const code = res.getResponseCode();
const body = res.getContentText();
if (code >= 300) throw new Error('APIエラー code=' + code + ' body=' + body);
const data = JSON.parse(body);
const candidate = (data.candidates && data.candidates[0]) || null;
const parts = candidate ? candidate.content.parts : [];
const text = parts && parts.length ? parts.map(p => p.text || '').join('\n') : '';
if (!text) throw new Error('応答が空でした');
sheet.getRange(r, 5).setValue(text); // 構成(E列)
sheet.getRange(r, 6).setValue('DONE'); // ステータス(F列)
Utilities.sleep(300); // 連続呼び出しの間隔を少し空ける(無料枠対策)
} catch (e) {
sheet.getRange(r, 5).setValue('エラー: ' + e.message);
sheet.getRange(r, 6).setValue('');
Logger.log(e);
}
}
}
function buildPrompt({ theme, reader, keywords, tone }) {
return `あなたはSEOブログ編集者です。以下の条件で日本語のブログ記事構成(見出し案)だけを出力してください。\n\n出力形式:\n- 見出しはMarkdownでH2(##)とH3(###)のみを使用\n- H2は5〜8個、各H2の下にH3を2〜4個\n- 導入(H2)とまとめ(H2)を必ず含める\n- 箇条書きや本文は書かない(見出しのみ)\n\n前提:\n- 想定読者:${reader}\n- 主要キーワード:${keywords}\n- 記事テーマ:「${theme}」\n- 口調:${tone}\n\n制約:\n- 重複や同義反復を避ける\n- 見出しは具体的に(読者の行動がわかる言い回し)\n\nまずは見出し案のみを出してください。`;
}
ポイント:出力形式をMarkdownのH2/H3に固定しています。後工程(CMSやドキュメント貼り付け)でズレにくくなります。
5-2. 実行権限の付与とメニューの確認
はじめて実行すると権限確認のダイアログが出ます。これはシートから外部サービス(AI API)へアクセスするために必要です。内容を確認のうえ許可してください。シート上部に「アウトライン自動化」というメニューが見えれば準備完了です。

6. 動作確認(実際の質問例)
6-1. ChatGPT(手動)で結果を確認
次のように埋めてChatGPTに投げます。ここで良い形になれば、自動化でも同じ品質が返ります。
想定読者:ブログ構成づくりで毎回迷う初心者
主要キーワード:ChatGPT, ブログ記事, 構成, 作る方法
記事テーマ:「ChatGPTでブログ記事構成を作る方法【AIライティング】」
口調:やさしく丁寧
期待する出力の一例(抜粋):
## 導入:構成づくりに時間をかけないために
### この記事のゴール
### 30分で動く仕組みを先につくる理由
## 全体像:ChatGPTとスプレッドシートで半自動化
### 手動→自動の流れ
### 必要なアカウントと無料範囲
## 準備:アカウントとテンプレプロンプト
### ChatGPTで使う固定テンプレ
### 読者・キーワードの決め方
(中略)
## まとめ:次に試す改善と拡張
### 品質を安定させるコツ
### 無料枠での注意点
見出しの粒度や順序がイメージ通りならOK。少し違っても後からプロンプトを一言足すだけで直せます(例:「H2は7個にしてください」など)。
6-2. スプレッドシート(半自動)で実行
スプレッドシートの2行目に次のように入力します。
- A列:ChatGPTでブログ記事構成を作る方法【AIライティング】
- B列:ブログ構成で毎回迷う初心者
- C列:ChatGPT, ブログ記事, 構成, 作る方法
- D列:やさしく丁寧
上部メニュー「アウトライン自動化」→「構成を生成」をクリック。数秒〜十数秒でE列に見出し構成、F列にDONEが入り、成功です。ここまで来れば、あなたの“はじめての自動化”は完了です。
7. うまく動かないときのチェックポイント
- APIキーが未設定…スクリプトのプロパティ名は「GEMINI_API_KEY」になっているか確認(大文字・小文字含む)。
- 権限エラー…初回実行時の承認ダイアログで許可したか。やり直す場合は、メニューから再実行。
- 無料枠の上限…短時間に大量実行すると制限に当たります。少し時間を空けるか、行を絞ってテスト。
- レスポンスが空…プロンプトが長すぎる/特殊記号が多いと失敗することがあります。テーマとキーワードを短く。
- 列ずれ…ヘッダー順がA:テーマ、B:読者、C:キーワード、D:口調、E:構成、F:ステータスになっているか確認。
- メニューが出ない…一度シートを再読み込み。改善しない場合はonOpen関数を手動実行→権限許可。
- エラー原因の把握…Apps Scriptの表示→ログでエラーメッセージを確認。APIのHTTPコードと本文も記録しています。
ほとんどの場合は「APIキー未設定」「列順の違い」「無料枠の一時制限」で解決します。
8. 次にできる改善アイデア
- 品質の底上げ…プロンプトに「競合のURL」を2〜3件追記して、見出し差別化を指示。
- 出力の拡張…構成(H2/H3)に加えて、各H2に一文のアウトカム(読者が得るもの)を付けるよう指示。
- 形式の最適化…MarkdownのままCMSに取り込めるように、H2/H3のみのルールを徹底。
- ドキュメント連携…Apps ScriptでGoogleドキュメントを自動生成し、構成を見出しとして流し込む。
- タスク化…生成後にTrello/Notionへカードを自動作成(外部連携は無料枠や認証要件を確認)。
- ChatGPT API版…有料APIを使える場合はモデルを切替(OpenAI APIはクレカ登録が必要)。高速・高品質化が可能。
- バリエーション生成…同一テーマで3パターンの構成を返すようループ出力し、比較して選定。
まずは「動くもの」を手に入れた今、少しずつ欲しい形に寄せていきましょう。プロンプトは小さな一言追加で変わります。焦らず、1改善ずつでOKです。
費用についての補足:本記事で作る範囲は無料で完結します(ChatGPT・Googleアカウント・Gemini API無料枠)。商用・高頻度運用では各サービスの利用規約・料金を必ず確認してください。