Media > AI活用ユースケース > 経営企画 > 会議で書いたホワイトボードと模造紙の写真から、決定事項・宿題・担当・期限の一覧を作り、議事録の下書きにする

会議で書いたホワイトボードと模造紙の写真から、決定事項・宿題・担当・期限の一覧を作り、議事録の下書きにする

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

会議で書いたホワイトボード・模造紙・付箋の写真から、決定事項・宿題・担当・期限の一覧を作り、議事録の下書きにします。進行役は、写真を見ながら一から書く代わりに、下書きを確かめて直し、その日のうちに参加者に回します。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Python
対象業界
IT・SaaS/その他/人材/広告
対象部門
経営企画
対象業務
データ入力・転記/記録・議事録作成
主な課題
引き継ぎができていない/書類作成に時間がかかる/期限・対応漏れが起きる
AIで行う処理
画像認識
主な効果
入力漏れ削減/対応スピード向上/工数削減
導入難易度
★☆☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
30h/月
AI導入後
10h/月
想定削減
67%
年間削減
240h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 会議の終わりに、進行役がホワイトボードや模造紙をスマートフォンで撮る
  2. 写真を自分の端末に置いたまま、自席に戻る
  3. 写真を拡大しながら、板書を議事録の様式に書き起こす
  4. 決定事項、宿題、担当、期限を、板書の矢印や丸を読みながら整理する
  5. 担当の名前を参加者の一覧と照らし、「来週金」などの期限を日付に直す
  6. 議事録をドキュメントにまとめ、参加者に共有する
  7. 次の会議の冒頭で、前回の宿題を議事録から読み上げる
導入後(After)
  1. 人進行役が会議の登録表(スプレッドシート)に会議名・日付・参加者を入れる(カレンダーの予定から写してもよい)
  2. 人会議の終わりに板書を撮り、その会議のドライブのフォルダに上げ、登録表の「写真を上げた」に印を付ける
  3. 自動10分ごとに動くスクリプトが、印の付いた会議を拾い、写真を Gemini API に渡す
  4. 自動Gemini API が、決定事項・宿題・担当・期限・持ち越しの論点・読めない箇所を、書かれたとおりに JSON で返す
  5. 自動スクリプトが担当を参加者の一覧と照らし、期限の書き方に印を付けて、議事録の下書きのドキュメントを作る
  6. 人進行役が下書きを開き、写真と見比べて確定し、参加者に共有する
各工程の詳しい説明を読む
  1. 会議の終わりに、進行役がホワイトボードや模造紙をスマートフォンで撮る
  2. 写真を自分の端末に置いたまま、自席に戻る
  3. 写真を拡大しながら、板書を議事録の様式に書き起こす
  4. 決定事項、宿題、担当、期限を、板書の矢印や丸を読みながら整理する
  5. 担当の名前を参加者の一覧と照らし、「来週金」などの期限を日付に直す
  6. 議事録をドキュメントにまとめ、参加者に共有する
  7. 次の会議の冒頭で、前回の宿題を議事録から読み上げる

(a)書き起こしに時間がかかる。 板書は斜めに書かれ、矢印でつながり、付箋は重なっています。写真を拡大して読み、どの矢印がどこにつながっているかを追うだけで時間が過ぎます。

(b)宿題の担当と期限が抜ける。 板書の端に小さく書いた「→ 田中 月末」が、書き起こしのときに抜けることがあります。抜けた宿題は、次の会議で「誰がやることになっていたか」が分からなくなります。

(c)議事録が出るのが遅い。 進行役の手が空くまで、議事録は出ません。欠席した人は、次の会議まで何が決まったかを知りません。

