leale
第2期 Day 3
石垣商店
株式会社leale — AI 活用 企業研修 第2期(上級)最終日

Day 3:業務アプリ開発
× 運用設計

要件定義から実装・運用サイクル設計まで。
石垣商店向け「問い合わせ受付 & 自動分類アプリ」を完成させ、上級コースを修了する。

顧客
株式会社石垣商店
業種
銅・真鍮加工製造業
参加者
選抜数名
日程
2026年 月 日
0:00-0:20振り返り・ゴール
0:20-1:10要件定義
1:20-3:00開発ハンズオン
3:10-3:40運用設計
3:40-4:00成果発表・修了式
Opening 0:00 - 0:20

第2期 最終日へ
— 今日で「AI 管理責任者」として完成する

🎯 Day 3 のゴール

石垣商店向け「問い合わせ受付 & 自動分類アプリ」を完成させ、運用・改善サイクルを設計する。第2期上級コースを修了する。

第2期 3日間の振り返り(10分)

1
Day 1:AI 管理責任者の役割 × GAS 入門

AI ガバナンス・社内ポリシー策定、GWS 管理コンソール操作(Gemini 設定・利用ログ・2段階認証)、GAS でメール自動送信

2
Day 2:Claude API × エージェント開発

Claude API の料金・セキュリティ・APIキー管理、GAS から API 呼び出し、メール自動分類エージェントの実装

3
Day 3(今日):業務アプリ開発 × 運用設計

要件定義ワーク、問い合わせ受付フォームとエージェントの統合、PDCAサイクル設計、修了式

今日完成させるもの:問い合わせ受付 & 自動分類アプリ

Google フォーム
問い合わせ受付
スプレッドシート
自動記録
GAS トリガー
自動起動
Claude API
分類+回答案
メール通知
担当者へ
Section 1 / ワーク 0:20 - 1:10 / 50分

自社業務アプリの要件定義
— 「誰が・何を・なぜ」を言語化する

🎯 ゴール

ユーザーストーリーの書き方を習得し、石垣商店向け「問い合わせ自動対応 Web フォーム」の要件定義書を AI と一緒に書ける。

1-1. ユーザーストーリーの書き方(15分)

要件定義で最も大切なのは「誰が・何を・なぜ使うのか」を先に明確にすること。

テンプレート
【誰が】として、
 【何を】したい。
 なぜなら【理由】だから。」
例1
営業担当 として

電話中に問い合わせ種別を即座に確認したい。なぜなら折り返しの担当者をすぐ決めたいから。

例2
管理責任者 として

月ごとの問い合わせ傾向を把握したい。なぜなら在庫・人員計画に反映したいから。

例3
顧客 として

24時間いつでも問い合わせを送信したい。なぜなら営業時間外にも相談したい場合があるから。

WORK

石垣商店向けのユーザーストーリーを書く

  1. 上のテンプレートを使って、石垣商店の「問い合わせ受付アプリ」を使う3人のユーザーストーリーを書く
  2. 2人1組でペア作業(5分)
  3. 発表・共有(5分)
所要時間:10分

1-2. AI を使って要件定義書を書く(20分)

Claude に要件定義の整理・補完を手伝わせます。

要件定義 プロンプト
あなたはシステム要件定義の専門家です。 以下の条件で「問い合わせ受付 & 自動分類アプリ」の要件定義書を作成してください。 【背景】 会社:株式会社石垣商店(銅・真鍮加工メーカー、愛知県名古屋市) 課題:電話やメールで来る問い合わせの対応が属人化している 目的:問い合わせを一元管理し、AI で自動分類・回答案生成して業務効率化 【使用技術】 - Google フォーム(問い合わせ受付) - Google スプレッドシート(データ蓄積) - Google Apps Script(自動化) - Claude API(AI 分類・回答案生成) 【出力してほしい内容】 1. システム概要(3行) 2. ユーザーストーリー(3件) 3. 機能要件(必須/任意を明記) 4. 非機能要件(セキュリティ・パフォーマンス・保守性) 5. 想定する制限・リスク Markdown 形式で出力してください。
Claude が生成した要件定義書を画面に表示しながら「これが叩き台です。足りないものや違う点があれば追加・修正しましょう」と受講者に発言を促してください。実際の業務への適用を意識させることが大切です。

1-3. 今日実装する機能の確定(15分)

4時間という制約の中で実装できる機能を絞り込みます。

✅ 必ず実装する(必須)
  • Google フォームで問い合わせ受付
  • スプレッドシートへの自動記録
  • GAS トリガーで Claude API 呼び出し
  • カテゴリ分類 + 回答案生成
  • 担当者へのメール通知
