takaya030の備忘録

PHP、Laravel、Docker などの話がメインです

gcloud app deploy : This deployment has too many files

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 をインストールしただけで 5180 ファイルも増えている

対処方法

調べたところ増加したファイルの大半は 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 が動作していることを確認した