(d)写真が進行役の端末に残る。 撮った写真が個人の端末に残り、進行役が異動すると、過去の会議の板書を誰も見られなくなります。

  1. 【人】 進行役が会議の登録表(スプレッドシート)に会議名・日付・参加者を入れる(カレンダーの予定から写してもよい)
  2. 【人】 会議の終わりに板書を撮り、その会議のドライブのフォルダに上げ、登録表の「写真を上げた」に印を付ける
  3. 【自動】 10分ごとに動くスクリプトが、印の付いた会議を拾い、写真を Gemini API に渡す
  4. 【自動】 Gemini API が、決定事項・宿題・担当・期限・持ち越しの論点・読めない箇所を、書かれたとおりに JSON で返す
  5. 【自動】 スクリプトが担当を参加者の一覧と照らし、期限の書き方に印を付けて、議事録の下書きのドキュメントを作る
  6. 【人】 進行役が下書きを開き、写真と見比べて確定し、参加者に共有する

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どうやって実装するのか

Step1

処理の起点を決める

10分ごとに動く時間主導のトリガーを使います。 公式の案内では、時間主導のトリガーは毎分から月1回までの間隔で動かせます。スクリプトは、会議の登録表で「写真を上げた」に印があり、「下書きあり」になっていない会議を1つ拾って処理します。1回の実行で1つの会議だけを処理するのは、6分の上限に収めるためです。

写真が上がったことそのものをきっかけにはしません。 進行役が写真を何枚かに分けて上げている途中で動くと、半分の板書から議事録の下書きができてしまいます。 「写真を上げた」の印を進行役が付けることを、すべて上げ終えた合図にします。

トリガーは、部の管理用のアカウントで作ります。 公式の案内では、インストール型のトリガーは作った人のアカウントで動くとされています。作った進行役が異動するとトリガーの持ち主が変わるので、個人のアカウントでは作りません。

Step2

入力データを集める

データ中身取得元
板書の写真ホワイトボード、模造紙、付箋の写真。撮った順にファイル名に番号会議ごとのドライブのフォルダ
会議の情報会議名、日付、参加者の一覧(姓名と、板書で使われる呼び方)会議の登録表
書き方の約束決定は◎、宿題は「→ 担当 期限」、持ち越しは?、取り消しは二重線社内で決めて登録表の別のシートに置く
前回の宿題前回の同じ会議の議事録の宿題の一覧前回の議事録のドキュメント

質を決めるのは、書き方の約束です。 約束が無い板書では、AIは何が決定事項かを文脈から推します。推した決定事項は、話し合いの途中の案と区別がつきません。 約束は会議室のホワイトボードの隅に貼っておき、進行役が会議の最後に「決定」に◎を付ける時間を1分取るのがいちばん効きます。

参加者の一覧には、板書で使われる呼び方を添えます。 板書には「佐藤」「サトウ」「さ」「S」が混ざります。同じ部署に佐藤さんが2人いるなら、板書でどう書き分けるかも一覧に入れておきます。

Step3

データの取得方法を決める

写真は、登録表に書かれたフォルダから、Apps Script の Drive のサービスで取ります。 フォルダの getFiles() で写真を並べ、ファイル名の番号の順に並べ替えます。処理が終わった写真は、処理済みのフォルダへ移します。 移すのは下書きができたときだけにします。

Gemini API へは、会議ごとに1回、写真をまとめて渡します。 1枚ずつ呼ぶと、左の写真の矢印が右の写真の担当の名前につながっている、といった写真をまたぐつながりが切れます。 まとめて渡し、撮った順を指示に書きます。

API キーはスクリプトのプロパティに置き、コードに書きません。 スクリプトを部の中で共有したときに、キーが見えてしまうのを防ぎます。

有料の利用枠で使います。 Gemini API の規約では、有料のサービスではプロンプトと応答(画像などのファイルを含む)が製品の改善に使われないとされています。社内の会議の板書を扱うので、無料の枠では使いません。

Step4

AIへ渡す前に整形する

  1. 形式の確認 … PNG、JPEG、WEBP、HEIC、HEIF のどれかであることを確かめます。それ以外は進行役に戻します
  2. 大きさの確認 … 写真をまとめて20MBを超えるなら、長い辺を縮めます。縮めすぎると小さな字が読めなくなるので、まず枚数を分けて2回に分けることを考えます
  3. 撮った順の確認 … ファイル名の番号の順に並べ、指示に「1枚目は左端、2枚目は右端」のように書きます
  4. 参加者の一覧と書き方の約束の付け足し … 登録表から取り、指示に入れます
  5. 前回の宿題の付け足し … 前回の議事録の宿題の一覧を指示に入れ、板書で「済」と書かれたものを拾えるようにします
  6. 写真の写り込みの確認 … 人の顔が大きく写っている写真は、進行役に撮り直しか切り抜きを頼みます

