会議で書いたホワイトボードと模造紙の写真から、決定事項・宿題・担当・期限の一覧を作り、議事録の下書きにする
会議で書いたホワイトボード・模造紙・付箋の写真から、決定事項・宿題・担当・期限の一覧を作り、議事録の下書きにします。進行役は、写真を見ながら一から書く代わりに、下書きを確かめて直し、その日のうちに参加者に回します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- IT・SaaS/その他/人材/広告
- 対象部門
- 経営企画
- 対象業務
- データ入力・転記/記録・議事録作成
- 主な課題
- 引き継ぎができていない/書類作成に時間がかかる/期限・対応漏れが起きる
- AIで行う処理
- 画像認識
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 会議の終わりに、進行役がホワイトボードや模造紙をスマートフォンで撮る
- 写真を自分の端末に置いたまま、自席に戻る
- 写真を拡大しながら、板書を議事録の様式に書き起こす
- 決定事項、宿題、担当、期限を、板書の矢印や丸を読みながら整理する
- 担当の名前を参加者の一覧と照らし、「来週金」などの期限を日付に直す
- 議事録をドキュメントにまとめ、参加者に共有する
- 次の会議の冒頭で、前回の宿題を議事録から読み上げる
- 人進行役が会議の登録表(スプレッドシート)に会議名・日付・参加者を入れる(カレンダーの予定から写してもよい)
- 人会議の終わりに板書を撮り、その会議のドライブのフォルダに上げ、登録表の「写真を上げた」に印を付ける
- 自動10分ごとに動くスクリプトが、印の付いた会議を拾い、写真を Gemini API に渡す
- 自動Gemini API が、決定事項・宿題・担当・期限・持ち越しの論点・読めない箇所を、書かれたとおりに JSON で返す
- 自動スクリプトが担当を参加者の一覧と照らし、期限の書き方に印を付けて、議事録の下書きのドキュメントを作る
- 人進行役が下書きを開き、写真と見比べて確定し、参加者に共有する
各工程の詳しい説明を読む
- 会議の終わりに、進行役がホワイトボードや模造紙をスマートフォンで撮る
- 写真を自分の端末に置いたまま、自席に戻る
- 写真を拡大しながら、板書を議事録の様式に書き起こす
- 決定事項、宿題、担当、期限を、板書の矢印や丸を読みながら整理する
- 担当の名前を参加者の一覧と照らし、「来週金」などの期限を日付に直す
- 議事録をドキュメントにまとめ、参加者に共有する
- 次の会議の冒頭で、前回の宿題を議事録から読み上げる
(a)書き起こしに時間がかかる。 板書は斜めに書かれ、矢印でつながり、付箋は重なっています。写真を拡大して読み、どの矢印がどこにつながっているかを追うだけで時間が過ぎます。
(b)宿題の担当と期限が抜ける。 板書の端に小さく書いた「→ 田中 月末」が、書き起こしのときに抜けることがあります。抜けた宿題は、次の会議で「誰がやることになっていたか」が分からなくなります。
(c)議事録が出るのが遅い。 進行役の手が空くまで、議事録は出ません。欠席した人は、次の会議まで何が決まったかを知りません。
(d)写真が進行役の端末に残る。 撮った写真が個人の端末に残り、進行役が異動すると、過去の会議の板書を誰も見られなくなります。
- 【人】 進行役が会議の登録表(スプレッドシート)に会議名・日付・参加者を入れる(カレンダーの予定から写してもよい)
- 【人】 会議の終わりに板書を撮り、その会議のドライブのフォルダに上げ、登録表の「写真を上げた」に印を付ける
- 【自動】 10分ごとに動くスクリプトが、印の付いた会議を拾い、写真を Gemini API に渡す
- 【自動】 Gemini API が、決定事項・宿題・担当・期限・持ち越しの論点・読めない箇所を、書かれたとおりに JSON で返す
- 【自動】 スクリプトが担当を参加者の一覧と照らし、期限の書き方に印を付けて、議事録の下書きのドキュメントを作る
- 【人】 進行役が下書きを開き、写真と見比べて確定し、参加者に共有する
6番目が、この設計の分かれ目です。進行役は板書を一から書き起こしません。 下書きの中で印の付いた箇所(担当が参加者の一覧に無い、期限が「来週金」のように日付でない、読めない箇所)だけを写真と見比べます。印の無い行は読んで確かめるだけです。
議事録の共有は、進行役が確定した後に人が行います。 下書きを自動で参加者に送ると、読み違えた担当の名前が、そのまま本人への宿題として届きます。
02今回想定するシステム構成
会議の登録表(会議名・日付・参加者・写真のフォルダ・「写真を上げた」の印) ▼【トリガー】10分ごとの時間主導のトリガー Google Apps Script ├── 印の付いた会議を拾い、フォルダの写真を取る ├── 写真を縮め、撮った順に並べる ▼ Gemini API(画像の理解・構造化出力)── 会議ごとに写真をまとめて1回 │ 決定事項(◎の印)、宿題(→ 担当 期限) │ 持ち越しの論点(?の印)、消された・取り消し線の行 │ 読めない箇所(写真の番号と枠) ▼ Google Apps Script ── 担当と参加者の一覧の照合、期限の書き方の印 ▼ 議事録の下書き(ドキュメント) / 登録表の状態を「下書きあり」に ▼ 【人】進行役が写真と見比べて確定し、参加者に共有
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Gemini API(板書の写真から決定事項・宿題・担当・期限を返す) | Claude API、OpenAI API |
| 連携 | Google Apps Script(登録表の確認、写真の取得、呼び出し、照合、下書きの作成) | Python |
| 台帳 | 会議の登録表(スプレッドシート) | - |
| 保管 | Google ドライブ(会議ごとのフォルダ)、Google ドキュメント(議事録) | - |
新しく足すのは、Apps Script のスクリプトと Gemini API の契約、そして会議の登録表です。 ドライブもドキュメントもすでに使っているものです。写真が会議ごとのフォルダに集まるので、第3章の(d)の「進行役の端末に残る」もあわせて解けます。
写真を読む土台は、Gemini API の画像の理解です。 公式の案内では、画像の説明、画像についての質問への回答、分類、物の検出に使えるとされています。対応する形式は PNG、JPEG、WEBP、HEIC、HEIF です。1つのリクエストに複数の画像を入れられるので、ホワイトボードを左右に分けて撮った写真や、模造紙の数枚を1回で渡せます。画像を直接入れる場合は、リクエスト全体が20MBまでです。
読めない箇所の位置は、写真の上の枠で返させます。 枠は例では [ymin, xmin, ymax, xmax] の順で 0〜1000 に正規化されます。進行役は、下書きの「読めない箇所」から写真のその位置に飛べます。
出力は構造化出力で受けます。 response_format で mime_type を application/json にし、schema を入れて /v1beta/interactions に送ります。enum で値を決まった文字列に絞れ、format で日付の形も指定できます。値はアプリ側で検証するよう書かれています。
呼び出しは、Apps Script の UrlFetchApp で行います。 fetch(url, params) で、contentType に application/json を入れ、payload に JSON の文字列を入れて POST します。Apps Script の上限は、1回の実行が6分まで、URL Fetch の POST の大きさが1回50MBまでです。1回の実行で1つの会議を処理する形にしておけば、どちらにも収まります。
03どうやって実装するのか
処理の起点を決める
10分ごとに動く時間主導のトリガーを使います。 公式の案内では、時間主導のトリガーは毎分から月1回までの間隔で動かせます。スクリプトは、会議の登録表で「写真を上げた」に印があり、「下書きあり」になっていない会議を1つ拾って処理します。1回の実行で1つの会議だけを処理するのは、6分の上限に収めるためです。
写真が上がったことそのものをきっかけにはしません。 進行役が写真を何枚かに分けて上げている途中で動くと、半分の板書から議事録の下書きができてしまいます。 「写真を上げた」の印を進行役が付けることを、すべて上げ終えた合図にします。
トリガーは、部の管理用のアカウントで作ります。 公式の案内では、インストール型のトリガーは作った人のアカウントで動くとされています。作った進行役が異動するとトリガーの持ち主が変わるので、個人のアカウントでは作りません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 板書の写真 | ホワイトボード、模造紙、付箋の写真。撮った順にファイル名に番号 | 会議ごとのドライブのフォルダ |
| 会議の情報 | 会議名、日付、参加者の一覧(姓名と、板書で使われる呼び方) | 会議の登録表 |
| 書き方の約束 | 決定は◎、宿題は「→ 担当 期限」、持ち越しは?、取り消しは二重線 | 社内で決めて登録表の別のシートに置く |
| 前回の宿題 | 前回の同じ会議の議事録の宿題の一覧 | 前回の議事録のドキュメント |
質を決めるのは、書き方の約束です。 約束が無い板書では、AIは何が決定事項かを文脈から推します。推した決定事項は、話し合いの途中の案と区別がつきません。 約束は会議室のホワイトボードの隅に貼っておき、進行役が会議の最後に「決定」に◎を付ける時間を1分取るのがいちばん効きます。
参加者の一覧には、板書で使われる呼び方を添えます。 板書には「佐藤」「サトウ」「さ」「S」が混ざります。同じ部署に佐藤さんが2人いるなら、板書でどう書き分けるかも一覧に入れておきます。
データの取得方法を決める
写真は、登録表に書かれたフォルダから、Apps Script の Drive のサービスで取ります。 フォルダの getFiles() で写真を並べ、ファイル名の番号の順に並べ替えます。処理が終わった写真は、処理済みのフォルダへ移します。 移すのは下書きができたときだけにします。
Gemini API へは、会議ごとに1回、写真をまとめて渡します。 1枚ずつ呼ぶと、左の写真の矢印が右の写真の担当の名前につながっている、といった写真をまたぐつながりが切れます。 まとめて渡し、撮った順を指示に書きます。
API キーはスクリプトのプロパティに置き、コードに書きません。 スクリプトを部の中で共有したときに、キーが見えてしまうのを防ぎます。
有料の利用枠で使います。 Gemini API の規約では、有料のサービスではプロンプトと応答(画像などのファイルを含む)が製品の改善に使われないとされています。社内の会議の板書を扱うので、無料の枠では使いません。
AIへ渡す前に整形する
- 形式の確認 … PNG、JPEG、WEBP、HEIC、HEIF のどれかであることを確かめます。それ以外は進行役に戻します
- 大きさの確認 … 写真をまとめて20MBを超えるなら、長い辺を縮めます。縮めすぎると小さな字が読めなくなるので、まず枚数を分けて2回に分けることを考えます
- 撮った順の確認 … ファイル名の番号の順に並べ、指示に「1枚目は左端、2枚目は右端」のように書きます
- 参加者の一覧と書き方の約束の付け足し … 登録表から取り、指示に入れます
- 前回の宿題の付け足し … 前回の議事録の宿題の一覧を指示に入れ、板書で「済」と書かれたものを拾えるようにします
- 写真の写り込みの確認 … 人の顔が大きく写っている写真は、進行役に撮り直しか切り抜きを頼みます
2番目を軽く見ないでください。 ホワイトボードの端に小さく書いた宿題こそ、縮めると最初に読めなくなります。写真の枚数を分けて渡すほうが、縮めるより安全です。
AIに処理させる
させるのは、写真から書き方の約束に沿って決定事項・宿題・持ち越しの論点を拾い、担当と期限を書かれたとおりに写し、読めない箇所を返すことだけです。
| 返すもの | 中身 | 判断できないときの扱い |
|---|---|---|
| 決定事項 | ◎の付いた行の文字、写真の番号 | ◎か丸囲みか分からなければ unclear_mark として返す |
| 宿題 | 「→」の後の内容、担当の書かれた文字、期限の書かれた文字 | 担当や期限が書かれていなければ空のまま |
| 持ち越しの論点 | ?の付いた行の文字 | - |
| 取り消された行 | 二重線や×の付いた行の文字 | 消しかけか分からなければ unclear_mark |
| 前回の宿題の済 | 前回の宿題の一覧のどれに「済」と書かれているか | 対応が分からなければ返さない |
| 読めない箇所 | 写真の番号と枠、読めた部分の文字 | 一部だけ読めれば、読めない字を ? にする |
右端の列の考え方は、書かれていないものを埋めないことです。 担当の書かれていない宿題は担当を空のまま返させ、進行役が下書きで空欄に気づけるようにします。 AIが会議の流れから担当を推して埋めると、空欄だったはずの宿題に、たまたま発言の多かった人の名前が入ります。
| させないこと | 理由 |
|---|---|
| 印の無い行を決定事項とする | 話し合いの途中の案と区別がつかない |
| 担当の推測 | 書かれていない担当は、進行役が会議の記憶で埋める |
| 期限の日付への置き換え | 「来週金」が何日かは、会議の日付からスクリプトが出す候補を進行役が確かめる |
| 板書に無い内容の補い | 口頭で決まったことは写真に写っていない |
| 議論の要約や評価 | 議事録に要るのは決定と宿題。評価の言葉は参加者の間で揉める |
3行目がいちばん起きやすい失敗です。 「来週金」を渡すと、AIはどこかの日を起点に計算して日付にしがちです。会議の日付と計算の起点がずれると、1週間ずれた期限が議事録に載ります。 AIには書かれた文字だけを返させ、日付の候補はスクリプトが会議の日付から出します。
指示内容を固定する
あなたは会議の議事録づくりを手伝う係です。
会議で書いたホワイトボード・模造紙・付箋を撮った写真が、撮った順に並んでいます。
{1枚目はホワイトボードの左半分、2枚目は右半分、3枚目は模造紙 など}
【会議】{会議名} {日付}
【参加者】{姓名と、板書で使われる呼び方の一覧}
【書き方の約束】
- ◎ が付いた行は決定事項
- 「→」の後は宿題。「→ 担当 期限」の順に書く
- ? が付いた行は持ち越しの論点
- 二重線や × の付いた行は取り消し
【前回の宿題】{前回の議事録の宿題の一覧}
【やること】
1. ◎ の付いた行を、書かれた文字のまま決定事項として並べる。
2. 「→」の後の宿題を、内容・担当・期限に分け、書かれた文字のまま返す。
3. ? の付いた行を、持ち越しの論点として並べる。
4. 取り消された行を、取り消しとして並べる。
5. 前回の宿題のうち、板書で「済」と書かれたものを返す。
6. 読めない箇所を、写真の番号と枠 [ymin, xmin, ymax, xmax](0〜1000 に正規化)で返す。
読めた部分の文字も返し、読めない字は ? にする。
【厳守事項】
- 印の無い行を、決定事項にしないでください。
- 担当が書かれていない宿題は、担当を空にしてください。推測で埋めないでください。
- 期限は書かれた文字のまま返してください。日付に置き換えないでください。
- 書かれた文字を言い換えたり、言葉を補ったりしないでください。
- 写真に写っていない内容を書かないでください。
- 議論の要約、評価、感想を書かないでください。
- 写真に人が写っていても、人については何も書かないでください。
「日付に置き換えない」を明記しないと、親切に日付にします。 しかも、どの日を起点にしたかは返ってきません。置き換えを禁じるのは、計算の起点を会議の日付に固定するためです。
「言葉を補わない」も同じ理由です。 補った言葉は、会議で合意された説明のように読まれます。
出力形式を固定する
会議ごとに、次の形の JSON で受け取ります。 mark は enum で決まった文字列に絞ります。
{
"meeting_id": "",
"decisions": [
{ "text": "案B で進める", "image_no": 2, "mark": "double_circle | unclear_mark" }
],
"action_items": [
{ "task": "見積を取り直す", "owner_text": "佐藤", "due_text": "来週金", "image_no": 2 }
],
"open_issues": [ { "text": "予算の上限は?", "image_no": 1 } ],
"cancelled": [ { "text": "案A", "image_no": 1 } ],
"previous_done": [ "前回の宿題の番号" ],
"unreadable": [ { "image_no": 3, "box_2d": [120, 640, 180, 900], "partial_text": "→ ?中 月末" } ]
}
1つ目の理由は、owner_text と due_text を書かれた文字のまま受けられることです。 スクリプトは owner_text を参加者の一覧の呼び方と照らし、1人に決まれば姓名を、決まらなければ「担当の確認」の印を付けます。due_text は、会議の日付から日付の候補を出し、「来週金 → 10/23(候補)」のように両方を下書きに並べます。 確定するのは進行役です。
2つ目は、unreadable から写真の位置に飛べることです。 下書きの「読めない箇所」の行に写真の番号と枠を書いておけば、進行役は写真のその位置を拡大して見るだけで済みます。
3つ目は、previous_done で前回の宿題を閉じられることです。 前回の宿題のうち「済」と書かれたものを下書きで閉じ、閉じられていない宿題を次の会議の冒頭に読み上げる一覧にします。
期限の候補は、スクリプトが決まった規則で出します。 AIには due_text と一緒に、書かれた期限の種類を due_kind として返させます。
due_kind | 書き方の例 | スクリプトの扱い |
|---|---|---|
absolute | 10/24、24日 | 会議の日付の年と月を補って日付にする(月をまたぐなら翌月) |
relative | 来週金、月末、明日 | 会議の日付を起点に候補を出し、「(候補)」と付ける |
next_meeting | 次回まで、次回 | 登録表の次の同じ会議の日付を入れる。無ければ空欄 |
none | 書かれていない | 空欄のまま、下書きで「期限の確認」の印 |
relative を候補として扱うのは、「来週」の読み方が人によって違うからです。
response_format の schema には、次のように値を絞った形を入れます(抜粋)。
{
"type": "object",
"properties": {
"decisions": { "type": "array", "items": { "type": "object",
"properties": {
"text": { "type": "string" },
"image_no": { "type": "integer" },
"mark": { "type": "string", "enum": ["double_circle", "unclear_mark"] }
},
"required": ["text", "image_no", "mark"] } },
"action_items": { "type": "array", "items": { "type": "object",
"properties": {
"task": { "type": "string" },
"owner_text": { "type": "string" },
"due_text": { "type": "string" },
"due_kind": { "type": "string", "enum": ["absolute", "relative", "next_meeting", "none"] }
},
"required": ["task", "owner_text", "due_text", "due_kind"] } },
"unreadable": { "type": "array" }
},
"required": ["decisions", "action_items", "open_issues", "cancelled", "unreadable"]
} システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 会議の登録表 | Apps Script の読み書き | 印の付いた会議を拾い、処理の状態を書き戻す |
| ドライブのフォルダ | Apps Script の Drive のサービス | 写真を取り、処理済みのフォルダへ移す |
| Gemini API | UrlFetchApp で POST(/v1beta/interactions) | 決定事項・宿題・担当・期限・読めない箇所を返す |
| ドキュメント | Apps Script の Document のサービス | 議事録の下書きを create で作り、会議のフォルダに置く |
| 参加者への共有 | 進行役が手で行う | この構成からは送らない |
スクリプトの流れは、次のように短いものです(要点だけ)。
function processOneMeeting() {
// 1. 登録表から「写真を上げた」に印があり、「下書きあり」でない会議を1つ拾う
// 2. その会議のフォルダの getFiles() で写真を取り、ファイル名の番号順に並べる
// 3. 写真を base64 にし、指示の文と一緒に input に並べる(文は写真の後ろ)
// 4. UrlFetchApp.fetch(url, { method: 'post', contentType: 'application/json',
// payload: JSON.stringify(body), headers: { 'x-goog-api-key': key } })
// 5. 返った JSON の enum の値と image_no の範囲を確かめる
// 6. owner_text を参加者の呼び方と照らし、due_kind で期限の候補を出す
// 7. DocumentApp.create() で下書きを作り、会議のフォルダへ移す
// 8. 写真を処理済みのフォルダへ移し、登録表を「下書きあり」にする
}
5番目の確かめを省かないでください。 構文として正しい JSON でも、image_no が写真の枚数を超えることがあります。
参加者への共有は、スクリプトからは行いません。 共有の宛先を自動で決めると、担当の照合の誤りがそのまま宿題の通知になります。 下書きができたら、登録表の状態を「下書きあり」にし、進行役が開くのを待ちます。
人が確認する
- 印の付いた行から見る … 「担当の確認」「期限の候補」「読めない箇所」「
unclear_mark」の行を、写真と見比べます - 担当の空欄を埋める … 板書に担当が書かれていなかった宿題は、会議の記憶で埋めるか、担当を決める宿題として持ち越します
- 期限を確定する … 候補の日付が会議の意図と合っているかを確かめます
- 口頭で決まったことを足す … 板書に書かれなかった決定は、進行役が足します
- 参加者に共有する … 確定した議事録を共有します
4番目を省かないでください。 写真に写っていないことは、AIの下書きにはありません。下書きにすべてが載っていると思い込むと、口頭で決めたことが議事録から消えます。
目標は、会議の当日のうちに共有することです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 写真がぶれていて読めない | unreadable が多くなる。進行役が撮り直すか、読めた範囲で確定する |
| 書き方の約束の印が使われていない | 決定事項が空になる。進行役が足し、次の会議から約束を貼る |
| 担当が参加者の一覧に無い | 「担当の確認」の印。社外の人や欠席者のこともある |
| 写真をまとめて20MBを超える | 2回に分けて呼び、結果をつなぐ |
| 6分の実行時間を超える | 写真の枚数を分け、次の回の実行で続きを処理する |
JSON の値が enum に無い | その会議は下書きを作らず、登録表に「要確認」と書く |
| Gemini API が応答しない | 登録表の状態を変えず、次の回に呼び直す |
上から2行目までが大半を占めます。 どちらもAIの精度の問題ではなく、撮り方と書き方の約束の問題です。 会議の最後に1分取って◎を付け、正面から撮るほうが、指示の文をいじるより効きます。
記録を残す
- 会議ごとの写真(ドライブのフォルダ)と、Gemini API が返した JSON の全文
- 指示に入れた参加者の一覧と、そのときの書き方の約束の版
- 進行役が確定した議事録と、下書きから直した箇所(担当、期限、足した決定)
- 登録表の処理の状態の記録(拾った日時、下書きができた日時、共有した日時)
3つ目の「直した箇所」が、運用を直す材料です。 担当の空欄を埋めた件が多い会議は、板書に担当を書く習慣が根づいていません。会議ごとの違いが見えれば、進行役どうしで書き方をそろえる話ができます。
04実装レベルの3段階
最小構成では件数がさばけません。 月120件には使えません。確かめるための段階です。 半自動化で、1件15分が5分になり、この段階が本記事の想定です。 書き起こしと整理は自動になり、進行役は印の付いた行を確かめて共有するだけです。本格構成では登録表の入力と宿題の追いかけが減りますが、時間の差は小さく、カレンダーの予定と会議の対応づけを作る手間が先に要ります。 段階を飛ばさないでください。 半自動化を1か月回すと、書き方の約束が守られている会議と守られていない会議が分かります。約束が根づいてから本格構成に進むほうが、宿題の知らせが空振りしません。
05工数削減シミュレーション
導入後 120件 × 5分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 部門をまたぐ定例会議や企画のワークショップで、ホワイトボードや模造紙と付箋を使って議論し、終わった後に進行役が写真を見ながら議事録を書いている会社。Google Workspace を使っていて、写真をドライブに上げる運用がすでにある場合。会議の後に議事録が出るまで数日かかり、宿題の担当と期限が参加者に伝わらないまま次の会議を迎えることがある場合。
- 会議の大半がオンラインで、ホワイトボードや模造紙を使わない場合(文字起こしからの議事録のほうが向きます)。板書に決定事項を書く習慣がなく、決まったことが口頭だけで終わる場合。役員会や取締役会など、議事録の記載に法令や規程の要件がある会議。なお、何が決まったかの確定、担当と期限の確定、議事録の配布は、この構成では代替できません。
07最小構成で試す方法
- 先月の会議から10件の板書の写真を選ぶ(うち数件は、宿題の担当や期限が議事録から抜けたと分かっているものを入れる)
- 書き方の約束(◎、→、?、二重線)を紙に書き出す
- Gemini API の有料の利用枠で、会議ごとに写真と約束を渡す
- 「◎の付いた行を決定事項、→の後を宿題として、書かれた文字のまま返してください。担当や期限が書かれていなければ空にしてください。日付に置き換えないでください」と指示する
- 出てきた一覧を、当時の議事録と突き合わせる
10件は必ずやってください。 スクリプトを組む前に、「自社の板書の書き方と撮り方で、拾えるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の議事録と同じ決定事項と宿題が出た | 登録表と Apps Script の連携に進む |
| 期限を日付に直した、担当を推して埋めた | 指示の書き方で直る。構成は有効 |
| 決定事項がほとんど空になる | 書き方の約束が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 失敗ではなく、議事録を書くのに時間がかかっていた理由が1つ分かったということです。 板書のどこが決定だったかを、進行役が会議の記憶で補っていたからです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 印の無い行を決定事項にする | 書き方の約束で拾わせ、印の無い行は決定にしない |
| 「来週金」を日付に置き換える | 書かれた文字のまま返させ、会議の日付からスクリプトが候補を出す |
| 担当を推して埋める | 空のまま返させ、進行役が埋める |
| 写真を1枚ずつ呼んで矢印が切れる | 会議ごとにまとめて渡し、撮った順を書く |
| 写真を縮めすぎて端の字が読めない | 縮めるより枚数を分けて2回に分ける |
| 6分の実行時間を超える | 1回の実行で1つの会議だけを処理する |
| トリガーが作った人の異動で止まる | 部の管理用のアカウントで作る |
| API キーがコードに書かれている | スクリプトのプロパティに置く |
| 口頭の決定が議事録から消える | 進行役が確認のときに足す |
上の2行が、この構成の失敗のほとんどです。 どちらも「書かれていないことを、書かれたように整える」失敗です。書かれた文字のまま返させ、整える作業を規則と人に置くかどうかで、運用に乗るかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 会議の板書の写真(未発表の企画、数字、取引先の名前が書かれることがある)、参加者の姓名、宿題の担当と期限です。写真には参加者の姿が写り込むことがあります。
- 扱う会議の範囲を決める … 人事の評価や処遇を話す会議、M&A などの機密の高い会議の板書は、この仕組みに乗せないと決めておきます。登録表に「対象外」の欄を置きます
- 有料の利用枠で使う … 規約では、有料のサービスでは、プロンプトと応答(画像などのファイルを含む)が製品の改善に使われないとされています。一方で、禁止された使い方の検知などのために限られた期間記録されることも書かれています
- 利用者を社員に限る … 規約は18歳以上であることを利用の条件とし、18歳未満が使う、または使いうるサービスに組み込むことを禁じています。この仕組みを使うのは社員の進行役だけにし、学生のインターンが参加するワークショップの写真の扱いは別に決めます
- 写真のフォルダの共有範囲を絞る … 会議ごとのフォルダは、その会議の参加者と経営企画部だけが見られるようにします
- API キーとトリガーを個人に持たせない … キーはスクリプトのプロパティに置き、トリガーは部の管理用のアカウントで作ります
誤りが起きた場合のリスクは、話し合いの途中の案を決定事項として回すことと、宿題の担当や期限を取り違えて伝えることの2つです。 前者は印の無い行を拾わせると起き、後者は担当や期限を推させると起きます。どちらも、書かれたとおりに拾わせる設計で防げます。
10まず何から始めるか
1週目:書き方の約束を決める
決定は◎、宿題は「→ 担当 期限」、持ち越しは?、取り消しは二重線、という約束を決め、会議室のホワイトボードの隅に貼ります。 進行役が会議の最後に1分取って◎を付けることも決めます。
2週目:10件で試す
先月の会議の板書の写真10件と約束を Gemini API に渡し、決定事項と宿題を出させます。宿題の担当や期限が抜けた件で、何が出ていたかを最優先で見ます。
3週目:登録表とフォルダを作る
会議の登録表(会議名・日付・参加者・写真のフォルダ・「写真を上げた」の印・処理の状態)と、会議ごとのドライブのフォルダを作ります。部の管理用のアカウントを用意します。
4週目:Apps Script で下書きまでをつなぐ
10分ごとのトリガーで、印の付いた会議を拾い、写真を渡して議事録の下書きを作るところまで作ります。この時点では期限の候補を出さず、書かれた文字のまま並べます。
2か月目: 担当の照合と期限の候補を足し、進行役が直した箇所を毎週数えます。3か月目以降: 会議の当日に共有できた割合と、1件15分が何分になったかを実測します。書き方の約束がどの会議でも守られ、議事録が会議の当日に出るのがふつうになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
画像の説明・質問への回答・分類・物の検出に使えること。対応する形式(PNG、JPEG、WEBP、HEIC、HEIF)。画像を直接入れる場合にリクエスト全体が20MBまでであること。1つのリクエストに複数の画像を入れられること。枠が [ymin, xmin, ymax, xmax] の順で 0〜1000 に正規化されること。画像のトークンの換算(384ピクセル以下は258トークン、それより大きいものは768×768の区画ごとに258トークン) | Gemini API: Image understanding | 2026-10-15 |
構造化出力が response_format で mime_type を application/json にし、schema にスキーマを入れる形で /v1beta/interactions に送ること。enum と、文字列の format(date など)が使えること。値はアプリ側で検証するよう書かれていること | Gemini API: Structured output | 2026-10-15 |
| 有料のサービスではプロンプトと応答(画像などのファイルを含む)が製品の改善に使われないこと。禁止された使い方の検知などのために限られた期間記録されること。18歳以上であることが利用の条件で、18歳未満が使う、または使いうるサービスに組み込まないこと | Gemini API Additional Terms of Service | 2026-10-15 |
| 時間主導のトリガーが毎分から月1回までの間隔で動かせること。インストール型のトリガーが作った人のアカウントで動くこと | Apps Script: Installable triggers | 2026-10-15 |
| 1回の実行が6分まで。トリガーの合計の実行時間(一般90分/Workspace 6時間 毎日)、URL Fetch の呼び出し(20,000/100,000回 毎日)、ドキュメントの作成(250/1,500件 毎日)、URL Fetch の POST の大きさが1回50MBまで | Apps Script: Quotas for Google Services | 2026-10-15 |
fetch(url, params) で contentType と payload を指定して JSON を POST できること | Apps Script: UrlFetchApp | 2026-10-15 |
議事録の記載の決まりと共有の範囲は、自社の会議の規程に沿って決めてください。 本記事は公開の資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1609)についてのご相談はこちらから。
