こんにちは、こんです。
今回は「Google Drive APIをPythonで使ってCSVをアップロードしたい!」と思ってトライしたときの記録です。
結論から言うと、うまくいくまで何度もエラーにハマったので、
未来の私と誰かのために、成功までの過程を残しておこうと思います。
実験のきっかけ:Driveに自動でCSVを保存したい!
こんなこと、起きていませんか?
毎回ローカルで保存してから手動でDriveにアップしてる
Streamlitで自動処理してるのに、最後の出力だけ手作業なのがもったいない
GASじゃなくてPythonで一気通貫にやりたい
「どうにか自動でGoogle Driveにファイルを書き出せないか?」
と思って、Google Drive APIに挑戦しました。
作ってみたもの(検証用スクリプト)
最小構成でCSVをDriveへアップロードするスクリプトはこちら👇
import pandas as pd
from io import BytesIO
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseUpload
from oauth2client import file
def upload_test_file_to_drive(df: pd.DataFrame, filename: str, folder_id: str):
creds = file.Storage('config/token.json').get()
service = build('drive', 'v3', credentials=creds)
about = service.about().get(fields="user").execute()
print("✅ 現在の認証ユーザー:", about["user"]["emailAddress"])
buffer = BytesIO()
df.to_csv(buffer, index=False, encoding='cp932')
buffer.seek(0)
file_metadata = {
'name': filename,
'parents': [folder_id]
}
media = MediaIoBaseUpload(buffer, mimetype='text/csv')
uploaded_file = service.files().create(
body=file_metadata,
media_body=media,
fields='id',
supportsAllDrives=True # ← 共有ドライブなら必須!
).execute()
print(f"✅ アップロード成功: https://drive.google.com/file/d/{uploaded_file['id']}/view")
# テスト実行
if __name__ == "__main__":
df = pd.DataFrame([{"商品CD": "TEST001", "商品名": "テスト商品", "数量": 1}])
upload_test_file_to_drive(df, "TEST_UPLOAD.csv", "ここにフォルダIDを入力")
ハマったポイントと乗り越えた方法
1. 404 File not found が出る → フォルダIDが間違ってる?いや違った!
✅ 原因:フォルダが「共有ドライブ」にある場合、APIに明示が必要
supportsAllDrives=True # ← これを入れないと永遠に 404
2. 「リンクを知っている全員が編集者」なのに、なぜか認証できない
✅ 解決策:認証に使っているGoogleアカウントが、明示的にフォルダの共有メンバーになっている必要あり!
ブラウザでフォルダ開く
「共有」→ 自分のメールアドレスを追加(編集者)
token.json で認証しているアカウントと一致しているか確認
3. token.json の中のユーザーを確認する方法
creds = file.Storage('config/token.json').get()
service = build('drive', 'v3', credentials=creds)
about = service.about().get(fields="user").execute()
print("✅ 現在の認証ユーザー:", about["user"]["emailAddress"])
認証設定(token.json)の準備について
本記事では「Google Drive APIの呼び出し方」に焦点を当てているため、
`token.json` の作成手順については詳しく触れていません。
私は以下の記事を参考にしてセットアップしました👇
📘 PythonでGoogle Drive APIを使う - Zenn(spacegeekさん)
初めての方でも、上記の手順どおりに進めれば、
プロジェクトの作成
Drive APIの有効化
OAuthクライアントIDの作成
`credentials.json` → `token.json` の生成
までスムーズにできると思います。
もし `token.json` がない or エラーになる場合は、まずこの記事から始めるのがおすすめです。
実感したメリット
✅ GASに頼らずPythonで完結できる!
今まではGoogle Apps Scriptにファイルを渡すような処理をしてたけど、
Pythonから直接Driveに書き出せるようになったのはかなり気持ちいい。
✅ Streamlitなどのバッチ出力と相性抜群
データを出力→Driveへアップ→Slack通知までPythonでやれるので、
「Pythonで完結した仕組み」を作れるようになった。
次回予告:DriveにCSVアップ+Slack通知の全自動化
次はこの仕組みを活かして、
入荷予定CSVの自動生成
自動アップロード+Slack通知
スプレッドシート側にフラグ更新
までを一貫してやっている generate_inbound_csv_from_sheet.py を紹介予定です。
まとめ:Drive APIの404は supportsAllDrives=True を疑え!
Drive API、一見シンプルそうでめちゃくちゃハマります。
でも、共有ドライブと OAuth 認証まわりの癖さえつかめば、
Pythonから安全にDrive操作ができる強力な武器になります。
それでは、また次の実験で!🦊
#Python自動化 #GoogleDriveAPI #業務効率化 #ChatGPTで開発 #ノーコードの先へ