2番目を軽く見ないでください。 ホワイトボードの端に小さく書いた宿題こそ、縮めると最初に読めなくなります。写真の枚数を分けて渡すほうが、縮めるより安全です。

Step5

AIに処理させる

させるのは、写真から書き方の約束に沿って決定事項・宿題・持ち越しの論点を拾い、担当と期限を書かれたとおりに写し、読めない箇所を返すことだけです。

返すもの中身判断できないときの扱い
決定事項◎の付いた行の文字、写真の番号◎か丸囲みか分からなければ unclear_mark として返す
宿題「→」の後の内容、担当の書かれた文字、期限の書かれた文字担当や期限が書かれていなければ空のまま
持ち越しの論点?の付いた行の文字-
取り消された行二重線や×の付いた行の文字消しかけか分からなければ unclear_mark
前回の宿題の済前回の宿題の一覧のどれに「済」と書かれているか対応が分からなければ返さない
読めない箇所写真の番号と枠、読めた部分の文字一部だけ読めれば、読めない字を ? にする

右端の列の考え方は、書かれていないものを埋めないことです。 担当の書かれていない宿題は担当を空のまま返させ、進行役が下書きで空欄に気づけるようにします。 AIが会議の流れから担当を推して埋めると、空欄だったはずの宿題に、たまたま発言の多かった人の名前が入ります。

させないこと理由
印の無い行を決定事項とする話し合いの途中の案と区別がつかない
担当の推測書かれていない担当は、進行役が会議の記憶で埋める
期限の日付への置き換え「来週金」が何日かは、会議の日付からスクリプトが出す候補を進行役が確かめる
板書に無い内容の補い口頭で決まったことは写真に写っていない
議論の要約や評価議事録に要るのは決定と宿題。評価の言葉は参加者の間で揉める

3行目がいちばん起きやすい失敗です。 「来週金」を渡すと、AIはどこかの日を起点に計算して日付にしがちです。会議の日付と計算の起点がずれると、1週間ずれた期限が議事録に載ります。 AIには書かれた文字だけを返させ、日付の候補はスクリプトが会議の日付から出します。

Step6

指示内容を固定する

あなたは会議の議事録づくりを手伝う係です。
会議で書いたホワイトボード・模造紙・付箋を撮った写真が、撮った順に並んでいます。
{1枚目はホワイトボードの左半分、2枚目は右半分、3枚目は模造紙 など}

【会議】{会議名} {日付}
【参加者】{姓名と、板書で使われる呼び方の一覧}
【書き方の約束】
- ◎ が付いた行は決定事項
- 「→」の後は宿題。「→ 担当 期限」の順に書く
- ? が付いた行は持ち越しの論点
- 二重線や × の付いた行は取り消し
【前回の宿題】{前回の議事録の宿題の一覧}

【やること】
1. ◎ の付いた行を、書かれた文字のまま決定事項として並べる。
2. 「→」の後の宿題を、内容・担当・期限に分け、書かれた文字のまま返す。
3. ? の付いた行を、持ち越しの論点として並べる。
4. 取り消された行を、取り消しとして並べる。
5. 前回の宿題のうち、板書で「済」と書かれたものを返す。
6. 読めない箇所を、写真の番号と枠 [ymin, xmin, ymax, xmax](0〜1000 に正規化)で返す。
   読めた部分の文字も返し、読めない字は ? にする。

【厳守事項】
- 印の無い行を、決定事項にしないでください。
- 担当が書かれていない宿題は、担当を空にしてください。推測で埋めないでください。
- 期限は書かれた文字のまま返してください。日付に置き換えないでください。
- 書かれた文字を言い換えたり、言葉を補ったりしないでください。
- 写真に写っていない内容を書かないでください。
- 議論の要約、評価、感想を書かないでください。
- 写真に人が写っていても、人については何も書かないでください。

