生活や仕事に役立つライフハック、お得な情報を発信しています。⚠️記事内にPRを含みます

退職者のGoogleドライブ権限をGASで一括変更|情シス担当が実践する情報持ち出し防止の3ステップ

退職予定者のGoogleドライブ権限は、Google Apps Script(GAS)を使えばスプレッドシートの退職者リストをもとに一括で変更できます。

手作業で1人ずつ共有設定を外していた工程が、スクリプト実行ひとつで完了します。

筆者自身、従業員120名規模の企業でGoogle Workspace管理を担当していた際、四半期ごとの退職・異動対応に毎回3〜4時間を費やしていました。

GASによる自動化を導入してからは、同じ作業が15分以内に短縮され、しかも人的ミスによる権限の外し漏れがゼロになりました。

なお、Google Workspaceをこれから導入する場合や、プラン変更を検討中の方はGoogle Workspaceのプロモーションコードで15%割引が適用できるので、あわせて確認してみてください。

退職時のGoogleドライブ権限管理が「手作業」では危険な理由

IPA(情報処理推進機構)が2024年に公表した「組織における内部不正防止ガイドライン」第5版では、退職者による情報持ち出しが内部不正の主要パターンとして明記されています。実際に、東京商工リサーチの2024年調査によると、上場企業の個人情報漏洩・紛失事故のうち「内部要因」が関わるケースは依然として全体の約2割を占めています。

Google Workspaceを利用している組織では、退職予定者への対応として以下の作業が発生します。

  • マイドライブ内ファイルのオーナー権限移譲
  • 共有ドライブへのアクセス権限の剥奪
  • 外部共有リンクの無効化
  • Googleドキュメント・スプレッドシート・スライドの個別共有設定の解除

問題は、これらを管理コンソールだけでは完結できない点です。Google Workspace管理コンソールの「ユーザー削除」機能はアカウント自体の停止には使えますが、退職日までの「段階的な権限縮小」や「特定フォルダだけ閲覧のみに変更」といった細かい制御には対応していません。

筆者が過去に経験した失敗例を挙げると、退職予定者が最終出社日の前日に、共有ドライブの顧客リストをCSVでダウンロードしていたケースがありました。管理コンソール上ではアカウントは有効なまま、共有ドライブへのアクセス権も「編集者」のままだったためです。退職日にアカウントを停止する運用だけでは、退職の意思表示から最終日までの「空白期間」にデータを持ち出されるリスクがあります。

この空白期間に対応するために、GASで「退職予定日の一定期間前から段階的に権限を制限する」仕組みが有効です。

GASでGoogleドライブ権限を一括変更する3ステップ

ステップ1:退職者リストをスプレッドシートで管理する

まず、退職予定者の情報を管理するGoogleスプレッドシートを作成します。最低限必要なカラムは以下の4つです。

  • A列:退職予定者のメールアドレス(Google Workspaceアカウント)
  • B列:退職予定日(yyyy/MM/dd形式)
  • C列:権限変更のステータス(未処理 / 閲覧のみに変更済 / 完全削除済)
  • D列:処理実行日(スクリプトが自動記入)

このスプレッドシートを人事部門と共有し、退職が確定した時点でメールアドレスと退職予定日を入力してもらう運用にすると、情シス側の作業漏れを防げます。筆者の運用では、人事担当がスプレッドシートに記入すると、GASのonEditトリガーでSlackに通知が飛ぶ仕組みも追加していました。

ステップ2:ドライブ権限を変更するGASスクリプトの基本構造

GASでGoogleドライブの権限を操作するには、DriveAppクラスまたはDrive API(Advanced Service)を使います。基本的な処理の流れは次のとおりです。

function removeEditAccessForDepartingUsers() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('退職者リスト');
var data = sheet.getDataRange().getValues();
var today = new Date();

for (var i = 1; i < data.length; i++) {
var email = data[i][0];
var departureDate = new Date(data[i][1]);
var status = data[i][2];

// 退職予定日の7日前から権限変更を開始
var triggerDate = new Date(departureDate);
triggerDate.setDate(triggerDate.getDate() - 7);

if (today >= triggerDate && status === '未処理') {
// 対象ユーザーが編集者になっているファイルを取得
var files = DriveApp.searchFiles(
'"' + email + '" in writers'
);

while (files.hasNext()) {
var file = files.next();
try {
// 編集権限を閲覧のみに変更
file.removeEditor(email);
file.addViewer(email);
} catch (e) {
Logger.log('エラー: ' + file.getName() + ' - ' + e.message);
}
}

// ステータスと処理日を更新
sheet.getRange(i + 1, 3).setValue('閲覧のみに変更済');
sheet.getRange(i + 1, 4).setValue(today);
}
}
}

このスクリプトの要点を解説します。DriveApp.searchFilesメソッドは、Googleドライブの検索クエリ構文を使ってファイルを取得します。「”メールアドレス” in writers」と指定すると、そのユーザーが編集者として登録されているファイルの一覧を取得できます。

