Google Drive更新をGoogle Chatに通知する方法|Apps Script実装レシピ

Google Driveの更新をGoogle Chatへ通知する方法を、Apps Scriptのコード、定期検索と変更フィードの比較、重複防止、権限、湯田Q&Aで解説します。

著者: SakuraAI 編集部監修: 湯田英也公開: 最終更新: 12
目次
30秒でわかる結論

Google Driveの更新は、Apps Scriptで対象フォルダを定期確認し、Google Chatの受信Webhookへまとめて通知できます。小規模に始めるなら、重要な共有フォルダの直下だけを監視し、前回の通知成功時刻より後に更新された件数と確認先を1件に集約する構成が適しています。削除、移動、権限変更、厳密な変更追跡にはDrive APIの変更フィードやDrive Activity APIを使います。

本記事は2026年6月29日時点のGoogle公式情報をもとにしています。Drive、Apps Script、Google Chatの仕様、割り当て、管理者設定は変更される可能性があります。実装前に公式ドキュメントと自社環境を確認してください。

Expert Q&A

Drive通知を作る前に確認すること

湯田英也SakuraAI株式会社 代表 / ソフトウェアエンジニア

Q. 最初にどのフォルダを監視しますか?

A. 更新を見落としたときの影響が大きく、閲覧者が決まっている共有フォルダです。Drive全体ではなく、承認待ちや公開準備など、次の行動が明確な1フォルダから始めます。

Q. 更新のたびに1件ずつ通知すべきですか?

A. 通常はまとめます。短時間の編集で何度も更新日時が変わるため、ファイル単位で投稿すると通知疲れが起きます。一定間隔の更新件数と確認先を1件に集約します。

Q. DriveAppだけで更新監査までできますか?

A. できません。更新日時は取れますが、誰が何を変えたか、削除や権限変更を厳密に追う用途には足りません。変更フィード、Drive Activity、管理者監査を使い分けます。

Google Driveの資料更新をChatへ知らせる仕組みは、共有漏れを減らせます。一方、ファイル名とリンクを変更のたびに投稿すると、機密情報の拡散と通知疲れを招きます。

この記事では、対象フォルダ直下の更新を定期確認する小規模な構成を基本にして、変更フィード、プッシュ通知、操作履歴との違いまで整理します。Webhookの準備はWebhookの使い方、Apps Scriptの基礎はApps Scriptで通知する方法も参照してください。

先に立場をはっきりさせておくと、Drive全体を監視するのはおすすめしません。更新は絶えず起きるので、全部を追うと通知が洪水になります。行動が必要な重要フォルダに絞る——これが実運用でうまくいく前提です。

Drive更新通知の4つの方式

方式分かること通知速度実装負荷向く用途
Apps Scriptの定期確認取得時点の更新日時設定間隔小規模な重要フォルダ
Drive APIの変更フィード前回トークン以降の変更定期取得中〜高削除・移動を含む変更追跡
Drive APIのプッシュ通知変更が発生したこと速いポーリング回数を減らす変更検知
Drive Activity API・監査操作、実行者、対象など取得方法による誰が何をしたかの確認

プッシュ通知の本文に変更内容がすべて入るわけではありません。Google公式資料では、変更通知を受けた後に変更フィードを取得する構成が案内されています。誰が変更したかを知りたい場合は、Drive Activity APIなど別の情報源が必要です。

Apps Script方式の処理フロー

01

時間主導トリガー

一定間隔で実行

標準機能
02

対象フォルダ

直下ファイルだけを確認

標準機能
03

更新日時を比較

前回成功時刻から今回開始時刻まで

要開発
04

通知を集約

件数と確認先を1件にまとめる

要開発
05

受信Webhook

固定スペースへ一方向送信

要開発
06

成功時刻を保存

送信成功後にチェックポイント更新

要開発
標準機能で対応開発・設定が必要