「日付に置き換えない」を明記しないと、親切に日付にします。 しかも、どの日を起点にしたかは返ってきません。置き換えを禁じるのは、計算の起点を会議の日付に固定するためです。

「言葉を補わない」も同じ理由です。 補った言葉は、会議で合意された説明のように読まれます。

Step7

出力形式を固定する

会議ごとに、次の形の 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書き方の例スクリプトの扱い
absolute10/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"]
}
Step8

システムへ連携する

つなぎ先方式内容
会議の登録表Apps Script の読み書き印の付いた会議を拾い、処理の状態を書き戻す
ドライブのフォルダApps Script の Drive のサービス写真を取り、処理済みのフォルダへ移す
Gemini APIUrlFetchApp で 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 が写真の枚数を超えることがあります。

参加者への共有は、スクリプトからは行いません。 共有の宛先を自動で決めると、担当の照合の誤りがそのまま宿題の通知になります。 下書きができたら、登録表の状態を「下書きあり」にし、進行役が開くのを待ちます。

Step9

人が確認する

  1. 印の付いた行から見る … 「担当の確認」「期限の候補」「読めない箇所」「unclear_mark」の行を、写真と見比べます
  2. 担当の空欄を埋める … 板書に担当が書かれていなかった宿題は、会議の記憶で埋めるか、担当を決める宿題として持ち越します
  3. 期限を確定する … 候補の日付が会議の意図と合っているかを確かめます
  4. 口頭で決まったことを足す … 板書に書かれなかった決定は、進行役が足します
  5. 参加者に共有する … 確定した議事録を共有します

4番目を省かないでください。 写真に写っていないことは、AIの下書きにはありません。下書きにすべてが載っていると思い込むと、口頭で決めたことが議事録から消えます。

目標は、会議の当日のうちに共有することです。

Step10

例外に対処する

起きること対応
写真がぶれていて読めないunreadable が多くなる。進行役が撮り直すか、読めた範囲で確定する
書き方の約束の印が使われていない決定事項が空になる。進行役が足し、次の会議から約束を貼る
担当が参加者の一覧に無い「担当の確認」の印。社外の人や欠席者のこともある
写真をまとめて20MBを超える2回に分けて呼び、結果をつなぐ
6分の実行時間を超える写真の枚数を分け、次の回の実行で続きを処理する
JSON の値が enum に無いその会議は下書きを作らず、登録表に「要確認」と書く
Gemini API が応答しない登録表の状態を変えず、次の回に呼び直す

上から2行目までが大半を占めます。 どちらもAIの精度の問題ではなく、撮り方と書き方の約束の問題です。 会議の最後に1分取って◎を付け、正面から撮るほうが、指示の文をいじるより効きます。

Step11

記録を残す

  • 会議ごとの写真(ドライブのフォルダ)と、Gemini API が返した JSON の全文
  • 指示に入れた参加者の一覧と、そのときの書き方の約束の版
  • 進行役が確定した議事録と、下書きから直した箇所(担当、期限、足した決定)
  • 登録表の処理の状態の記録(拾った日時、下書きができた日時、共有した日時)

3つ目の「直した箇所」が、運用を直す材料です。 担当の空欄を埋めた件が多い会議は、板書に担当を書く習慣が根づいていません。会議ごとの違いが見えれば、進行役どうしで書き方をそろえる話ができます。

04実装レベルの3段階

最小構成:写真と約束を手で渡し、決定事項と宿題を出させる / 1会議ごとの書き起こし
半自動化:上記+登録表とドライブのフォルダを起点に Apps Script で呼び、議事録の下書きを作る / 書き起こしと下書きの作成
本格構成:上記+カレンダーの予定から登録表を自動で作り、閉じられていない宿題を次の会議の前に進行役へ知らせる / 会議の前後の全体

