目次
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方式の処理フロー
時間主導トリガー
一定間隔で実行
対象フォルダ
直下ファイルだけを確認
更新日時を比較
前回成功時刻から今回開始時刻まで
通知を集約
件数と確認先を1件にまとめる
受信Webhook
固定スペースへ一方向送信
成功時刻を保存
送信成功後にチェックポイント更新
前回確認時刻ではなく、前回の通知処理が成功した時刻を保存します。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コレクションは、ユーザーから見えるファイルの変更を効率よく追跡する仕組みです。
changes.getStartPageTokenで開始トークンを取得する- トークンを安全に保存する
changes.listで変更をページ単位に取得するnextPageTokenがある間は続きのページを処理する- 最終ページの
newStartPageTokenを次回用に保存する - 変更情報から対象フォルダと通知条件を絞る
変更フィードは現在のファイル状態を返します。変更前後の内容比較や、誰が変更したかの詳細が必要なら、状態の保存や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が整理した優先度です。
更新があっても担当へ届かない
ファイル名だけでも機密情報になり得る
監視範囲やチェックポイントの誤りで発生する
重要な更新を見落としやすくなる
通知が実際の行動につながったかを見る
Apps Scriptの実行履歴と失敗通知を確認し、Drive、URL Fetch、トリガーの割り当ても公式資料で確認します。更新がない日も実行成功を監視できるようにします。
Apps Script方式が向かないケース
- 削除、移動、権限変更を厳密に追跡する
- 誰が何を変更したかを監査記録にする
- 大量のファイルや共有ドライブを組織横断で監視する
- 数秒単位の検知、再送、配信保証が必要
- 複数システムへ変更イベントを配信する
この場合は、Drive APIの変更フィード、プッシュ通知、Drive Activity API、管理者監査、キュー、データベース、監視基盤を含めて設計します。Apps Scriptの更新日時確認は、小規模な状況共有に向く方法です。
専門家に聞く運用判断
Expert Q&A
公開前に湯田へ確認すること
湯田英也SakuraAI株式会社 代表 / ソフトウェアエンジニア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参加者と通知項目を確認します。
参考・一次情報
開発相談
Google Chat Bot・Webhook開発を相談する
通知・承認・問い合わせ連携のBotとAPI実装を支援します。
開発を相談する