小ネタです。
Firebaseでは特に何も考えずCLIでfirebase deploy
コマンドを実行するとプロジェクト内のすべてのファイルをデプロイしてくれちゃいます。意図した物であればもちろん良いのですが、例えばHostingだけ、もしくはCloudFunctionsだけといった場合には--only
オプションを活用します。
書式
基本的には以下の書式です。
$ firebase deploy --only [サービス名]
サービス名として指定できるのは以下です。
- hosting
- functions
- database
- storage
- firestore
実行例
Hostingだけ
特定のファイルだけ、といったことはできないようです。
$ firebase deploy --only hosting
CloudFunctionsだけ
CloudFunctionsも同じですが、こちらはさらに細かい指定ができます。
$ firebase deploy --only functions
以下のようにコロン(:)を挟んで関数名を指定することで、その関数だけデプロイが可能です。
$ firebase deploy --only functions:foo
同時に複数の関数を指定する場合はカンマ(,)で区切ります。
$ firebase deploy --only functions:foo,functions:bar
Firestoreだけ
Firestoreも細かい指定が可能です。ルールとインデックスの設定を分けてデプロイできます。rules
, indexes
を付けない場合は両方ともデプロイ対象となります。
$ firebase deploy --only firestore $ firebase deploy --only firestore:rules $ firebase deploy --only firestore:indexes
合わせ技
複数のサービスをまたがって指定したい場合は、単純にカンマで区切るだけです。
$ firebase deploy --only hosting,functions
CloudFunctionsの関数指定で高速化するか
関数が増えてくるとデプロイ速度がどんどん遅くなって来るわけですが、--only
オプションで高速化するのか実験してみました。というのも感覚的には速くなりそうなもんですが、あまり実感が得られなかったため実際に試してみることにしました。
ここでは5つの関数を作成し、その中の1つをデプロイします。
すべてデプロイ (--only functions)
CloudFunctionsをすべてデプロイすると、今回は1分24秒かかりました。
$ time firebase deploy --only functions === Deploying to 'test-f76bc'... i deploying functions i functions: ensuring necessary APIs are enabled... ✔ functions: all necessary APIs are enabled i functions: preparing functions directory for uploading... i functions: packaged functions (31.84 KB) for uploading ✔ functions: functions folder uploaded successfully i functions: updating Node.js 8 function checkChatMessage(asia-northeast1)... i functions: updating Node.js 8 function appleidCallBack(us-central1)... i functions: updating Node.js 8 function sayGroot(us-central1)... i functions: updating Node.js 8 function sayNyanpass(us-central1)... i functions: updating Node.js 8 function sayEcho(us-central1)... ✔ functions[checkChatMessage(asia-northeast1)]: Successful update operation. ✔ functions[sayGroot(us-central1)]: Successful update operation. ✔ functions[appleidCallBack(us-central1)]: Successful update operation. ✔ functions[sayNyanpass(us-central1)]: Successful update operation. ✔ functions[sayEcho(us-central1)]: Successful update operation. ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/test-f76bc/overview firebase deploy --only functions 4.47s user 0.99s system 6% cpu 1:24.59 total
一部分をデプロイ (--only functions:sayEcho)
CloudFunctionsの関数を1つだけデプロイすると、こちらも1分24秒!まさかの変化なし!
$ time firebase deploy --only functions:sayEcho === Deploying to 'test-f76bc'... i deploying functions i functions: ensuring necessary APIs are enabled... ✔ functions: all necessary APIs are enabled i functions: preparing functions directory for uploading... i functions: packaged functions (31.84 KB) for uploading ✔ functions: functions folder uploaded successfully i functions: current functions in project: appleidCallBack(us-central1), sayEcho(us-central1), sayGroot(us-central1), sayNyanpass(us-central1), checkChatMessage(asia-northeast1) i functions: uploading functions in project: sayEcho(us-central1) i functions: updating Node.js 8 function sayEcho(us-central1)... ✔ functions[sayEcho(us-central1)]: Successful update operation. ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/test-f76bc/overview firebase deploy --only functions:sayEcho 4.43s user 1.22s system 6% cpu 1:24.21 total
まとめ
デプロイ対象の関数を絞っても速度的な変化は期待できないようですね。 あくまでデプロイ対象を絞るだけという考えで挑むのが良さそうです。