最小構成では件数がさばけません。 月120件には使えません。確かめるための段階です。 半自動化で、1件15分が5分になり、この段階が本記事の想定です。 書き起こしと整理は自動になり、進行役は印の付いた行を確かめて共有するだけです。本格構成では登録表の入力と宿題の追いかけが減りますが、時間の差は小さく、カレンダーの予定と会議の対応づけを作る手間が先に要ります。 段階を飛ばさないでください。 半自動化を1か月回すと、書き方の約束が守られている会議と守られていない会議が分かります。約束が根づいてから本格構成に進むほうが、宿題の知らせが空振りしません。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
8 名
月間件数
120 件
1件あたり現在時間
15 分
1件あたり導入後時間
5 分
現在  120件 × 15分 ÷ 60 = 30 時間/月
導入後 120件 × 5分 ÷ 60 = 10 時間/月
月間削減時間
20h
削減率
67%
年間削減時間
240h
年間金額換算(時間単価3,500円)
84万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 部門をまたぐ定例会議や企画のワークショップで、ホワイトボードや模造紙と付箋を使って議論し、終わった後に進行役が写真を見ながら議事録を書いている会社。Google Workspace を使っていて、写真をドライブに上げる運用がすでにある場合。会議の後に議事録が出るまで数日かかり、宿題の担当と期限が参加者に伝わらないまま次の会議を迎えることがある場合。
向いていない
  1. 会議の大半がオンラインで、ホワイトボードや模造紙を使わない場合(文字起こしからの議事録のほうが向きます)。板書に決定事項を書く習慣がなく、決まったことが口頭だけで終わる場合。役員会や取締役会など、議事録の記載に法令や規程の要件がある会議。なお、何が決まったかの確定、担当と期限の確定、議事録の配布は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の会議から10件の板書の写真を選ぶ(うち数件は、宿題の担当や期限が議事録から抜けたと分かっているものを入れる)
  2. 書き方の約束(◎、→、?、二重線)を紙に書き出す
  3. Gemini API の有料の利用枠で、会議ごとに写真と約束を渡す
  4. 「◎の付いた行を決定事項、→の後を宿題として、書かれた文字のまま返してください。担当や期限が書かれていなければ空にしてください。日付に置き換えないでください」と指示する
  5. 出てきた一覧を、当時の議事録と突き合わせる

10件は必ずやってください。 スクリプトを組む前に、「自社の板書の書き方と撮り方で、拾えるのか」を確かめます。

出てきた内容判断
当時の議事録と同じ決定事項と宿題が出た登録表と Apps Script の連携に進む
期限を日付に直した、担当を推して埋めた指示の書き方で直る。構成は有効
決定事項がほとんど空になる書き方の約束が先。 AIの問題ではない

3行目が出ることは珍しくありません。 失敗ではなく、議事録を書くのに時間がかかっていた理由が1つ分かったということです。 板書のどこが決定だったかを、進行役が会議の記憶で補っていたからです。

08実装時につまずきやすいポイント

問題対策
印の無い行を決定事項にする書き方の約束で拾わせ、印の無い行は決定にしない
「来週金」を日付に置き換える書かれた文字のまま返させ、会議の日付からスクリプトが候補を出す
担当を推して埋める空のまま返させ、進行役が埋める
写真を1枚ずつ呼んで矢印が切れる会議ごとにまとめて渡し、撮った順を書く
写真を縮めすぎて端の字が読めない縮めるより枚数を分けて2回に分ける
6分の実行時間を超える1回の実行で1つの会議だけを処理する
トリガーが作った人の異動で止まる部の管理用のアカウントで作る
API キーがコードに書かれているスクリプトのプロパティに置く
口頭の決定が議事録から消える進行役が確認のときに足す

