Driveファイルの共有状態をGASで定期チェック

GASDriveセキュリティ
Driveファイルの共有状態をGASで定期チェックのサムネイル

はじめに:Driveファイルの共有状態チェックは重要だぞ

おじさんだ。中小企業の経営者やフリーランスの皆さん、Google Driveに保存したファイルの共有状態、定期的にチェックしてるかい?共有設定がズレていると、社外秘の情報が漏れるリスクもある。もちろん手動で確認はできるけど、数が多いと大変だし、うっかり見落としもある。

そこで今回紹介するのは、Google Apps Script(以下GAS)を使ってDriveファイルの共有状態を定期的に自動チェックし、新しい日時付きシートに結果を出力する方法だ。これなら既存のデータを消す心配もなく、過去のチェック結果も残せる。コストはGoogleアカウントの利用枠内で、追加SaaS料金もかからないから安心して使ってくれ。

初期設定と必要権限について

まずはスクリプトを動かすための初期設定と必要な権限について説明しよう。

  1. Google Drive APIの有効化
    スクリプトエディタの「サービス」タブから「Drive API」を有効にする。これでファイル情報の詳細な取得が可能になる。

  2. 必要な権限(OAuthスコープ)
    スクリプトはファイルメタデータの読み取りとスプレッドシートへの書き込み権限が必要だ。
    https://www.googleapis.com/auth/drive.metadata.readonly
    https://www.googleapis.com/auth/spreadsheets

  3. トリガー設定
    スクリプトエディタの「時計」アイコンからインストール可能な時間主導トリガーを設定し、週1回や月1回の定期実行を推奨する。

  4. 個人情報の取り扱い
    チェック結果にはファイル名や共有設定が含まれる。取り扱いには十分注意し、必要に応じて社内のセキュリティポリシーを確認してほしい。

  5. 復元手順
    既存のデータを上書きしないため、過去のチェック結果はそのまま残る。もし誤ってデータを消す操作をした場合は、Google Driveのバージョン管理やゴミ箱から復元可能だ。

共有状態をチェックするGASコード例

以下は、Drive内のファイルの共有設定を取得し、新規日時付きスプレッドシートにまとめるサンプルコードだ。ポイントは以下の通り:

  • ファイル一覧取得はページング対応
  • 共有設定を細かく抽出
  • 入力検証を行い、空ファイルやアクセス権の無いファイルを無視
  • 結果は新規作成したスプレッドシートにbatch書き込み(setValues)
  • 既存のシートやファイルは更新しない
function checkDriveFileSharing() {
  // 出力用の日時付きスプレッドシートを新規作成
  const now = new Date();
  const timestamp = Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
  const outputSpreadsheet = SpreadsheetApp.create(`Drive共有状態チェック_${timestamp}`);
  const sheet = outputSpreadsheet.getActiveSheet();
  sheet.appendRow(['ファイル名', 'ファイルID', '共有タイプ', '閲覧者数', '編集者数', 'コメント可ユーザー数']);

  const driveService = Drive; // DriveAppではなくDrive APIサービスを利用
  let pageToken = null;
  const pageSize = 100;
  const resultRows = [];

  do {
    // ファイル一覧取得(必要なフィールドだけ指定)
    const response = driveService.Files.list({
      q: "trashed = false",
      fields: "nextPageToken, files(id, name, permissions)",
      pageSize: pageSize,
      pageToken: pageToken
    });

    const files = response.files || [];
    for (const file of files) {
      const id = file.id;
      const name = file.name || "(名前なし)";
      const permissions = file.permissions || [];

      // 共有タイプ判定(例:外部共有があるかどうか)
      // ここでは閲覧者、編集者、コメント可ユーザー数をカウント
      let viewers = 0, editors = 0, commenters = 0;
      for (const perm of permissions) {
        if (!perm.role || !perm.type) continue; // 入力検証
        if (perm.type === "anyone") {
          // anyone = インターネット全体に公開されている可能性あり
          viewers = -1; // 特殊値で表す
          editors = -1;
          commenters = -1;
          break;
        }
        if (perm.role === "reader") viewers++;
        else if (perm.role === "writer") editors++;
        else if (perm.role === "commenter") commenters++;
      }

      let sharingType = "社内共有のみ";
      if (viewers === -1) {
        sharingType = "全体公開";
      } else if (viewers > 0 || editors > 0 || commenters > 0) {
        sharingType = "特定ユーザー共有";
      }

      resultRows.push([name, id, sharingType, viewers, editors, commenters]);
    }

    pageToken = response.nextPageToken;
  } while (pageToken);

  // batch書き込み
  if (resultRows.length > 0) {
    sheet.getRange(2, 1, resultRows.length, resultRows[0].length).setValues(resultRows);
  }

  Logger.log(`チェック結果をスプレッドシートに出力しました: ${outputSpreadsheet.getUrl()}`);
}

コスト削減の考え方と計算例

おじさんが厳しく言うが、GASを使ったこの方法は追加SaaS料金がかからず、Googleアカウントの利用枠内で動く。Apps Scriptの実行時間やAPI呼び出しの上限はあるが、通常の中小企業のファイル数なら問題ないだろう。

仮に、社内で手動チェックにかかる時間を1ファイルあたり1分、ファイル数が500だとすると、手動で約500分(約8時間半)かかる計算になる。これを週1回実施すれば年間約430時間の工数だ。

GAS自動化でこの作業を0.5時間(スクリプト準備とトリガー設定含む)に抑えられた場合、
削減時間 = 430時間 - 0.5時間 ≒ 429.5時間

仮に作業者の時給を2,000円とすると、
削減コスト = 429.5 × 2,000 = 859,000円/年

※あくまで仮定の計算式であり、実際の環境や状況によって異なる。おじさんは誇張せずに正確な情報を伝えたい。

おわりに:GASで賢くセキュリティ管理を

GASでDriveファイルの共有状態を定期的にチェックすることで、情報漏えいリスクを減らしつつ、手間とコストの削減が期待できる。既存データはそのまま残し、過去のチェック結果も蓄積できるから、安心して運用できるのがポイントだ。

ただし、Googleアカウントの利用枠やApps Scriptの実行制限はあるので、ファイル数や頻度に応じて調整しよう。社内ポリシーや個人情報保護にも十分配慮し、必要に応じて専門家に相談してほしい。

もっと便利なツールやノウハウが欲しい方は、ぜひ【GASおじラボ】のメンバーシップで500以上のツールを使い倒してみてくれ。
GASおじラボで500ツール使い放題 →