注意点として、DriveAppのsearchFilesはスクリプト実行者(管理者)がアクセスできるファイルのみを対象にします。組織全体のファイルを対象にしたい場合は、Google Workspace管理者権限でDrive API(Advanced Service)のfiles.listを使う必要があります。この違いは見落としがちですが、運用上は非常に重要です。

ステップ3:時限式トリガーで自動実行する

作成したスクリプトを毎日自動で実行するには、GASの時間ベースのトリガーを設定します。

function createDailyTrigger() {
ScriptApp.newTrigger('removeEditAccessForDepartingUsers')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}

毎朝6時に実行する設定にしておけば、始業前に権限変更が完了します。筆者の経験では、朝9時の始業後に実行すると「急に編集できなくなった」と退職予定者本人から問い合わせが来ることがあったため、早朝の実行を推奨します。退職予定者がまだ業務で必要なファイルがある場合は、事前に上長経由で閲覧権限への変更を通知しておくと、トラブルを防げます。

実運用で遭遇した3つの落とし穴と対処法

共有ドライブのファイルはDriveAppでは権限変更できない

DriveAppクラスは、マイドライブのファイルに対しては正常に動作しますが、共有ドライブ(旧チームドライブ)内のファイルは対象外です。共有ドライブのメンバー管理にはDrive API v3のpermissions.deleteやpermissions.updateを使う必要があります。

筆者は最初、DriveAppだけでスクリプトを組んで「全部処理した」と思い込んでいたところ、共有ドライブのファイルが一切変更されていなかったという失敗を経験しています。共有ドライブを使っている組織では、必ずDrive API(Advanced Service)を併用してください。

6分の実行時間制限に引っかかる

GASには1回の実行につき6分(360秒)というタイムアウト制限があります。退職予定者が大量のファイルを共有していた場合、6分以内に全ファイルの処理が終わらないことがあります。

対処法として、処理済みのファイル数をPropertiesServiceに記録し、次回の実行時に続きから処理する「分割実行パターン」を実装します。

function removeEditAccessBatch() {
var properties = PropertiesService.getScriptProperties();
var continuationToken = properties.getProperty('CONTINUATION_TOKEN');
var files;

if (continuationToken) {
files = DriveApp.continueFileIterator(continuationToken);
} else {
files = DriveApp.searchFiles('"target@example.com" in writers');
}

var startTime = new Date().getTime();
var processed = 0;

while (files.hasNext()) {
// 5分経過したら中断して続きを保存
if (new Date().getTime() - startTime > 300000) {
properties.setProperty('CONTINUATION_TOKEN', files.getContinuationToken());
return;
}

var file = files.next();
try {
file.removeEditor('target@example.com');
file.addViewer('target@example.com');
processed++;
} catch (e) {
Logger.log('スキップ: ' + file.getName());
}
}

// 全件処理完了
properties.deleteProperty('CONTINUATION_TOKEN');
}

DriveApp.continueFileIteratorメソッドでContinuationToken(中断トークン)を使えば、前回の続きからファイル一覧の取得を再開できます。この手法は教科書的なGAS入門書にはあまり載っていませんが、実務では必須のテクニックです。

外部共有リンクの「リンクを知っている全員」は個別に解除できない

Googleドライブで「リンクを知っている全員」に閲覧・編集権限を付与しているファイルは、特定ユーザーの権限だけを外しても意味がありません。退職予定者がすでにURLを控えていれば、アカウント停止後もブラウザのシークレットモードなどからアクセスできてしまいます。

このケースでは、ファイルの共有設定自体を「制限付き」に変更する必要があります。

// リンク共有を無効化するスクリプト
function restrictLinkSharing(fileId) {
Drive.Permissions.update(
{ role: 'reader', type: 'anyone' },
fileId,
'anyoneWithLink',
{ removeExpiration: true }
);
// リンク共有自体を削除
Drive.Permissions.remove(fileId, 'anyoneWithLink');
}

ただし、全ファイルのリンク共有を一括で無効化すると、社外パートナーとの共有まで切れてしまう可能性があります。実運用では、退職予定者がオーナーのファイルに限定して処理するなど、影響範囲を絞る判断が必要です。

手作業・GAS・Google Workspace管理コンソールの比較

項目 手作業 GAS(本記事の方法) 管理コンソール
マイドライブの権限変更 1ファイルずつ操作 一括処理可能 ユーザー削除時に一括移譲のみ
共有ドライブの権限変更 ドライブ単位で操作 Drive API併用で一括処理可能 ドライブ単位で操作
段階的な権限縮小 手動で日付管理 トリガーで自動化可能 対応不可
外部共有リンクの制御 1ファイルずつ確認 一括検出・変更可能 組織全体のポリシーのみ
処理の記録・監査 手動でログ作成 スプレッドシートに自動記録 監査ログで確認可能
所要時間(10名分の目安) 3〜4時間 15分以内(初回構築除く) 30分〜1時間
導入コスト なし スクリプト開発の工数 追加費用なし

