Laravel のプロジェクトを GAE にデプロイしたときに以下のエラーが発生したときの対処手順メモ
ERROR: (gcloud.app.deploy) Error Response: [400] This deployment has too many files. New versions are limited to 10000 files for this app.
エラー原因
Laravel のプロジェクトに Google APIs Client Library for PHP (google/apiclient) を追加したことでプロジェクトのファイル数が 10,000 を超えたため
(GAE は 1 バージョンあたり 10,000 ファイルまでしかアップロードできない)
# before installing google/apiclient $ cd laravel $ ls -FR | grep -v / | grep -v "^$" | wc -l 5688 # after installing google/apiclient $ cd laravel $ composer require google/apiclient:v2.1.3 $ ls -FR | grep -v / | grep -v "^$" | wc -l 10868
対処方法
調べたところ増加したファイルの大半は google/apiclient-services のファイルだった
これらは Google の各種サービスにアクセスするためのクラス群であるが、ソースを見たところ各サービスは独立していて互いに参照していないように見受けられた
今回は Gmail API のみ使えればよいので、それ以外のファイルは削除した
$ cd laravel $ mv vendor/google/apiclient-services/src/Google/Service/Gmail /tmp $ mv vendor/google/apiclient-services/src/Google/Service/Gmail.php /tmp $ rm -rf vendor/google/apiclient-services/src/Google/Service/* $ mv /tmp/Gmail vendor/google/apiclient-services/src/Google/Service/ $ mv /tmp/Gmail.php vendor/google/apiclient-services/src/Google/Service/ $ ls -FR | grep -v / | grep -v "^$" | wc -l 5832
再度 "gcloud app deploy" を実行したところデプロイが正常に完了し、GAE で Gmail API が動作していることを確認した