GAS×ChatGPT/Claudeでブログ記事を自動生成!コピペOK
/ 初心者向け
Google Apps ScriptとChatGPT/Claude APIでブログ記事を自動生成しよう
「ブログ記事のネタ探しや執筆に時間がかかりすぎる…」「もっと効率的にブログを更新したい!」
そんな悩みを抱えていませんか?
この記事では、Google Apps Script(GAS)とChatGPTやClaudeといった生成AIのAPIを連携させ、ブログ記事を自動生成する方法を、初心者の方でもすぐに実践できるように、コピペできるGASコード付きで詳しく解説します。
この記事で解決できること
- ChatGPT/Claude APIとGASの連携方法がわかる
- ブログ記事のテーマ入力から生成、スプレッドシートへの記録までを自動化できる
- コピペしてすぐに試せるGASコードが手に入る
- 設定手順やよくあるエラーとその対処法がわかる
この記事を読めば、ブログ記事執筆の時間を劇的に短縮し、より創造的な作業に集中できるようになります。
準備するもの
1. Googleアカウント: GASを使うために必須です。
2. OpenAIまたはAnthropicのアカウント: ChatGPTまたはClaudeのAPIを利用するために必要です。
- OpenAI (ChatGPT): https://openai.com/
- Anthropic (Claude): https://www.anthropic.com/
3. APIキー: 各サービスで取得したAPIキー。
4. Googleスプレッドシート: 生成された記事を保存するために使用します。
設定手順
ステップ1: Googleスプレッドシートの準備
まず、生成されたブログ記事を保存するためのスプレッドシートを作成します。以下のヘッダーを作成してください。
- A列: タイトル
- B列: 本文
- C列: 生成日時
スプレッドシートのURLを控えておいてください。GASコード内で使用します。
ステップ2: GASプロジェクトの作成とAPIキーの設定
1. Googleドライブを開き、「新規」→「その他」→「Google Apps Script」を選択して、新しいスクリプトプロジェクトを作成します。
2. スクリプトエディタが開いたら、「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティ」に移動します。
3. 「プロパティを追加」ボタンをクリックし、以下の2つのプロパティを追加します。
OPENAI_API_KEY(ChatGPTの場合) またはANTHROPIC_API_KEY(Claudeの場合): 取得したAPIキーを入力します。SPREADSHEET_ID: 作成したスプレッドシートのID(URLの/d/と/editの間の文字列)を入力します。
ステップ3: GASコードの記述
以下のGASコードをスクリプトエディタに貼り付けます。ChatGPTとClaude、どちらを利用するかによって一部コードが異なりますので、ご自身の利用するAPIに合わせて選択してください。
【ChatGPT連携用コード】
function generateBlogPostChatGPT() {
const apiKey = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');
const spreadsheetId = PropertiesService.getScriptProperties().getProperty('SPREADSHEET_ID');
if (!apiKey || !spreadsheetId) {
Logger.log('APIキーまたはスプレッドシートIDが設定されていません。スクリプトのプロパティを確認してください。');
return;
}
// ブログのテーマをユーザーに入力させる(または、他の方法で取得する)
const theme = Browser.inputBox('ブログ記事のテーマを入力してください:');
if (!theme) {
Browser.msgBox('テーマが入力されなかったため、処理を中断します。');
return;
}
const prompt = `以下のテーマで、読者の検索意図に応えるような、SEOに強いブログ記事を作成してください。
テーマ: ${theme}
構成案:
1. 導入(読者の課題提起と解決策の提示)
2. 本文(具体的な解説、例、メリット・デメリットなど)
3. まとめ(要点の再確認、読者への行動喚起)
---`;
const url = 'https://api.openai.com/v1/chat/completions';
const options = {
'method': 'post',
'contentType': 'application/json',
'headers': {
'Authorization': 'Bearer ' + apiKey
},
'payload': JSON.stringify({
'model': 'gpt-3.5-turbo',
'messages': [
{'role': 'system', 'content': 'あなたはSEOに強く、読者の検索意図を理解したブログ記事を作成するAIライターです。'},
{'role': 'user', 'content': prompt}
],
'max_tokens': 1000,
'temperature': 0.7
})
};
try {
const response = UrlFetchApp.fetch(url, options);
const jsonResponse = JSON.parse(response.getContentText());
const blogContent = jsonResponse.choices[0].message.content;
// スプレッドシートに書き込み
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getActiveSheet();
const timestamp = new Date();
sheet.appendRow([theme, blogContent, timestamp]);
Browser.msgBox('ブログ記事の生成が完了し、スプレッドシートに保存されました!');
Logger.log('ブログ記事が生成・保存されました:
' + blogContent);
} catch (e) {
Logger.log('APIリクエスト中にエラーが発生しました: ' + e.toString());
Browser.msgBox('ブログ記事の生成中にエラーが発生しました。ログを確認してください。');
}
}
【Claude連携用コード】
function generateBlogPostClaude() {
const apiKey = PropertiesService.getScriptProperties().getProperty('ANTHROPIC_API_KEY');
const spreadsheetId = PropertiesService.getScriptProperties().getProperty('SPREADSHEET_ID');
if (!apiKey || !spreadsheetId) {
Logger.log('APIキーまたはスプレッドシートIDが設定されていません。スクリプトのプロパティを確認してください。');
return;
}
// ブログのテーマをユーザーに入力させる(または、他の方法で取得する)
const theme = Browser.inputBox('ブログ記事のテーマを入力してください:');
if (!theme) {
Browser.msgBox('テーマが入力されなかったため、処理を中断します。');
return;
}
const prompt = `以下のテーマで、読者の検索意図に応えるような、SEOに強いブログ記事を作成してください。
テーマ: ${theme}
構成案:
1. 導入(読者の課題提起と解決策の提示)
2. 本文(具体的な解説、例、メリット・デメリットなど)
3. まとめ(要点の再確認、読者への行動喚起)
---`;
const url = 'https://api.anthropic.com/v1/messages';
const options = {
'method': 'post',
'contentType': 'application/json',
'headers': {
'x-api-key': apiKey,
'anthropic-version': '2023-06-01' // 最新のAPIバージョンを指定
},
'payload': JSON.stringify({
'model': 'claude-3-opus-20240229', // または 'claude-3-sonnet-20240229' など
'max_tokens': 1000,
'messages': [
{'role': 'user', 'content': prompt}
],
'temperature': 0.7
})
};
try {
const response = UrlFetchApp.fetch(url, options);
const jsonResponse = JSON.parse(response.getContentText());
const blogContent = jsonResponse.content[0].text;
// スプレッドシートに書き込み
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getActiveSheet();
const timestamp = new Date();
sheet.appendRow([theme, blogContent, timestamp]);
Browser.msgBox('ブログ記事の生成が完了し、スプレッドシートに保存されました!');
Logger.log('ブログ記事が生成・保存されました:
' + blogContent);
} catch (e) {
Logger.log('APIリクエスト中にエラーが発生しました: ' + e.toString());
Browser.msgBox('ブログ記事の生成中にエラーが発生しました。ログを確認してください。');
}
}
ステップ4: スクリプトの実行
1. スクリプトエディタの上部にある関数のプルダウンメニューから、generateBlogPostChatGPT または generateBlogPostClaude を選択します。
2. 実行ボタン(▶︎)をクリックします。
3. 初回実行時には、スクリプトの承認を求められます。内容を確認し、「許可」してください。
4. ブログ記事のテーマを入力するダイアログが表示されるので、テーマを入力して「OK」をクリックします。
処理が完了すると、スプレッドシートに記事が保存され、完了メッセージが表示されます。
よくあるエラーと対処法
- 「APIキーまたはスプレッドシートIDが設定されていません」
- 原因: スクリプトのプロパティに
OPENAI_API_KEY(またはANTHROPIC_API_KEY) およびSPREADSHEET_IDが正しく設定されていない。 - 対処法: プロジェクトのプロパティ設定を再度確認し、APIキーとスプレッドシートIDが間違いないか確認してください。
- 「APIリクエスト中にエラーが発生しました: 401 Unauthorized」
- 原因: APIキーが無効、または期限切れ。
- 対処法: APIキーを再生成し、スクリプトのプロパティに正しく設定し直してください。
- 「APIリクエスト中にエラーが発生しました: 400 Bad Request」
- 原因: APIに送信したリクエストの形式が不正。
- 対処法: GASコード内のAPIエンドポイントURL、ペイロード(
payload)の形式が正しいか、特にモデル名やパラメータ (max_tokensなど) が指定されたAPI仕様に合っているか確認してください。Claudeの場合はanthropic-versionヘッダーも重要です。 - 「APIリクエスト中にエラーが発生しました: 5xx Server Error」
- 原因: API提供側のサーバーで一時的な問題が発生している。
- 対処法: しばらく待ってから再度実行してみてください。解決しない場合は、API提供元のサポートに問い合わせることも検討してください。
- 「スクリプトの承認を求められるが、許可できない」
- 原因: Googleアカウントのセキュリティ設定や、管理者がスクリプトの実行を制限している場合。
- 対処法: 管理者に確認するか、Googleアカウントのセキュリティ設定を見直してください。
FAQ
Q1: どのAIモデルを選べば良いですか?
- ChatGPT:
gpt-3.5-turboはコストパフォーマンスに優れ、多くの用途で十分な性能を発揮します。より高品質な記事を求める場合はgpt-4シリーズを検討しましょう(ただし、API利用料は高くなります)。 - Claude:
claude-3-opus-20240229は最高性能ですが、最も高価です。claude-3-sonnet-20240229は性能とコストのバランスが取れています。claude-3-haiku-20240307は最も高速かつ安価ですが、生成される内容の深みは限定的かもしれません。目的に応じて使い分けてください。
Q2: 生成される記事の質を向上させるには?
- プロンプトの具体性: GASコード内の
promptをより詳細に、具体的(ターゲット読者、文体、含めたいキーワードなど)に指示することで、AIの生成する記事の質が向上します。 max_tokensの調整: 生成される記事の長さを調整できます。長文の記事を生成したい場合は、この値を大きくしてください。temperatureの調整: 値を高くするほど、より創造的で多様な文章が生成されます。低くするほど、より予測可能で一貫性のある文章になります。ブログ記事の場合は0.7程度がバランスが良いでしょう。- ファインチューニング (上級者向け): 特定の文体や知識に特化させたい場合は、AIモデルのファインチューニングを検討することもできますが、GASの範囲を超える高度な設定となります。
Q3: 生成された記事はそのまま公開できますか?
AIが生成した記事は、あくまで下書きや参考として利用することを強く推奨します。公開前に必ず以下の点を確認・修正してください。
- 事実確認: AIは誤った情報を生成することがあります。記事の内容に間違いがないか、ご自身で必ず確認してください。
- 表現の調整: AIの表現が不自然な場合や、ご自身のブログのトーンに合わない場合は、人間らしい自然な表現に修正しましょう。
- オリジナリティの確保: 他のサイトとの類似性が高すぎないか確認し、必要に応じて独自の視点や経験談を加えてください。
- SEO対策の最終確認: タイトルや見出し、本文中のキーワードが適切か、検索意図に合っているか最終確認してください。
まとめ
Google Apps ScriptとChatGPT/Claude APIを連携させることで、ブログ記事の自動生成が現実のものとなります。今回ご紹介したGASコードと設定手順を参考に、ぜひご自身のブログ運営に活用してみてください。
この技術は、ブログ記事だけでなく、メールの自動作成、SNS投稿文の生成、レポート作成など、様々な業務の自動化に応用可能です。もし、これらの業務自動化ツール導入や、より複雑なGASスクリプト開発についてご相談されたい場合は、お気軽にお声がけください。
AIの力を借りて、あなたのコンテンツ制作を次のレベルへと引き上げましょう!
GAS自動化の導入相談
請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。