Geminiの議事録データがユーザー単位で散らばっている件
Google Meetの会議が終わると、Geminiが自動で文字起こしをしてくれる。
この機能、営業やマーケの現場でも、よく使われていると思います。
そして、議事録をベースに、タスクの分解や次回予定を組み立てようという話が、いわゆるAI活用法の肝なのですが、その手前のフェーズで躓いている企業が多いようで、今回はそのボトルネックを簡単な方法で改善してみましょうというお話です。
このGeminiの文字起こしにおいて最大の問題は、生成された議事録データが、個人のマイドライブに、動的な名称で保存されるという仕様です。
Google Workspaceの権限は、なかなかに複雑で、都度紐解いていく必要があるのですが、現時点で、議事録データの権限や名称を手軽に変更する手段はありません。
議事録が生成されても、再共有・再整理・リネームといった手間が発生するわけです。
この小さなつまずきを放置すると、この後のAIが活躍する場が生まれない可能性が生じます。
そこで、本記事では、Google Workspaceユーザーの営業・マーケティングチームに向けて、Geminiによる議事録作成を「チームの資産」として活かすための下準備
- 議事録のファイル名をカレンダーの予定名でリネーム
- ファイルを所定の共有ドライブに自動で移動
- チーム全体がアクセスできるように権限も変更
この一連の自動化を、Google Apps Script(GAS)で構築する方法を紹介します。
難しい設定は一切不要です。
少しのコードと、社内のカレンダー運用ルールを整えるだけで「Geminiで議事録を作っても、誰も見ていない」状態から脱却できます。
AIを活かすには、AIの前後にある地味だけど大事な工程(前処理)を整えることが欠かせません。
その第一歩として、今回のGAS活用がきっと役立つはずです。
1. Google Meetの議事録、どこに保存されているか分かりますか?
Geminiで会議の議事録を作成すると、自動でGoogleドキュメントが生成され、保存されます。
ここまでは非常に便利に感じられるのですが、その保存先に癖があります。
Meet主催者の場合、通知によって知ることも多い場所、そうなんです、実はこの議事録、基本的には会議主催者の「マイドライブ」内に保存されます。
さらに環境によっては、「Meet Recordings」という個人フォルダが自動生成され、そこに議事録ドキュメントが格納されるケースもあります。
この仕様には、以下のような実務的な問題があります。
- 会議主催者が退職・異動すると、議事録にアクセスできなくなる
- 「誰のドライブにあるのか分からない」状態になりがち
- 複数人で議事録を活用するには、毎回の共有操作が必要
- ファイル名が日付+時刻ベースで、会議内容が判別しづらい
Meet Recordings内を確認してみると、このようなファイル名になっている場合もあります。
2025/07/15 13:00 JST に開始した会議 - Gemini によるメモ
このままでは、どの顧客との会議だったのか?定例なのか社内なのか?まったく分かりません。
Geminiは議事録を作ってくれるのですが、その議事録はまだちゃんと使える状態にはなっていないのです。
これが、意外と多くの営業・マーケ現場で起きている現実です。
次のセクションでは、この課題をどうGASで解決していくかを解説します。
2. GASでできること:リネーム・移動・権限変更を自動化
議事録の保存先がバラバラで、ファイル名も分かりづらく、共有もされていない。
この状態を抜け出すために活用したいのが、Google Apps Script(GAS)です。
GASは、Googleドライブやカレンダー、スプレッドシートなどの操作を自動化できるGoogle公式の軽量スクリプト言語です。
今回はこのGASを使って、次の3つを一括処理していきます。
✅ 1. ファイル名を予定名+日付でリネーム
Geminiが生成する議事録ファイルは、日時ベースで命名されており、内容が一目で分かりません。
2025/07/15 13:00 JST に開始した会議 - Gemini によるメモ
このファイル名から日時を抽出し、Googleカレンダーと照合して、以下のようにリネームします。
【2025-07-15】営業定例(B社)
日付と予定名をファイル名に含めることで、検索性が格段に向上します。
✅ 2. 所定の共有ドライブに自動で移動
議事録ファイルは初期状態では会議主催者のマイドライブ内にあり、他のメンバーからはアクセスできません。
これをGASで指定した共有ドライブフォルダに自動で移動させることで、属人化を解消し、チームの資産として一元管理できるようになります。
✅ 3. 移動先フォルダの権限をファイルに自動付与
Googleドライブの仕様上、ファイルを共有ドライブに移動しても、権限は引き継がれないことがあります。
そのためGASでは、移動後にそのフォルダの編集者・閲覧者の権限をファイルにも付与する処理を追加。
これにより、「ファイルは移動したのに開けない」事故を防げます。
💡 実行に必要なのはIDの設定だけ
コードの中で設定が必要なのは、以下の2つだけです。
const TARGET_FOLDER_ID = 'ここに共有フォルダのIDを貼り付け';
const CALENDAR_ID = 'ここにグループカレンダーのIDを貼り付け';
これらは、社内で共通にしておけばメンバー全員が同じコードをそのまま使い回せます。
次のセクションでは、実際にこの自動化をどう組み立てていくか、GASコードと処理の仕組みを解説していきます。
3. グループカレンダーでチームの運用ルールを固めよう
ここまでの内容を踏まえると、「社内でこのGASを共有して使い回すにはどうすればいいのか?」という疑問が自然と浮かぶはずです。
結論から言えば、カレンダー運用を「チーム単位」で整えておくことが最大のポイントです。
まずチームで前述した「どのフォルダ」を共有ドライブで使うのかを決めます。
そして今回「どのカレンダー」を使うか決めましょう。
これが前述した2つのIDになります。
✅ ポイントは「グループカレンダー」の共通化
今回のGASでは、議事録ファイル名をカレンダーの予定名でリネームするために、対象カレンダーを指定する必要があります。
その際、各メンバーがバラバラの個人カレンダーを使っていると、誰かが使ったGASが別の人には動かないといった状況が生まれがちです。
一方で、チーム全員が同じ「グループカレンダーID」を使っていれば、GASコードは完全に共通化できます。
const CALENDAR_ID = 'marketing-team@yourdomain.com'; // 全員同じIDを使用

