GOOGLE WORKSPACE / BUSINESS AUTOMATION
GAS Automation
Templates
フォーム受付、記録、文書生成、通知などをGoogle Workspace上でつなぐ、業務自動化テンプレート集です。
IMPLEMENTATION PORTFOLIO
業務自動化、AIの安全な運用、複数エージェント、音声AI、企業向けHP。5つの制作物を、専門用語だけに頼らず説明します。
GOOGLE WORKSPACE / BUSINESS AUTOMATION
フォーム受付、記録、文書生成、通知などをGoogle Workspace上でつなぐ、業務自動化テンプレート集です。
LOCAL-FIRST / HUMAN APPROVAL
AIが提案し、重要操作は人が確認・承認する運用基盤です。自動化と人の決裁を同じフローで管理します。
MULTI-AGENT / DISCORD
複数のAIエージェントが役割を分担し、Discord上で議論・整理・結論作成まで進めるチーム型テンプレートです。
VOICE AI / PERSONAL KNOWLEDGE
個人のノートを参照し、音声で対話できるスマートフォン向けAIエージェントPWAです。
BTOB WEBSITE / BEGINNER-GUIDED BUILD
Claude CodeまたはCodexの案内に沿って、初心者でも企業向けHPの編集・検証・Cloudflare Pagesへの公開まで進められるテンプレートです。
Project Detail
上の選択欄と連動して、制作物の目的、利用者、処理の流れ、技術の役割を表示します。コードは仕組みを裏づける短い部分だけを掲載しています。
PROJECT 01 / GOOGLE WORKSPACE
Googleフォームなどから受け取った内容を自動で整理し、スプレッドシートへの記録、カレンダー登録、確認メール送信までをつなぐ業務自動化テンプレートです。
PROCESS
利用者が予約や申請内容を入力します。
送信をきっかけに、決めた処理を自動で開始します。
スプレッドシートへ記録し、必要な予定をカレンダーへ登録します。
受付確認や担当者向けの連絡を自動送信します。
TECHNOLOGY
PLAIN-LANGUAGE GLOSSARY
Googleが提供する業務自動化の仕組みです。スプレッドシートへの転記、Gmail通知、カレンダー登録などを自動化できます。
フォーム送信や決めた時刻を合図に、処理を自動で開始する設定です。担当者が毎回ボタンを押す必要を減らします。
プログラムと変更履歴を保管・共有するサービスです。公開リポジトリでは、実際の構成やコードを確認できます。
REPRESENTATIVE CODE
フォーム送信後の手作業をまとめて実行する中心部分です。担当者の転記作業を減らし、受付直後の連絡を安定させます。
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
calendar.createEvent(
`内見:${customerName}様 (${propertyName})`,
startDateTime,
endDateTime
);
GmailApp.sendEmail(email, subject, body, { name: SENDER_NAME });
DESIGN DECISIONS
PROJECT 02 / HUMAN APPROVAL
AIが次の操作を提案し、外部送信や削除など重要な処理は人の承認後に進める運用基盤です。自動化の便利さと、事業者が判断権を持つことを両立します。
PROCESS
送信、更新、削除など、次に行いたい操作を登録します。
ルールに沿って、そのまま進めるか承認を求めるかを分けます。
目的、対象、影響を見たうえで承認または却下します。
操作と判断の履歴を残し、後から確認できるようにします。
TECHNOLOGY
PLAIN-LANGUAGE GLOSSARY
AIを補助役として使いながら、目的、ルール、最終判断は人が持つ運用方針です。
重要な操作をすぐ実行せず、人の確認待ちにする関所のような仕組みです。
画面や別のシステムから機能を呼び出すための窓口です。この制作物では承認登録や履歴取得に使います。
REPRESENTATIVE CODE
AIから届いた操作を直接実行せず、共通の判定処理へ渡します。承認が必要な操作はキューへ積まれ、人の判断を待ちます。
@router.post("/operations", response_model=GateResult)
def submit_operation(
op: OperationRequest,
conn: sqlite3.Connection = Depends(db_dependency),
) -> GateResult:
return services.submit_operation(conn, op)
DESIGN DECISIONS
PROJECT 03 / MULTI-AGENT
企画、リスク、実装など役割の異なるAIをDiscordへ参加させ、ひとつのテーマを順番に検討して会議結果を整理するテンプレートです。
PROCESS
Discordへ「meeting」と検討したいテーマを入力します。
各AIが専門の視点から、新しい論点や具体案を出します。
直前の議論を参照し、同じ内容の繰り返しを抑えます。
要点、決定事項、次の行動に分けて会議結果を返します。
TECHNOLOGY
PLAIN-LANGUAGE GLOSSARY
役割の異なる複数のAIを連携させる方法です。ひとつのテーマを複数の視点で検討できます。
プログラムからDiscordの投稿を読み、返信するための窓口です。
名前や役割などの設定を、人が読みやすい形で保存するファイル形式です。
REPRESENTATIVE CODE
各AIは直前までの議論を読んでから発言します。利用者は複数サービスを行き来せず、Discord内で検討の流れを追えます。
for _ in range(MEETING_ROUNDS):
for agent in TEAM:
reply = await loop.run_in_executor(
None, ask_agent, agent, prompt, [], ctx
)
history.append({"agent": agent["name"], "text": reply})
DESIGN DECISIONS
PROJECT 04 / VOICE AI
スマートフォンへ話しかけると、利用者が保存したノートや確定記憶を参照して回答する音声AIです。一般的な回答だけでなく、自分の情報に沿った支援を目指しています。
PROCESS
音声を文字へ変換し、質問として受け取ります。
保存済みのノートから、質問に近い情報を探します。
ノートと確定記憶を参考にし、分からないことは創作しない方針で回答します。
回答を表示し、スマートフォンから読み上げます。
TECHNOLOGY
PLAIN-LANGUAGE GLOSSARY
質問に関係する資料を先に探し、その内容をAIへ渡して回答させる方法です。手元の情報に沿った回答を作りやすくします。
Webページをホーム画面へ追加し、アプリに近い形で使える技術です。
Cloudflare上で情報を保存する仕組みです。ノートの検索用データと、利用者が覚えさせた確定情報を分けて管理します。
REPRESENTATIVE CODE
すべてのノートを送るのではなく、関連部分だけを検索して回答材料にします。APIキーは公開画面ではなくサーバー環境から読み取ります。
const hits = await searchD1(env.DB, message);
if (hits.length > 0) {
const context = hits.map(hit => `- ${hit.text}`).join("\n");
systemText += `\n=== 参考情報 ===\n${context}`;
}
const reply = await askGemini(apiKey, model, systemText, history, message);
DESIGN DECISIONS
PROJECT 05 / BUSINESS WEBSITE
Claude CodeまたはCodexへプロジェクトを渡すと、内容の聞き取り、文章や画像の差し替え、表示確認、公開まで順番に案内するWebサイトテンプレートです。
PROCESS
初心者向けの案内文が、事業内容や掲載素材を順番に確認します。
既存のデザインを活かし、ダミー情報を実際の内容へ変更します。
PC・スマートフォン表示、リンク、SEO、秘密情報の混入を確認します。
許可されたファイルだけをまとめ、Cloudflare Pagesへ公開します。
TECHNOLOGY
PLAIN-LANGUAGE GLOSSARY
公開してよいファイルを先に指定し、それ以外を配信物へ入れない方法です。作業メモや設定ファイルの誤公開を防ぎやすくします。
検索エンジンがページの内容を理解しやすいよう、見出し、説明文、構造化データなどを整えることです。
Webサイトのファイルを配信し、URLから見られる状態にするサービスです。
REPRESENTATIVE CODE
プロジェクト全体をそのまま公開せず、指定済みのページ、画像、動画だけを配信フォルダへコピーします。公開前にはメールアドレスや秘密鍵の形式も検査します。
for (const path of requiredFiles) {
await copyPublicFile(path, true);
}
for (const path of stagedFiles) {
assertAllowedPath(path);
scanText(path, await readFile(join(staging, path), "utf8"));
}
DESIGN DECISIONS
Video
AIチャット、業務自動化、Webサイト制作の4本を、実際の画面のまま紹介しています。