⬜ 時間があれば追加(任意)
  • 回答メールを担当者が送信するボタン
  • 月次集計レポートの自動送信
  • 緊急度「高」の SMS 通知
  • Dashboard シートに集計グラフ
☕ 休憩 10分(1:10 - 1:20)
Section 2 / 開発ハンズオン 1:20 - 3:00 / 100分

業務アプリ開発メインハンズオン
— GAS + Claude API 統合

🎯 ゴール

Google フォーム → スプレッドシート → GAS × Claude API → メール通知 の一連のフローを全員が動かせる状態にする。

STEP 1: Google フォームを作成する(15分)

HANDS-ON

問い合わせ受付フォームを作成する

  1. Google ドライブ → 新規 → Google フォームを開く
  2. タイトルを「石垣商店 お問い合わせフォーム」に変更
  3. 以下の質問を追加する:
    ・会社名(短文テキスト、必須)
    ・お名前(短文テキスト、必須)
    ・メールアドレス(短文テキスト、必須)
    ・お問い合わせ内容(段落テキスト、必須)
    ・お急ぎですか?(ラジオボタン:はい / いいえ)
  4. 「回答」タブ → スプレッドシートアイコンをクリックして回答用スプレッドシートを作成
  5. テスト送信:「目のアイコン(プレビュー)」から実際にフォームを送信してスプレッドシートに記録されることを確認
所要時間:15分

STEP 2: GAS からフォーム回答を読み取る(20分)

フォーム送信トリガー + Claude API 統合スクリプト
/** * 問い合わせ受付 & 自動分類システム(完全版) * * 設定方法: * 1. このスクリプトをスプレッドシートの Apps Script エディタに貼り付け * 2. スクリプトプロパティに以下を設定: * CLAUDE_API_KEY: sk-ant-xxxxxx * MANAGER_EMAIL : 担当者のメールアドレス * 3. setup() を一度実行してトリガーを設定する */ // ============ 設定 ============ const CATEGORY_LABELS = { A: "材料問い合わせ", B: "納期相談", C: "新規見積もり", D: "その他" }; // ============ トリガー設定 ============ function setup() { // フォーム送信時に自動実行するトリガーを設定 const ss = SpreadsheetApp.getActiveSpreadsheet(); ScriptApp.newTrigger('onFormSubmit') .forSpreadsheet(ss) .onFormSubmit() .create(); Logger.log('トリガー設定完了'); } // ============ メイン処理 ============ function onFormSubmit(e) { const values = e.values; // フォームの列順に合わせてデータを取得 const timestamp = values[0]; const company = values[1]; const name = values[2]; const email = values[3]; const inquiry = values[4]; const isUrgent = values[5] === "はい"; Logger.log(`新規問い合わせ: ${company} ${name}`); // Step 1: Claude API でカテゴリ分類 const classification = classifyInquiry(inquiry); // Step 2: 回答案を生成 const replyDraft = generateReplyDraft( inquiry, classification.category, company, name ); // Step 3: スプレッドシートに結果を書き込む writeResultToSheet( company, name, email, inquiry, classification, replyDraft, isUrgent ); // Step 4: 担当者に通知メールを送信 sendNotificationEmail( company, name, email, inquiry, classification, replyDraft, isUrgent ); } // ============ AI 分類 ============ function classifyInquiry(inquiry) { const apiKey = PropertiesService.getScriptProperties() .getProperty('CLAUDE_API_KEY'); if (!apiKey) return { category: 'D', reason: 'APIキー未設定', urgency: '中' }; const system = `銅・真鍮加工メーカー「石垣商店」の問い合わせ分類AIです。 以下のカテゴリに分類してJSON形式で回答してください。 A: 材料問い合わせ(在庫・規格・単価) B: 納期相談(スケジュール・変更・急ぎ対応) C: 新規見積もり(初回取引・見積依頼・加工仕様) D: その他 {"category":"A","reason":"20字以内","urgency":"高/中/低"}`; const options = { method: "post", headers: { "x-api-key": apiKey, "anthropic-version": "2023-06-01", "content-type": "application/json" }, payload: JSON.stringify({ model: "claude-3-5-haiku-20241022", max_tokens: 256, system: system, messages: [{ role: "user", content: inquiry }] }), muteHttpExceptions: true }; try { const res = UrlFetchApp.fetch("https://api.anthropic.com/v1/messages", options); const data = JSON.parse(res.getContentText()); if (data.error) return { category: 'D', reason: 'API エラー', urgency: '中' }; const text = data.content[0].text; const match = text.match(/\{[\s\S]*\}/); if (match) return JSON.parse(match[0]); } catch(e) { Logger.log('分類エラー: ' + e); } return { category: 'D', reason: '処理失敗', urgency: '中' }; } // ============ 回答案生成 ============ function generateReplyDraft(inquiry, category, company, name) { const apiKey = PropertiesService.getScriptProperties() .getProperty('CLAUDE_API_KEY'); if (!apiKey) return '(APIキー未設定のため生成できませんでした)'; const system = `石垣商店の営業担当AIです。 ${CATEGORY_LABELS[category]}の問い合わせへの返信案を150字以内で作成してください。 ・丁寧なビジネスメール文体 ・担当者が詳細確認後に改めてご連絡する旨を含める ・社名「株式会社石垣商店」を名乗る`; const options = { method: "post", headers: { "x-api-key": apiKey, "anthropic-version": "2023-06-01", "content-type": "application/json" }, payload: JSON.stringify({ model: "claude-3-5-haiku-20241022", max_tokens: 512, system: system, messages: [{ role: "user", content: `${company} ${name}様からの問い合わせ:\n${inquiry}` }] }), muteHttpExceptions: true }; try { const res = UrlFetchApp.fetch("https://api.anthropic.com/v1/messages", options); const data = JSON.parse(res.getContentText()); if (!data.error) return data.content[0].text; } catch(e) { Logger.log('回答案生成エラー: ' + e); } return '(回答案の生成に失敗しました)'; } // ============ スプレッドシート書き込み ============ function writeResultToSheet(company, name, email, inquiry, cls, reply, urgent) { const ss = SpreadsheetApp.getActiveSpreadsheet(); let sheet = ss.getSheetByName("処理結果"); if (!sheet) { sheet = ss.insertSheet("処理結果"); sheet.appendRow(['受付日時','会社名','氏名','メール','問い合わせ','カテゴリ','緊急度','回答案','優先フラグ']); } sheet.appendRow([ new Date().toLocaleString('ja-JP'), company, name, email, inquiry, CATEGORY_LABELS[cls.category] || cls.category, cls.urgency, reply, urgent || cls.urgency === '高' ? '★要対応' : '' ]); } // ============ 通知メール送信 ============ function sendNotificationEmail(company, name, email, inquiry, cls, reply, urgent) { const TO = PropertiesService.getScriptProperties() .getProperty('MANAGER_EMAIL'); if (!TO) { Logger.log('MANAGER_EMAIL 未設定'); return; } const subject = `【石垣商店】${urgent ? '★急ぎ ' : ''}新規問い合わせ:${CATEGORY_LABELS[cls.category]} / ${company}`; const body = `新しいお問い合わせが届きました。 ■ 送信者 会社名:${company} お名前:${name} メール:${email} 緊急 :${urgent ? 'はい' : 'いいえ'} ■ お問い合わせ内容 ${inquiry} ■ AI 分類結果 カテゴリ:${CATEGORY_LABELS[cls.category]} 緊急度 :${cls.urgency} 判断理由:${cls.reason} ■ 回答案(AI 生成) ${reply} -- このメールは自動送信です。 確認はスプレッドシート「処理結果」シートをご覧ください。`; MailApp.sendEmail(TO, subject, body); }
EXERCISE