前回確認時刻ではなく、前回の通知処理が成功した時刻を保存します。Chat送信に失敗した場合は時刻を進めず、次回実行で同じ更新を再確認します。

通知対象を決める

Drive全体の更新通知は、ほとんどの場合、多すぎます。ファイルが変わったら誰が何をするのかを基準に対象を選びます。

対象通知する理由次の行動推奨度
承認待ちフォルダレビュー対象が追加・更新された承認者が確認する高い
公開準備フォルダ公開前資料が更新された担当が最終確認する高い
顧客提出フォルダ提出版が差し替わった担当が版と権限を確認する高い
プロジェクト資料全体資料が変更された行動が曖昧になりやすい低い
個人のマイドライブ個人ファイルが変更された私用・下書きが混ざる低い
Drive全体何かが変更された通知量が多く責任者も不明推奨しない

更新があったという事実だけでは、通知の価値は低いです。確認者と次の行動が決まっているフォルダだけを対象にします。

Chatへ載せる情報を決める

ファイルを開けない人にもファイル名は見えます。リンク先の権限だけでなく、Chat本文へ何を複製するかを確認します。

項目Chatへの掲載判断理由
更新件数掲載する通知の規模を判断できる
対象フォルダ名必要な場合だけフォルダ名自体が機密情報になる
ファイル名閲覧者が一致する場合だけ顧客名や契約内容を含む可能性がある
ファイルリンク権限確認後に掲載リンク先のDrive権限で制御する
更新者DriveAppだけでは掲載しない更新日時からは変更者を特定できない
ファイル本文掲載しない機密情報をChatへ複製しない
共有権限詳細を掲載しない異常の有無と確認先だけを通知する
次の行動掲載する誰が何を確認するか明確になる

最初はファイル名を出さず、更新件数とフォルダへのリンクだけで運用できます。Chat参加者とDrive閲覧者が一致すると確認できてから、必要な情報を追加します。

Webhookと設定値を用意する

ブラウザ版Google Chatで通知先スペースを開き、アプリとインテグレーションから受信Webhookを追加します。Webhook URLはApps ScriptのスクリプトプロパティへCHAT_WEBHOOK_URLとして保存します。

監視対象フォルダのIDもFOLDER_IDとして保存します。コードへ直接書かず、テスト環境と本番環境で切り替えられるようにします。

Google ChatとGoogle Driveの設定画面は、公開前に運用環境で手動撮影した実画面へ差し替えます。アカウント名、フォルダ名、ファイル名、共有相手、フォルダID、Webhook URLをマスキングしてから掲載してください。

直下フォルダの更新をまとめて通知する

次のコードは、対象フォルダ直下のファイルを確認し、前回成功時刻より後に更新された件数を1つのメッセージへまとめます。初回実行では現在時刻だけを保存し、過去ファイルを一括通知しません。

const LAST_SUCCESS_KEY = 'DRIVE_LAST_SUCCESS_AT';
const SHOW_FILE_NAMES = false;
const MAX_NAMES = 20;

