.gcloudignoreの書き方

1 min read読了の目安(約1700字

.gcloudignore の設定が思ったとおりに、いかなかったのでまとめます。
.gitignoreと同じらしいですが、そもそもgitで今まで全体をignoreすることはやったことなかったので

基本はコチラに書いてあるのですが、わからなかった部分も含みます

https://cloud.google.com/sdk/gcloud/reference/topic/gcloudignore

# 始まりはコメントです

基本の考え

ファイル指定

以下パターンすべてプロジェクト直下のものが対象になります。
否定する場合は ! をつけます。
!a.txt というファイルをデプロイ対象にしたい場合は \ でエスケープします

.gcloudignore
a.txt # a.txtがデプロイされない
/a.txt # a.txtというファイルがデプロイされない
!a.txt # a.txtがデプロイされる
/\!a.txt # !a.txtというファイルがデプロイされない

ちなみに、上記で書いた場合、 a.txt はデプロイされ、 !a.txt はデプロイされません。後勝ち。

フォルダ指定

フォルダの場合は後ろに /をつける必要があります
以下パターンすべてプロジェクト直下のものが対象になります。

.gcloudignore
test/ # testというディレクトリがデプロイされない
!test/ # testというディレクトリがデプロイされる
/test/ # testというディレクトリがデプロイされない
!/test/ # testというディレクトリがデプロイされる

ちなみに、上記で書いた場合、 test の中身はデプロイされます。これも後勝ち。

自分がつまずいたこと

* がちょっと厄介でした。全部ignoreして、その後に対象のものだけ ! で対象ファイルやディレクトリを上書きしようとします。

.gcloudignore
*
!a.txt
!test/

とやった場合は a.txt だけがdeployされ、 test の中身はdeployされません(上書きができません)
代わりに、

.gcloudignore
*
!test/**

とやった場合は、 test ディレクトリの内容がuploadされます。
つまり、ディレクトリのignoreが若干勝手が違うということです。ファイルを指定すると考えてください。

まとめ

これで自分の意志通り、不要なものをdeployしなくても済むようになりますね。

最後に僕がGAE上でNuxt.jsのSPAをやる際にまとめた設定を載せておきます。package.jsonでのhttp-serverは適宜自分の利用したいものに変えてください

.gcloudignore
*
!/dist/**
!package.json
!package-lock.json
package.json
{
  "scripts": {
    "start": "http-server ./dist",
  },
}
app.yaml
runtime: nodejs12
instance_class: F1

handlers:
  - url: /_nuxt
    static_dir: dist/_nuxt
    secure: always

  - url: /(.*\.(gif|png|jpg|ico|txt))$
    static_files: static/\1
    upload: static/.*\.(gif|png|jpg|ico|txt)$
    secure: always

  - url: /.*
    script: auto
    secure: always

env_variables:
  HOST: "0.0.0.0"
  NODE_ENV: "production"