システムを動かしてみる

  1. スプレッドシートの Apps Script エディタにコードを貼り付けて保存
  2. スクリプトプロパティに CLAUDE_API_KEYMANAGER_EMAIL を設定
  3. setup() を実行してトリガーを設定する
  4. Google フォームのプレビューからテスト送信する
  5. スプレッドシートの「処理結果」シートに結果が書き込まれることを確認
  6. 担当者メールに通知が届くことを確認
所要時間:40分
setup() を複数回実行するとトリガーが重複します。「Apps Script エディタ → トリガー(時計アイコン)」で不要なトリガーを削除してもらってください。フォーム列の順序がズレるとデータ取得が狂うので、values[0]=タイムスタンプ であることを必ず確認してください。

STEP 3: 追加機能・カスタマイズ(25分)

基本が動いたら、業務に合わせてカスタマイズしましょう。

カスタマイズ追加依頼プロンプト
現在の問い合わせ受付 & 自動分類スクリプトに以下の機能を追加してください。 【追加機能(使いたいものを選んでください)】 A. 緊急度「高」の場合だけ別の担当者(社長・部長等)にも CC でメール送信する B. 月次集計:毎月1日の朝9時にカテゴリ別件数と平均緊急度をまとめてメール送信 C. 返信ボタン:担当者が「この回答案で返信する」ボタンを押すと顧客に自動返信する(スプレッドシートにボタン設置) D. 回答品質改善:担当者が回答案を「良い/悪い」評価すると、次回の生成に反映する(Few-shot learning) 現在のコードをベースに追加してください。
☕ 休憩 10分(3:00 - 3:10)
Section 3 / 運用設計 3:10 - 3:40 / 30分

AI 環境の運用・改善サイクル設計
— PDCA を回す