このように「チームで1つの予定表を使う」という運用ルールにしておけば、
- GASコードを誰でもそのまま使える
- 管理も一元化され、ミスや混乱が起きにくい
- 新メンバーにも「コピペしてトリガー設定するだけ」で共有可能
というメンテナンスしやすい自動化環境が整います。
✅ カレンダーのグルーピングでGASがさらに読みやすくなる
また、営業1課/2課、顧客定例/社内MTGなど、用途や部署ごとにグループカレンダーを分けておくと、以下のような恩恵があります。
- 会議名の表現に一貫性が出る(命名ルールの統一)
- 「この会議はどこに格納されているか」が一目でわかる
- 移動先フォルダとの対応関係も整理しやすくなる
つまり、カレンダーの設計がそのまま議事録管理の設計になるのです。
✅ 「ID以外は共通」のスクリプトが社内に浸透する
GASコード側は、カレンダーIDとフォルダIDの2箇所だけ差し替えればOKという構成にしておくと、社内展開が非常にスムーズです。
// 各自で差し替えるのはここだけ!
const CALENDAR_ID = '共通のカレンダーID';
const TARGET_FOLDER_ID = '共有ドライブ内の保存先ID';
このようなコードをテンプレート化しておけば、GASに詳しくないメンバーでも安心して導入できます。
次のセクションでは、実際のGASコードを紹介しながら、自動化のロジックを丁寧に解説していきます。
4. GASでGeminiの議事録を整理するスクリプトを実装してみよう
ではここからは、実際のGoogle Apps Script(GAS)を見ていきましょう。