function checkFolderUpdates() {
  const lock = LockService.getScriptLock();
  if (!lock.tryLock(1000)) {
    console.log('別のDrive確認処理が実行中です。');
    return;
  }

  try {
    const properties = PropertiesService.getScriptProperties();
    const folderId = properties.getProperty('FOLDER_ID');
    if (!folderId) {
      throw new Error('FOLDER_IDが設定されていません。');
    }

    const runStartedAt = new Date();
    const lastSuccessValue = properties.getProperty(LAST_SUCCESS_KEY);
    if (!lastSuccessValue) {
      properties.setProperty(LAST_SUCCESS_KEY, runStartedAt.toISOString());
      console.log('初回チェックポイントを保存しました。');
      return;
    }

    const lastSuccessAt = new Date(lastSuccessValue);
    if (Number.isNaN(lastSuccessAt.getTime())) {
      throw new Error('前回成功時刻の形式が不正です。');
    }

    const folder = DriveApp.getFolderById(folderId);
    const files = folder.getFiles();
    const updatedNames = [];
    let updatedCount = 0;

    while (files.hasNext()) {
      const file = files.next();
      const updatedAt = file.getLastUpdated();
      const isInWindow = updatedAt > lastSuccessAt
        && updatedAt <= runStartedAt;

      if (!isInWindow) continue;

      updatedCount += 1;
      if (SHOW_FILE_NAMES && updatedNames.length < MAX_NAMES) {
        updatedNames.push(truncate(file.getName(), 100));
      }
    }

    if (updatedCount > 0) {
      const folderUrl = `https://drive.google.com/drive/folders/${folderId}`;
      const lines = [
        '*Drive更新のお知らせ*',
        `更新ファイル: ${updatedCount}件`,
        ...updatedNames.map((name) => `- ${name}`),
        updatedCount > updatedNames.length && SHOW_FILE_NAMES
          ? `- ほか${updatedCount - updatedNames.length}件`
          : '',
        `確認先: ${folderUrl}`,
        '次の行動: 担当者が更新内容を確認',
      ].filter(Boolean);

      sendToChat(lines.join('\n'));
    }

    properties.setProperty(LAST_SUCCESS_KEY, runStartedAt.toISOString());
  } finally {
    lock.releaseLock();
  }
}

function truncate(value, maxLength) {
  const text = String(value || '名称未設定');
  return text.length <= maxLength
    ? text
    : `${text.slice(0, maxLength)}...`;
}

function sendToChat(message) {
  const url = PropertiesService.getScriptProperties()
    .getProperty('CHAT_WEBHOOK_URL');

  if (!url) {
    throw new Error('CHAT_WEBHOOK_URLが設定されていません。');
  }

  const response = UrlFetchApp.fetch(url, {
    method: 'post',
    contentType: 'application/json; charset=UTF-8',
    payload: JSON.stringify({ text: message }),
    muteHttpExceptions: true,
  });

  const status = response.getResponseCode();
  if (status < 200 || status >= 300) {
    throw new Error(`Chat通知に失敗しました。HTTP ${status}`);
  }
}

このコードは対象フォルダ直下だけを確認します。子フォルダを再帰的にたどる処理は、ファイル数が多いとApps Scriptの実行時間や割り当てへ影響します。共有ドライブや大規模フォルダでは、Drive APIの利用を検討します。

更新日時だけでは、内容の編集、名前変更、移動、権限変更のどれが起きたかを判定できません。また、同じファイルが短時間に何度編集されても、日次・時間単位の集約では1件として扱います。

時間主導トリガーを設定する

Apps Scriptのトリガー画面からcheckFolderUpdatesを時間主導トリガーへ登録します。通知の緊急度とファイル更新量から実行間隔を選びます。

実行間隔向く用途利点注意点
5〜15分承認待ち、公開直前確認の遅れを短くできる実行回数と通知量が増える
1時間一般的な資料更新速度と実行回数を両立しやすい即時通知ではない
1日1回日報、定期資料更新をまとめやすい対応が翌日になる可能性がある
週次集約参考資料、棚卸し通知疲れを抑えられる緊急変更には使わない

Apps Scriptの時間主導トリガーは、作成者の権限で実行されます。作成者の退職や権限変更で止まらないよう、所有者、対象フォルダ、設定値、通知先を引き継ぎ資料へ残します。

DriveAppの全体検索を使う場合

DriveApp.searchFilesは、Apps ScriptのDriveサービスが使うDrive API v2形式の検索条件を受け取ります。Google公式資料でも、v3とは項目名が異なる点が明記されています。

const since = new Date(Date.now() - 60 * 60 * 1000);
const query = `modifiedDate > "${since.toISOString()}" and trashed = false`;
const files = DriveApp.searchFiles(query);

