0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Driveの複数フォルダに一括でファイルを追加するPythonスクリプト(Googleサービスアカウント使用)

Posted at

はじめに

Google Driveで多数の顧客フォルダを管理していると、
「全フォルダに共通ファイル(スプレッドシートやフォルダなど)を追加したい」という場面があります。

でも、手作業でひとつずつコピー&ペースト…なんてやっていたら時間も手間も大変。

今回は、Python+Google Drive API+サービスアカウントを使って、
「複数のフォルダに指定ファイルを一括コピーで挿入する」自動化スクリプトを紹介します。


やりたいこと

Google Driveでのフォルダ管理自動化スクリプト - visual selection.png

  • 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処理も可能

おわりに

この処理を自動化することで「数時間かかる地味だけど大事な作業」を、数分で終わらせることができるようになりました。


ポイントは、

  • やらなくていい作業を減らす
  • 人間がミスりやすい部分を自動化で潰す

という発想。

業務効率化は、派手なツール導入よりも、
こうした「地味だけど効果が大きい工夫」の積み重ねが一番効くと実感しています。

同じように業務を効率化したい方の参考になればうれしいです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?