このスクリプトは、以下の処理を1本で自動化します。
✅ 実装されている処理一覧
- 「Meet Recordings」フォルダ内のGoogleドキュメント(Geminiの議事録)を対象にする
- ファイル名から日付・時刻を読み取り、カレンダー予定と照合
- 予定名を使ってファイル名を「【日付】予定タイトル」にリネーム
- 共有ドライブの指定フォルダにファイルを移動
- 移動先フォルダの権限(編集者・閲覧者)をファイルにも適用
✅ スクリプト導入前の前提条件
- 会議の予定は、対象のグループカレンダーに登録されている
- 議事録ファイルはGASが動くまで触らない(移動・リネームしない)
- チーム内で同じカレンダーID・保存先フォルダIDを共有しておく
✅ スクリプト本体
以下のスクリプト全体をコピーし、共有ドライブのフォルダIDとグループカレンダーのIDの2点のみ、各社の環境に合わせて差し替えてください。
/**
* ★★★ 初期設定項目 ★★★
* 以下の2つのIDを、あなたの環境に合わせて設定してください。
*/
// 1. 議事録の移動先となる「共有ドライブのフォルダ」のID
const TARGET_FOLDER_ID = 'ここに共有ドライブのフォルダIDを貼り付け';
// 2. 検索対象となるチームの「グループカレンダー」のID
const CALENDAR_ID = 'ここにグループカレンダーのIDを貼り付け';
/**
* Google Meet議事録を整理するメインの関数
* この関数を時間ベースのトリガーで定期的に実行します。
*/
function organizeMeetNotes_Final() {
// 議事録が自動保存されるフォルダ名
const SOURCE_FOLDER_NAME = 'Meet Recordings';
// --- 1. 事前準備:必要なフォルダやカレンダーが存在するか確認 ---
const destinationFolder = DriveApp.getFolderById(TARGET_FOLDER_ID);
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
if (!calendar) {
console.log(`設定されたIDのカレンダーが見つかりませんでした: ${CALENDAR_ID}`);
return; // カレンダーがなければ処理を終了
}
const sourceFolders = DriveApp.getFoldersByName(SOURCE_FOLDER_NAME);
if (!sourceFolders.hasNext()) {
console.log(`「${SOURCE_FOLDER_NAME}」フォルダが見つかりませんでした。`);
return; // 元フォルダがなければ処理を終了
}
const sourceFolder = sourceFolders.next();
const files = sourceFolder.getFilesByType(MimeType.GOOGLE_DOCS); // フォルダ内のGoogleドキュメントを全て取得
// --- 2. ファイルの処理:フォルダ内のファイルを一つずつチェック ---
while (files.hasNext()) {
const file = files.next();
// まだ整理されていないファイルのみを対象にする
if (file.getParents().next().getId() === sourceFolder.getId()) {
const originalName = file.getName();
let newName = originalName; // 新しいファイル名を一時的に保持する変数
// --- 3. ファイル名の解析とカレンダー検索 ---
// ファイル名から "YYYY/MM/DD hh:mm" の形式で日付を抽出
const match = originalName.match(/(\d{4})\/(\d{1,2})\/(\d{1,2})\s(\d{1,2}):(\d{2})/);
if (match) {
// 抽出した日時をDateオブジェクトに変換
const year = parseInt(match[1], 10);
const month = parseInt(match[2], 10) - 1; // 月は0から始まるため
const day = parseInt(match[3], 10);
const hour = parseInt(match[4], 10);
const minute = parseInt(match[5], 10);
const fileStartTime = new Date(year, month, day, hour, minute);
// ファイル名の時刻から前後数分の範囲で予定を検索(時刻のズレに対応)
const searchStartTime = new Date(fileStartTime.getTime() - 2 * 60 * 1000); // 2分前
const searchEndTime = new Date(fileStartTime.getTime() + 3 * 60 * 1000); // 3分後
const events = calendar.getEvents(searchStartTime, searchEndTime);
// --- 4. リネーム処理 ---
if (events.length > 0) {
const eventTitle = events[0].getTitle();
const formattedDate = Utilities.formatDate(fileStartTime, "JST", "yyyy-MM-dd");
newName = `【${formattedDate}】${eventTitle}`;
file.setName(newName);
console.log(`ファイル名を変更: ${originalName} -> ${newName}`);
} else {
console.log(`カレンダー「${calendar.getName()}」に一致する予定が見つかりませんでした: ${originalName}`);
}
}
// --- 5. ファイルの移動 ---
file.moveTo(destinationFolder);
console.log(`ファイルを移動しました: ${newName}`);
// --- 6. 権限の同期 ---
try {
const editors = destinationFolder.getEditors();
const viewers = destinationFolder.getViewers();
// ファイルに編集者・閲覧者を追加して権限をフォルダに合わせる
for (let i = 0; i < editors.length; i++) { file.addEditor(editors[i]); }
for (let i = 0; i < viewers.length; i++) { file.addViewer(viewers[i]); }
console.log(`権限を同期しました: ${newName}`);
} catch (e) {
console.error(`権限の同期中にエラーが発生しました: ${e}`);
}
}
}
}
✅ 補足:このコードがやってくれること
項目 | 内容 |
---|---|
対象ファイル | Meet Recordings内のGoogleドキュメント |
名前変更 | カレンダー予定の「日付+タイトル」形式 |
移動処理 | 共有ドライブの指定フォルダへ |
権限処理 | フォルダと同じ編集者・閲覧者をファイルに付与 |
ズレ対応 | 開始時刻±2分の範囲で予定を検索 |
✅ トリガーの設定(1度だけ)
Apps Scriptの「トリガー」メニューから、次のように設定します。
- 実行する関数:organizeMeetNotes_Final
- イベントの種類:時間主導型(15分おきなど)
- 初回実行時に表示される「権限の承認」も忘れずに!
これで、Geminiが生成した議事録を「ちゃんとチームが使える形」に整える自動化が完成です。