この検索は手軽ですが、実行ユーザーから見える広い範囲が対象になります。重要フォルダだけを通知する用途では、フォルダを指定する方が公開範囲を制御しやすくなります。

削除・移動まで追うなら変更フィードを使う

Drive APIのchangesコレクションは、ユーザーから見えるファイルの変更を効率よく追跡する仕組みです。

  1. changes.getStartPageTokenで開始トークンを取得する
  2. トークンを安全に保存する
  3. changes.listで変更をページ単位に取得する
  4. nextPageTokenがある間は続きのページを処理する
  5. 最終ページのnewStartPageTokenを次回用に保存する
  6. 変更情報から対象フォルダと通知条件を絞る

変更フィードは現在のファイル状態を返します。変更前後の内容比較や、誰が変更したかの詳細が必要なら、状態の保存やDrive Activity APIを組み合わせます。

プッシュ通知は変更内容を直接送らない

Drive APIのプッシュ通知を使うには、GoogleからのHTTPS POSTを受け取るサーバーと通知チャネルが必要です。通知チャネルには有効期限があり、自動更新されないため、期限前に新しいチャネルへ入れ替えます。

プッシュ通知で受け取るもの別途必要な処理
変更が発生したという合図変更フィードから実際の差分を取得する
チャネルID、リソースID、状態などのHTTPヘッダーチャネルトークンなどで受信元を検証する
通知チャネルの有効期限期限前に新しいチャネルを作成する
再送される可能性のある通知メッセージ番号や変更トークンで重複を処理する
空の通知本文となる場合ヘッダーとAPI取得結果を基準に処理する

プッシュ通知は、Apps ScriptのWebhook URLやGoogle ChatのWebhook URLへ直接つなぐだけの機能ではありません。受信、検証、差分取得、チャネル更新、失敗監視を持つ連携基盤として設計します。

誰が何を変えたかは別に確認する

Drive Activity APIは、操作の詳細、実行者、対象などを含む最近のアクティビティを照会できます。対象ファイルやフォルダ配下へ絞ることもできます。

ただし、認証したユーザーから見える履歴だけが対象です。組織全体の監査や外部共有の監視では、Google Workspace管理者向けの監査機能と保持方針も確認します。

テストで確認する項目

確認項目テスト方法合格条件
初回実行既存ファイルがあるフォルダで動かす過去ファイルを一括通知しない
直下と子フォルダ両方のファイルを更新する設計した監視範囲だけが対象になる
複数回更新同じファイルを短時間に編集する集約方針どおりの件数になる
送信失敗テスト用の無効Webhookで実行する成功時刻が進まず、失敗が記録される
機密ファイル名顧客名を含むテストファイルを更新する許可していない情報がChatへ出ない
権限Chat参加者が確認先リンクを開く必要な担当者だけが閲覧できる
引き継ぎ別の管理担当が設定を追跡するフォルダID、プロパティ、トリガーを確認できる

本番運用で見る指標

Decision chart

Drive通知で優先して監視する項目

文書共有への影響をもとにSakuraAIが整理した優先度です。

通知失敗件数100/100

更新があっても担当へ届かない

権限外情報の誤掲載99/100

ファイル名だけでも機密情報になり得る

更新の見落とし96/100

監視範囲やチェックポイントの誤りで発生する

重複・過剰通知92/100

重要な更新を見落としやすくなる

通知から確認までの時間84/100

通知が実際の行動につながったかを見る

投稿件数ではなく、失敗、見落とし、情報境界、確認時間を追います。

Apps Scriptの実行履歴と失敗通知を確認し、Drive、URL Fetch、トリガーの割り当ても公式資料で確認します。更新がない日も実行成功を監視できるようにします。

Apps Script方式が向かないケース

  • 削除、移動、権限変更を厳密に追跡する
  • 誰が何を変更したかを監査記録にする
  • 大量のファイルや共有ドライブを組織横断で監視する
  • 数秒単位の検知、再送、配信保証が必要
  • 複数システムへ変更イベントを配信する

