はじめに
Google Driveで多数の顧客フォルダを管理していると、
「全フォルダに共通ファイル(スプレッドシートやフォルダなど)を追加したい」という場面があります。
でも、手作業でひとつずつコピー&ペースト…なんてやっていたら時間も手間も大変。
今回は、Python+Google Drive API+サービスアカウントを使って、
「複数のフォルダに指定ファイルを一括コピーで挿入する」自動化スクリプトを紹介します。
やりたいこと
- Google Drive内にある、複数の顧客フォルダ(数百件)
- それぞれに同じファイル(例:テンプレスプレッドシート)を追加したい
- 作業者のアカウントではなく、サービスアカウントを使って処理したい
サービスアカウントとは?
Googleが提供する 「自分の代わりに処理してくれるbotのような専用アカウント」 です。
- 通常のGoogleアカウントとは別に動作
- プログラムからAPI経由でDriveやSheetsを操作できる
- 権限設定は手間だけど、慣れればとても便利
- GASでは難しい「大量処理」や「非ログイン状態での操作」に強い
✅ 設定手順は Google公式ドキュメント を参照
Qiita内にもたくさんの解説記事があります
必要なライブラリ
pip install google-api-python-client google-auth google-auth-httplib2 google-auth-oauthlib
スクリプトの全体構成(ざっくり)
-
サービスアカウントでGoogle Drive APIにログイン
-
対象フォルダのID一覧を読み込む(スプレッドシートなど)
-
コピー元ファイルを指定して、各フォルダに複製
必要に応じてエラーハンドリングや条件分岐を追加
サンプルコード(一部)
from google.oauth2 import service_account
from googleapiclient.discovery import build
# サービスアカウントの認証
SCOPES = ['https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'your_service_account.json'
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
drive_service = build('drive', 'v3', credentials=creds)
# コピー元ファイルID(テンプレートファイル)
template_file_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
# 対象のフォルダID一覧(例としてリスト化)
target_folder_ids = ['folder_id_1', 'folder_id_2', 'folder_id_3']
for folder_id in target_folder_ids:
copied_file = {
'name': '新しいファイル名',
'parents': [folder_id]
}
drive_service.files().copy(
fileId=template_file_id,
body=copied_file
).execute()
ハマりポイントと対策
課題 | 対策 |
---|---|
サービスアカウントにDrive権限がない | 対象フォルダに手動で共有設定(または共有ドライブ利用) |
共有ドライブで動かない? | API呼び出し時に supportsAllDrives=True を明示する必要あり |
既存ファイルが上書きされる? |
.copy() は新規コピーなので上書きされない(ファイル名に注意) |
GSpreadやSheets APIとの併用 | コピー後に取得したIDでGSpread処理も可能 |
おわりに
この処理を自動化することで「数時間かかる地味だけど大事な作業」を、数分で終わらせることができるようになりました。
ポイントは、
- やらなくていい作業を減らす
- 人間がミスりやすい部分を自動化で潰す
という発想。
業務効率化は、派手なツール導入よりも、
こうした「地味だけど効果が大きい工夫」の積み重ねが一番効くと実感しています。
同じように業務を効率化したい方の参考になればうれしいです!