次のセクションでは、ありがちな失敗パターンや社内運用上の注意点を紹介していきます。
5. GASの自動化がうまく動かないときの落とし穴と対策
GASの設定も完了、トリガーも走っているのに「一部の議事録だけファイル名が変わらない」「予定が見つからない」といった現象が起きることがあります。
安心してください。
多くの場合、コードの問題ではなく「運用上のあるある」です。
以下では、よくあるつまずきポイントとその対処法を整理しておきます。
✅ ファイル名に含まれる日時とカレンダー予定が1分ズレていた
もっとも多いのがこのパターンです。
Geminiによる議事録ファイルのファイル名は、「実際にMeetに入室したタイミング」で生成されます。
一方で、Googleカレンダーの予定は「定刻」に設定されていることが多いため、開始時刻に1〜2分のズレが発生することがあります。
本稿で紹介しているスクリプトでは、こうしたズレに対応するために「前後5分の範囲」で予定を検索するように設計済みです。
ただし、環境によっては以下のようなケースもあるため注意しましょう。
- 議事録ファイル名の形式が変更されている
- ファイル名を手動で変更してしまった
- 予定が見つからない日時にMeetだけ単独で立ち上げていた
✅ カレンダーの予定が「他人のカレンダー」に存在している
スクリプトは基本的に指定したカレンダーIDの中から予定を探します。
そのため、予定が「今回の指定カレンダー」ではなく「他のグループ共有カレンダー」などに移されていた場合、以下のことに注意が必要です。
- カレンダーIDが一致していないと予定を見つけられない
- 予定を他のカレンダーに「移動」したことで自分のカレンダーからは消えている
- カレンダーに参加者として追加されていないと、予定にアクセスできない
GASの設定には「予定を登録したカレンダーID」を正しく指定しましょう。
✅ ファイルが既に移動orリネーム済み
GASは「Meet Recordings」フォルダにある、かつGASが処理していない状態のファイルのみを対象にします。
以下のような場合、そのファイルは対象外になります。
- 手動で別フォルダに移動してしまった
- 手動でリネームしてしまい日付情報が読み取れなくなった
- すでにGASによって移動済み
議事録は、GASが処理するまで触らないルールにするのがベストです。
✅ 権限は共有ドライブと自動では連動しない
これはGASを使っていない場合に起こる注意点ですが
- ファイルを共有ドライブに「移動」しても
- 権限は元の個人設定のまま
というケースがあります。
今回紹介しているGASでは、移動先フォルダの編集者・閲覧者をファイルにも適用する処理を組み込んでいますので、事故は発生しません。
✅ トリガーが正しく設定されていない
最後に、コードが正しくても「トリガーが動いていない」というパターンも意外と多いです。
- 時間主導型で実行関数「organizeMeetNotes_Final」を選択したか?
- 保存を忘れていないか?
- 初回実行時の「権限承認」を完了しているか?
このあたりを一度見直してみると、原因が見つかることも多いです。
🛠 チェックリスト(社内展開時に貼っておきたい項目)
確認項目 | 内容 |
---|---|
カレンダーID | 全員同じグループカレンダーIDを使用しているか? |
フォルダID | 共有ドライブの保存先フォルダIDが正しいか? |
GASトリガー | 時間主導型で定期実行の設定がされているか? |
ファイル名 | Geminiによる自動命名のまま変更していないか? |
会議予定 | カレンダーに正しく登録されているか?(削除・移動していないか) |
次のセクションでは、なぜこの手順がAI活用にとって重要なのかを再確認しつつ、GASが果たす「前処理」の役割をまとめます。
6. AI活用は「前処理」から始まっている:GASが支えるチームのAI整備
Geminiで議事録を自動生成し、その内容を要約したり、タスク化したりするなど、こうした活用例はAIツールのデモや紹介記事でよく語られます。
しかし、現場で実際にやってみると、その「前」があまりにも整っていないために、コンサルタントや支援企業を入れようにも、思うように進まないケースが多発します。
✅ AIが「うまく機能しない」のは、AIの問題ではなく「準備不足」かもしれない
- 「思ったような要約が出てこない」
- 「検索しても議事録が出てこない」
- 「タスク整理までたどり着けない」
こうした「AIあるある」の裏には
- ファイルが正しい場所にない
- 名前がバラバラで見つけられない
- 権限設定が不十分で共有できていない
といった、整理・構造の不備が潜んでいることが少なくありません。
✅ GASは「裏方」だけど、チームのAI推進を支える重要な基盤
GASの処理は地味に見えるかもしれませんが、AIが正しく機能するための舞台を整えるのがまさにこの役割です。
- Geminiが要約できるのは、整理された情報が読める場所にあるから
- ChatGPTがタスク化できるのは、前提の構造が整っているから
だからこそ今回のように
- 議事録を命名しなおして
- 共有ドライブに移動して
- チーム全員に見えるようにする
この一連の「下ごしらえ」が、AI活用の第一歩になります。
✅ 「ちょっとした整備」がチーム全体の生産性を底上げする
難しいことはしていません。
GASのスクリプトを1本、チームに展開するだけで
- 議事録が毎回同じ場所に
- わかりやすい名前で
- チームメンバー全員がアクセス可能な状態で
自動的に整理されるようになります。
日々の積み重ねが、チーム全体の効率と再現性を高めていく。
そんな地味だけど確かな効果を、まずはGASで体感してみてください。