🎯 ゴール

AI 導入後のPDCAサイクルを設計し、第1期受講者(全社員)への展開計画を立てられる。

3-1. AI 導入後の PDCA サイクル(15分)

P
Plan(計画)

月1回:改善テーマを設定。「分類精度を上げる」「新カテゴリを追加」等

D
Do(実行)

スクリプトを修正・Claude に書いてもらう。テスト環境で動作確認後に本番へ

C
Check(確認)

月次レポートで「分類正解率・処理件数・時間短縮」を計測。ズレを把握する

A
Act(改善)

問題があればシステムプロンプトを改善。成功事例を他の業務にも横展開する

3-2. 効果測定の指標(KPI)

「感覚」ではなく数字で効果を測りましょう。

KPI1
時間短縮

問い合わせ対応1件あたりの時間(分)。月次で計測して前月比を出す

KPI2
分類精度

AI 分類の正解率(%)。担当者の修正件数で逆算できる

KPI3
対応速度

問い合わせ受信から最初の返信までの時間(時間単位)

KPI4
API コスト

月の Claude API 利用料($)。Anthropic Console で確認できる

3-3. 第1期受講者(全社員)への展開計画(15分)

今日完成したシステムを全社員が使える状態にするためのステップです。

1
社内テスト(1ヶ月)

管理責任者と第2期受講者だけで運用。問題点・改善点を洗い出す。

2
フォームURL を全社員に共有

「外部からの問い合わせはこのフォームで受け付けてください」と周知。マニュアルを1枚で作成(AI に書かせる)。

3
1ヶ月後:効果測定と改善

KPI を計測。「分類間違いが多いカテゴリ」を優先的にプロンプト改善。

4
次のテーマへ展開

見積もり自動化・在庫アラート・日報自動生成など、次の業務改善テーマを設定する。leale の伴走支援を活用。

伴走支援について:leale では第2期修了後も月次の振り返りミーティング・スクリプト改善サポートを提供しています。困ったときはいつでも相談してください。
Section 4 / 発表・修了式 3:40 - 4:00 / 20分

最終成果発表
× 第2期上級コース 修了式

🎯 ゴール

各自の成果を発表し、第2期 3日間の学びを全員で確認する。AI 管理責任者としての次のアクションを明確にして修了する。

Live Poll — 効果測定アンケート
完成したアプリで何時間/月の削減が見込めますか?
QRコード
(講師設定)
スマホで
QR を読み取り投票
1〜5時間/月(小さいけど確実な改善)
5〜10時間/月(業務全体に影響が出る)
10〜20時間/月(大きな効果が期待できる)
20時間以上/月(業務の仕組みを変えるレベル)
📋 講師:回答を見ながら「この数字を1ヶ月後に実績として確認しましょう」と伝えてください。KPI の設定と測定の重要性を強調。
Live Poll — 次のテーマ
次に取り組みたい AI 活用テーマは何ですか?
QRコード
(講師設定)
スマホで
QR を読み取り投票
見積もり自動作成システム
在庫・発注アラートの自動化
日報・月報の自動生成
社内 FAQ チャットボット
📋 講師:「伴走支援の中でこのテーマに取り組みましょう」と次のアクションに繋げてください
Certificate of Completion
上級コース 修了証
AI 活用 企業研修 第2期(上級コース)
本証は、株式会社leale が主催する AI 活用 企業研修 第2期(上級コース)の
3日間プログラムを修了されたことを証明します。

修了者は「AI 管理責任者」として、GWS 環境管理・AI ガバナンス・
Google Apps Script + Claude API による業務自動化システムの
設計・実装・運用を担うことができます。
leale
修了認定
2026年 月 日 修了
第2期 Day 3 TAKEAWAYS

3日間のまとめ

TAKEAWAY 01

要件定義が品質を決める

「誰が・何を・なぜ」を言語化してから作ると、ズレのないシステムができる。AI に要件定義書を書かせる技術も習得した。

TAKEAWAY 02

フォーム → シート → GAS → API の連携

Google エコシステムだけで受付から通知まで全自動化できる。追加費用は Claude API の従量課金のみ(月数百円以下)。

TAKEAWAY 03

PDCA で継続改善する

AI システムは作って終わりではない。月1回のレビューで分類精度・効果を測定し、プロンプトを改善し続ける。

TAKEAWAY 04

全社展開が管理責任者の使命

第2期で得た知識とシステムを第1期受講者(全社員)に展開し、石垣商店全体の AI 活用レベルを引き上げる。

leale 伴走支援のご案内

修了後も継続してサポートします

月次振り返りミーティング・スクリプト改善・新しい AI ツールの導入支援など、石垣商店の AI 活用を継続的にサポートします。困ったことがあればいつでも leale にご連絡ください。