はじめに

Google Driveの共有ドライブで「容量が逼迫しているが、どのフォルダが原因かわからない」という状況に遭遇したことはないでしょうか。Google DriveのWeb UIでは、共有ドライブ内のフォルダごとの容量を簡単に確認する方法がありません。

本記事では、CLIツール rclone を使って、共有ドライブの容量内訳を効率的に調査し、不要なファイルを特定・削除する方法を紹介します。

環境

  • macOS(Homebrewが利用可能)
  • ターミナル

1. rcloneのインストール

brew install rclone

2. Google Driveとの接続設定

以下のコマンドで非対話的にリモート設定を作成できます。

rclone config create mydrive drive scope=drive team_drive=<共有ドライブID>
  • 共有ドライブID: Google DriveのURLから取得できます。https://drive.google.com/drive/u/0/folders/<ID><ID> 部分です。
  • scope=drive はフルアクセス権限を付与します。読み取り専用で十分な場合は scope=drive.readonly を指定してください。

コマンド実行後、ブラウザが開きGoogleアカウントでのOAuth認証が求められます。認証を完了すれば設定完了です。

設定の確認

rclone listremotes
# 出力例: mydrive:

3. フォルダ構造の確認

トップレベルのフォルダ一覧

rclone lsd "mydrive:" --drive-team-drive=<共有ドライブID>

出力例:

0 2023-06-20 11:42:28  -1 フォルダA
0 2022-05-18 13:37:35  -1 フォルダB
0 2022-05-18 13:38:45  -1 フォルダC

全ファイルの数を確認

rclone ls "mydrive:" --drive-team-drive=<共有ドライブID> | wc -l

4. フォルダごとの容量を調査する

ここが本記事の核心です。rclone size コマンドを使って、各フォルダのサイズを確認します。

個別フォルダのサイズ確認

rclone size "mydrive:フォルダA" --drive-team-drive=<共有ドライブID>

出力例:

Total objects: 7056
Total size: 21.523 GiB (23110401117 Byte)
Total objects with unknown size: 324 (324)

注意: Total objects with unknown size はGoogle Docs/Sheets/Slidesなどのネイティブ形式のファイルです。これらはGoogle Driveの容量にカウントされません。

複数フォルダのサイズを一括比較

シェルスクリプトで複数フォルダのサイズを一気に確認できます。

for dir in "フォルダA" "フォルダB" "フォルダC"; do
  echo -n "$dir: "
  rclone size "mydrive:$dir" --drive-team-drive=<共有ドライブID> | grep "Total size"
done

出力例:

フォルダA: Total size: 17.98 GiB (19310319183 Byte)
フォルダB: Total size: 1.46 GiB (1570625050 Byte)
フォルダC: Total size: 54.188 MiB (56820405 Byte)

サイズ順にソートする

JSON出力を使ってバイト数でソートすると、大きいフォルダを効率的に特定できます。

base="親フォルダ/子フォルダ"
for d in $(rclone lsd "mydrive:$base" --drive-team-drive=<共有ドライブID> | awk '{print $NF}'); do
  bytes=$(rclone size "mydrive:$base/$d" --drive-team-drive=<共有ドライブID> --json | \
    python3 -c "import sys,json; print(json.load(sys.stdin).get('bytes',0))")
  echo "$bytes $d"
done | sort -rn | head -20

5. ファイル・フォルダの作成者を確認する

共有ドライブでは「誰がそのフォルダを作成・更新したか」を把握することも重要です。rcloneの標準出力にはオーナー情報が含まれないため、Google Drive APIを直接呼び出します。

rcloneのトークンを利用してAPIを呼ぶ

rcloneが保持しているOAuthトークンを再利用できます。

# rclone設定からアクセストークンを抽出
token=$(rclone config show mydrive | grep token | python3 -c "
import sys, json
line = sys.stdin.read()
idx = line.index('{')
print(json.loads(line[idx:]).get('access_token', ''))
")

フォルダIDを取得

rclone lsjson でフォルダIDを取得します。

rclone lsjson "mydrive:対象パス" --drive-team-drive=<共有ドライブID> --dirs-only --no-modtime

出力にはフォルダの ID が含まれます。

Google Drive APIで作成者・更新者を確認

folder_id="取得したフォルダID"
curl -s "https://www.googleapis.com/drive/v3/files/$folder_id?fields=name,owners,createdTime,lastModifyingUser&supportsAllDrives=true" \
  -H "Authorization: Bearer $token" | python3 -m json.tool

出力例:

{
    "name": "対象フォルダ",
    "createdTime": "2023-06-02T02:37:50.146Z",
    "lastModifyingUser": {
        "displayName": "yamada-taro",
        "me": false
    }
}

注意: 共有ドライブのファイルには「オーナー」が存在せず、owners フィールドは返されません。代わりに lastModifyingUser で最終更新者を確認できます。

APIレート制限に注意

rcloneの操作とAPI直接呼び出しは同じクォータを共有します。大量のフォルダを調査した直後にAPIを呼ぶとレート制限(rateLimitExceeded)に当たることがあります。その場合は数分待ってからリトライしてください。

6. 不要ファイルの特定

特定のキーワードでファイルを検索

作業用ファイルや一時ファイルを見つけるのに便利です。

# ファイル名に特定のキーワードを含むものを検索
rclone ls "mydrive:" --drive-team-drive=<共有ドライブID> | grep -iE "(tmp|テスト|test|backup|コピー|作業)"

大きいファイルを特定

rclone ls "mydrive:" --drive-team-drive=<共有ドライブID> | sort -rn | head -20

7. 不要ファイルの削除

ファイルの削除

rclone delete "mydrive:パス/ファイル名" --drive-team-drive=<共有ドライブID>

フォルダごと削除

rclone purge "mydrive:パス/フォルダ名" --drive-team-drive=<共有ドライブID>

削除前のドライラン

実際に削除する前に、--dry-run フラグで対象を確認することを強くお勧めします。

rclone delete "mydrive:パス/フォルダ名" --drive-team-drive=<共有ドライブID> --dry-run

8. 調査の実践例

ある共有ドライブ(約21.5 GB、7,200ファイル)の容量調査を行った際の手順を紹介します。

Step 1: トップレベルの容量確認

フォルダA(共有資料):   21.52 GB
フォルダB(議事録):      54 MB
フォルダC(会議資料):    33 MB

フォルダAが全体の99%以上を占めていることが判明。

Step 2: フォルダAの中を深掘り

サブフォルダX:    17.98 GB  ← ここが巨大
サブフォルダY:     1.46 GB
サブフォルダZ:      828 MB
...
tmp:              1.9 MB

サブフォルダXが全体の83%を占有。

Step 3: さらに深掘り

サブフォルダX内には81個のサブフォルダがあり、シェルスクリプトで一括サイズ確認を実施。上位のフォルダを特定し、内容を精査した上で削除の判断を行いました。

Step 4: 作成者の確認

Google Drive APIを使って、サイズ上位フォルダの最終更新者を確認したところ、すべて同一人物であることが判明。作成日も同一(共有ドライブへの一括移行日)でした。これにより、削除の相談先を特定できました。

まとめ

  • Google DriveのWeb UIでは、フォルダごとの容量把握が困難
  • rclone を使えば、CLIから共有ドライブの容量を階層的に調査できる
  • rclone size + シェルスクリプトの組み合わせで、大量のフォルダのサイズを効率的に比較可能
  • 削除前には必ず --dry-run で確認する

rcloneはGoogle Drive以外にも多数のクラウドストレージに対応しているため、同様の手法はOneDrive、S3、Dropboxなどでも応用できます。