上の2行が、この構成の失敗のほとんどです。 どちらも「書かれていないことを、書かれたように整える」失敗です。書かれた文字のまま返させ、整える作業を規則と人に置くかどうかで、運用に乗るかが決まります。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 会議の板書の写真(未発表の企画、数字、取引先の名前が書かれることがある)、参加者の姓名、宿題の担当と期限です。写真には参加者の姿が写り込むことがあります。

  1. 扱う会議の範囲を決める … 人事の評価や処遇を話す会議、M&A などの機密の高い会議の板書は、この仕組みに乗せないと決めておきます。登録表に「対象外」の欄を置きます
  2. 有料の利用枠で使う … 規約では、有料のサービスでは、プロンプトと応答(画像などのファイルを含む)が製品の改善に使われないとされています。一方で、禁止された使い方の検知などのために限られた期間記録されることも書かれています
  3. 利用者を社員に限る … 規約は18歳以上であることを利用の条件とし、18歳未満が使う、または使いうるサービスに組み込むことを禁じています。この仕組みを使うのは社員の進行役だけにし、学生のインターンが参加するワークショップの写真の扱いは別に決めます
  4. 写真のフォルダの共有範囲を絞る … 会議ごとのフォルダは、その会議の参加者と経営企画部だけが見られるようにします
  5. API キーとトリガーを個人に持たせない … キーはスクリプトのプロパティに置き、トリガーは部の管理用のアカウントで作ります

誤りが起きた場合のリスクは、話し合いの途中の案を決定事項として回すことと、宿題の担当や期限を取り違えて伝えることの2つです。 前者は印の無い行を拾わせると起き、後者は担当や期限を推させると起きます。どちらも、書かれたとおりに拾わせる設計で防げます。

10まず何から始めるか

1週目:書き方の約束を決める

決定は◎、宿題は「→ 担当 期限」、持ち越しは?、取り消しは二重線、という約束を決め、会議室のホワイトボードの隅に貼ります。 進行役が会議の最後に1分取って◎を付けることも決めます。

2週目:10件で試す

先月の会議の板書の写真10件と約束を Gemini API に渡し、決定事項と宿題を出させます。宿題の担当や期限が抜けた件で、何が出ていたかを最優先で見ます。

3週目:登録表とフォルダを作る

会議の登録表(会議名・日付・参加者・写真のフォルダ・「写真を上げた」の印・処理の状態)と、会議ごとのドライブのフォルダを作ります。部の管理用のアカウントを用意します。

4週目:Apps Script で下書きまでをつなぐ

10分ごとのトリガーで、印の付いた会議を拾い、写真を渡して議事録の下書きを作るところまで作ります。この時点では期限の候補を出さず、書かれた文字のまま並べます。

2か月目: 担当の照合と期限の候補を足し、進行役が直した箇所を毎週数えます。3か月目以降: 会議の当日に共有できた割合と、1件15分が何分になったかを実測します。書き方の約束がどの会議でも守られ、議事録が会議の当日に出るのがふつうになった時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-15/最終更新:2026-10-15
確認した内容情報源確認日
画像の説明・質問への回答・分類・物の検出に使えること。対応する形式(PNG、JPEG、WEBP、HEIC、HEIF)。画像を直接入れる場合にリクエスト全体が20MBまでであること。1つのリクエストに複数の画像を入れられること。枠が [ymin, xmin, ymax, xmax] の順で 0〜1000 に正規化されること。画像のトークンの換算(384ピクセル以下は258トークン、それより大きいものは768×768の区画ごとに258トークン)Gemini API: Image understanding2026-10-15
構造化出力が response_format で mime_type を application/json にし、schema にスキーマを入れる形で /v1beta/interactions に送ること。enum と、文字列の format(date など)が使えること。値はアプリ側で検証するよう書かれていることGemini API: Structured output2026-10-15
有料のサービスではプロンプトと応答(画像などのファイルを含む)が製品の改善に使われないこと。禁止された使い方の検知などのために限られた期間記録されること。18歳以上であることが利用の条件で、18歳未満が使う、または使いうるサービスに組み込まないことGemini API Additional Terms of Service2026-10-15
時間主導のトリガーが毎分から月1回までの間隔で動かせること。インストール型のトリガーが作った人のアカウントで動くことApps Script: Installable triggers2026-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 Services2026-10-15
fetch(url, params) で contentType と payload を指定して JSON を POST できることApps Script: UrlFetchApp2026-10-15

議事録の記載の決まりと共有の範囲は、自社の会議の規程に沿って決めてください。 本記事は公開の資料で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-1609)についてのご相談はこちらから。

AI活用について相談する
目次