はじめに
いままでは、Netlifyの管理画面にアクセスして、フォルダをドラッグアンドドロップすることでアップロードしていました。簡単で便利なのですが、もし手が滑って間違ったフォルダをアップロードしてしまったら……?
うっかり隣の秘密のフォルダーをアップしてしまったら、1秒で全世界に公開されてしまいます。これはもう悪夢です。
「Pythonだけで安全に、確実に、Netlifyへデプロイできたらいいのに」
そう思って始めたのが、今回のプロジェクトです。
しかも、ChatGPT(GPT-4o)を相棒にしたら、驚くほどスムーズに完成しました。
この記事では、完成したスクリプトの紹介と、その過程での苦労やハマりポイントを語ります。
やりたかったこと
・Node.jsやnpmを使わず、PythonだけでNetlifyにデプロイ
・ローカルの静的フォルダ(HTML/画像)をまるごとアップロード
・トークンで自動化できる構成にしたい
最初の試み:files= を使ってPOST
PythonでZIPを作成し、NetlifyのAPIに requests.post(..., files=...) で送ってみました。
files = {'file': (zip_path, f, 'application/zip')}
response = requests.post(url, headers=headers, params=params, files=files)
✅ 成功と表示される
❌ でも中身を確認すると、index.htmlが消えてる!?
さらに、画像やCSSファイルもすべて 0バイト。
原因と解決策
ChatGPTにスクリプトを投げて聞いてみたところ、
Netlify APIは Content-Type: application/zip でZIPバイナリを直送(data=)しないといけない。files= ではmultipart/form-dataになってしまい、NetlifyがZIPとして扱えない。
という指摘。
つまり、こう直す必要がありました:
with open(zip_path, "rb") as f:
binary_data = f.read()
response = requests.post(url, headers=headers, params=params, data=binary_data)
完成スクリプト:python-netlify-folder-deployer
完成したスクリプトはGitHubで公開しています。
・Pythonだけで完結
・Netlify REST APIでZIPアップロード
・draft/production 切り替え対応
・ログ付きで安心
まとめ
・PythonだけでNetlifyにフォルダをアップロードするスクリプトを作った
・最初は files= にハマって404地獄を味わった
Netlifyは便利だけど即時公開なので、爆速な分、慎重さも必要です。
このスクリプトが、あなたの自動デプロイ生活を少しでも快適にできれば幸いです!