この場合は、Drive APIの変更フィード、プッシュ通知、Drive Activity API、管理者監査、キュー、データベース、監視基盤を含めて設計します。Apps Scriptの更新日時確認は、小規模な状況共有に向く方法です。

専門家に聞く運用判断

Q. どの更新から通知を始めますか?

A. 更新後に承認や公開作業が必要なフォルダです。Drive全体ではなく、通知を見た人の次の行動が一つに決まる範囲へ絞ります。

Q. AIでファイル内容を要約してChatへ送ってもよいですか?

A. 最初からは行いません。まず更新件数と確認先だけで運用し、要約が必要な文書種別だけを選びます。入力範囲、保存先、権限、誤要約時の確認も必要です。

Q. 削除や移動も通知したいのですが?

A. DriveApp の更新日時ベースでは、削除や移動、権限変更まではきれいに拾えません。ここまで追うなら、Drive APIの変更フィードやDrive Activity APIに切り替える必要があります。まず更新通知から始めて、監査要件が出てきたら移行するのが現実的です。

Q. 運用を始めてから何を改善しますか?

A. 通知の数ではなく、見落とし・重複・誤掲載・確認までの時間を見ます。通知が多いと感じたら、本文を短くする前に、監視対象のフォルダと『見た人の次の行動』を絞るほうが効きます。

関連レシピ

Driveの分類、命名、権限まで含めた設計はDrive自動整理、フォーム回答の通知はフォーム回答をChatに通知する方法、予定の通知はカレンダー予定をChatに通知する方法を参照してください。

SakuraAIで支援できること

SakuraAIは、Google Driveの更新検知、変更フィード、Drive Activity、Google Chat通知を設計・実装します。通知を作るだけで終わらせず、監視範囲、権限、チェックポイント、重複防止、チャネル更新、失敗監視、担当者の引き継ぎまで含めて構築します。

よくある質問

Driveのファイル更新を即時に通知できますか?

Apps Scriptの時間主導トリガーは定期確認なので即時ではありません。Drive APIのプッシュ通知を使えば変更発生を早く検知できますが、HTTPSの受信サーバー、通知チャネルの更新、変更フィードの取得が必要です。

特定のフォルダだけ監視できますか?

できます。ただしApps Scriptのfolder.getFilesは、そのフォルダ直下のファイルを対象にします。子フォルダまで含める再帰処理は、件数、実行時間、共有ドライブ対応を確認して別途設計します。

誰がファイルを変更したか通知できますか?

DriveAppの更新日時だけでは変更者や変更内容を特定できません。変更者、操作、対象を詳しく確認する用途にはDrive Activity APIや管理者向けの監査機能を検討します。

権限変更も通知できますか?

定期確認で権限一覧を比較する方法や、Drive APIの変更情報、Drive Activity API、管理者向け監査を使う方法があります。ファイル内容の更新通知とは別の監視として設計します。

ファイルリンクをChatへ載せれば安全ですか?

リンク先のDrive権限が適切なら、リンクだけで閲覧権限が付くわけではありません。ただしファイル名自体が機密情報になることがあるため、Chat参加者と通知項目を確認します。

参考・一次情報

湯田英也

Reviewed by

監修者: 湯田英也

SakuraAI株式会社 代表 / ソフトウェアエンジニア

Google Chatの導入・移行、Google Workspace連携、Google Chat API / Webhook / Bot、Gmail・Meet・Drive・Calendarをまたぐ業務自動化領域を監修しています。

Google公式情報、各プロダクトの仕様、実務での運用・開発観点をもとに、企業が導入判断・運用設計・自動化設計を行える内容になるよう確認しています。

開発相談

Google Chat Bot・Webhook開発を相談する

通知・承認・問い合わせ連携のBotとAPI実装を支援します。

開発を相談する