
Gemini SparkとGoogle Apps Script(GAS)をMCP(Model Context Protocol)経由で連携させ、チャットからの指示で「記事生成・Web公開・Google Chat通知」を行うシステムの仕組みと実装手順を解説します。
1. 概要と処理フロー
処理の流れは以下の通りです。
[ ユーザー ]
│ 指示(例: 「米国株式相場のニュースをまとめて公開して」)
▼
[ Gemini Spark ]
│ 1. 情報収集および記事本文(HTML)の生成
│ 2. GAS(MCPサーバー)のツール呼び出し
▼
[ GAS (MCPサーバー) ]
├── ① Google DriveへHTML保存およびアクセス用URLの発行
└── ② Google Chat Webhookへの通知送信 ➔ チャットにURLが送信される
システムの主な機能
- Webページ自動生成・公開: チャット指示からHTMLページを生成し共有URLを発行。
- Google Chat通知: ページ公開完了時に指定のチャットスペースへURLを通知。
- 保存期間の制御: 指定期間(標準は7日間)が過ぎたページの自動非表示化および保存期間の変更。
- WordPress連携: 必要に応じてWordPressのREST APIを介した投稿処理への変更。
2. GASの実装コード
GAS側でGemini Sparkからのリクエストを受け取り、ページの保存とGoogle Chatへの通知を行うプログラムです。
// --- 設定項目 ---
const SECRET_TOKEN = "your-custom-secret-token"; // 接続用トークン
const FOLDER_NAME = "Gemini_Generated_Pages"; // ページ保存用フォルダ名
const CHAT_WEBHOOK_URL = "https://chat.googleapis.com/v1/spaces/..."; // Webhook URL
function doPost(e) {
try {
const data = JSON.parse(e.postData.contents);
if (data.token !== SECRET_TOKEN) {
return responseJSON({ status: "error", message: "Unauthorized" });
}
const action = data.action;
const params = data.params || {};
if (action === "create_and_notify") {
return responseJSON(createPageAndNotify(params.title, params.htmlContent, params.summary));
}
return responseJSON({ status: "error", message: "Unknown action" });
} catch (err) {
return responseJSON({ status: "error", message: err.toString() });
}
}
function doGet(e) {
const fileId = e.parameter.id;
if (!fileId) return HtmlService.createHtmlOutput("Page not found");
try {
const file = DriveApp.getFileById(fileId);
const htmlContent = file.getBlob().getDataAsString();
return HtmlService.createHtmlOutput(htmlContent);
} catch (err) {
return HtmlService.createHtmlOutput("Error: " + err.toString());
}
}
function createPageAndNotify(title, htmlContent, summary) {
const folders = DriveApp.getFoldersByName(FOLDER_NAME);
const folder = folders.hasNext() ? folders.next() : DriveApp.createFolder(FOLDER_NAME);
const file = folder.createFile(title + ".html", htmlContent, MimeType.HTML);
const pageUrl = ScriptApp.getService().getUrl() + "?id=" + file.getId();
if (CHAT_WEBHOOK_URL) {
const payload = { text: `📄 *記事公開通知*\n*タイトル:* ${title}\n*URL:* ${pageUrl}` };
UrlFetchApp.fetch(CHAT_WEBHOOK_URL, {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
});
}
return { status: "success", pageUrl: pageUrl };
}
function responseJSON(data) {
return ContentService.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}
3. デプロイおよび設定手順
- GASのスクリプトエディタに上記コードを配置します。
SECRET_TOKENとCHAT_WEBHOOK_URLを設定します。- 「デプロイ」>「新しいデプロイ」を開き、Webアプリ(実行: 自分 / アクセス: 全員)としてデプロイします。
- 発行されたWebアプリURLをGemini Spark側に登録します。
4. セキュリティに関する注意点
- トークン管理: アクセス権限が「全員」となるため、認証用トークンを正しく設定してください。
- 公開範囲: 生成されたURLは公開状態となるため、機密情報や個人情報の取り扱いには注意してください。

コメント