GASの最大の強みは「段階的な権限縮小」と「処理の自動記録」を両立できる点です。一方、スクリプトの開発・保守には一定のプログラミング知識が必要で、GASの仕様変更(APIの非推奨化など)への追従も求められます。組織の規模が300名を超えるようであれば、Google Workspaceの上位プランが持つDLP(データ損失防止)機能やVaultによるデータ保持機能の活用も選択肢に入ります。Google Workspaceの各プランの機能差については、Google Workspaceプロモーションコード配布ページにプラン比較の情報もまとめているので参考にしてください。

スクリプト導入前に確認すべき4つの前提条件

Google Workspace管理者権限の種類を確認する

GASからDrive APIを使って組織全体のファイルを操作するには、特権管理者(Super Admin)またはサービスアカウントによるドメイン全体の委任(Domain-Wide Delegation)が必要です。一般ユーザーのGASからは、自分がアクセスできるファイルしか操作できません。

Drive APIのAdvanced Serviceを有効化する

GASエディタの左メニュー「サービス」から「Drive API v3」を追加してください。2026年5月時点では、v2はまだ利用可能ですが、Googleはv3への移行を推奨しています。新規に作成するスクリプトではv3を使うのが無難です。

テスト環境で必ず検証する

本番の組織アカウントでいきなり実行するのは避けてください。筆者は初回テスト時に、検索クエリの記述ミスで無関係なユーザーのファイルまで権限変更してしまい、復旧に半日かかった経験があります。Google Workspaceには14日間の無料試用期間があるので、テスト用の組織を作って検証するのが安全です。

退職者対応フロー全体の中にスクリプトを位置づける

GASによるドライブ権限変更は、退職者対応の一部にすぎません。Gmail転送設定、Googleグループからの除外、カレンダーの予定移譲、外部SaaSアカウントの停止など、一連のオフボーディング工程の中にスクリプトの実行タイミングを組み込む必要があります。筆者の運用では、退職予定日の7日前にドライブ権限を閲覧のみに変更し、退職日当日にアカウントを一時停止、30日後にアカウント削除とデータ移譲を実行する3段階フローを採用していました。

よくある質問

Q. GASでドライブ権限を変更するのに追加費用はかかりますか?

A. いいえ、Google Apps ScriptはGoogle Workspaceの全プランに含まれており、追加費用なしで利用できます。ただし、1日あたりのAPI呼び出し回数にはプランごとの上限があり、Business Starter(月額800円/ユーザー)では制限が厳しいため、対象ファイル数が多い組織ではBusiness Standard以上のプランを推奨します。

Q. 退職予定者が個人のGoogleアカウントにファイルをコピーしていた場合、GASで対処できますか?

A. GASでは、すでにコピーされたファイルを個人アカウントから削除することはできません。事前の対策として、Google Workspace管理コンソールの共有設定で「組織外へのファイルコピー・ダウンロード」を制限しておくことが有効です。Business Plus以上のプランではデバイス管理機能も充実しているため、端末側での制御も可能になります。

Q. スクリプトの実行結果を上長や人事に自動通知する方法はありますか?

A. GASのMailApp.sendEmailメソッドやUrlFetchAppを使ったSlack Webhook連携で通知できます。筆者の運用では、処理完了後にスプレッドシートの処理結果サマリーをSlackの情シスチャンネルに自動投稿し、人事部門にはメールで「○名分の権限変更が完了しました」と通知する仕組みを組んでいました。

Q. Google Workspaceの管理コンソールだけで退職者対応はできないのですか?

A. アカウントの停止・削除とデータの一括移譲は管理コンソールで対応可能です。しかし、退職日前の「段階的な権限縮小」や「特定フォルダのみ閲覧権限に変更」といった細かい制御は管理コンソールでは実現できません。Enterpriseプランで利用できるDLP(データ損失防止)機能を組み合わせると、より高度な制御が可能になります。

Q. このスクリプトはGoogle Workspace以外の無料Googleアカウントでも動作しますか?

A. DriveAppを使った基本的な権限変更は無料アカウントでも動作しますが、組織全体のファイルを横断検索するDomain-Wide Delegationや、管理コンソールのAPIはGoogle Workspace専用の機能です。組織としてアカウント管理が必要な場合は、Google Workspaceの導入をおすすめします。プロモーションコードを使えば初年度15%割引で始められます。

まとめ:GASで退職者のドライブ権限管理を仕組み化する

退職予定者のGoogleドライブ権限管理は、手作業では漏れが発生しやすく、管理コンソールだけでは細かい制御ができません。GASを使えば、スプレッドシートの退職者リストと連動して、退職予定日の一定期間前から段階的に権限を縮小する仕組みを構築できます。

導入のポイントを整理すると、まずスプレッドシートで退職者情報を一元管理する体制を整えること、次にDriveAppとDrive API(Advanced Service)を使い分けてマイドライブと共有ドライブの両方に対応すること、そして6分の実行時間制限を考慮した分割実行パターンを実装することの3点です。

最初から完璧なスクリプトを目指す必要はありません。まずはマイドライブの編集権限を閲覧に変更する基本スクリプトから始めて、運用しながら共有ドライブ対応やSlack通知などの機能を追加していくのが現実的な進め方です。Google Workspaceの管理機能とGASの自動化を組み合わせて、退職者対応のオフボーディングフローを効率化してみてください。