Firebase Functionのトリガーをまとめた

firebaseFunctionを勉強しようと思った時にトリガーの一覧があったら使う時に便利かなと思って作る事にしました。

クライアントコードを更新することなく、可能なfirebaseの機能のイベントを処理できるとのことなので、
Functionが利用可能な機能とそのトリガーをまとめてみました

## Cloud Firestore & Realtime Database のトリガー
|イベントタイプ|トリガーの説明|
|:---|:---:|
|[onCreate](https://firebase.google.com/docs/reference/functions/providers_firestore_.documentbuilder.html?authuser=0#on-create)|　　CloudFirestoreにドキュメントが新規に書き込まれた時に送信　　|
|[onUpdate](https://firebase.google.com/docs/reference/functions/providers_firestore_.documentbuilder.html?authuser=0#on-update)|　　CloudFirestoreにすでに作成されているドキュメントが変更された時に送信　　|
|[onDelete](https://firebase.google.com/docs/reference/functions/providers_firestore_.documentbuilder.html?authuser=0#on-delete)|CloudFirestoreに作成されているデータを含むドキュメントが削除された時に送信|
|[onWrite](https://firebase.google.com/docs/reference/functions/providers_firestore_.documentbuilder.html?authuser=0#on-write)|上記の **onCreate** **onUpdate** **onDelete** のどれかがトリガーされた時に送信|

## Firebase RemoteConfig のトリガー
RemoteConfigでトリガーを使う場合は[functions.remoteConfig](https://firebase.google.com/docs/reference/functions/providers_remoteconfig_?authuser=0)の**onUpdate**を使う必要があります。
**TemplateVersion**を取得すればテンプレート更新に関する値が取り出せます。
また、提供されていれば、ユーザー名なども取得できます。

## Firebse Test Lab のトリガー
 テストが完了した時にトリガーを設定できます。テスト完了の知らせをSlackで受け取ることも可能です。
**functions.testLab.testMatrix().onComplete()** を使用して、[TestMatrix](https://firebase.google.com/docs/reference/functions/providers_testlab_.testmatrix?hl=ja) が作成されたときにトリガーされる新しい関数を作成します。

```
exports.sendEmailNotification = functions.testLab.testMatrix().onComplete((testMatrix) => {
  // ...
});
```

## Firebase Authentication のトリガー
Authenticationでトリガーを使う場合は ユーザーの作成(登録),削除を行った時に設定できます。

ユーザー作成時のトリガーは [functions.auth.user().onCreate()](https://firebase.google.com/docs/reference/functions/providers_auth_.userbuilder?hl=ja#on-create)で使うことができる

```
exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => {  // ...
});
```

ユーザー削除時のトリガーは[functions.auth.user().onDelete()](https://firebase.google.com/docs/reference/functions/providers_auth_.userbuilder?hl=ja#on-delete)で使うことができる

```
exports.sendByeEmail = functions.auth.user().onDelete((user) => {  // ...
});
```

## Google Analytics のトリガー
アナリティクスで作成したイベントに合わせてトリガーを作ることができる
[functions.analytics.event()](https://firebase.google.com/docs/reference/functions/functions.analytics?hl=ja#event) メソッドを使ってイベントのトリガーを設定する。
[onLog()](https://firebase.google.com/docs/reference/functions/providers_analytics_.analyticseventbuilder.html?hl=ja#on-log) ハンドラ内でイベントを処理する必要があります。

```
exports.sendCouponOnPurchase = functions.analytics.event('in_app_purchase').onLog((event) => {  // ...
});
```

## Crashlytics のトリガー
|イベントタイプ|トリガーの説明|
|:---|:---:|
|[onNew](https://firebase.google.com/docs/reference/functions/providers_crashlytics_.issuebuilder?hl=ja#on-new)|作成したアプリで他と重複しないクラッシュが起きた時に送信|
|[onRegressed](https://firebase.google.com/docs/reference/functions/providers_crashlytics_.issuebuilder?hl=ja#on-regressed)|問題が終わった時に送信|
|[onVelocityAlert](https://firebase.google.com/docs/reference/functions/providers_crashlytics_.issuebuilder?hl=ja#on-velocity-alert)|特定の数の問題が起きた時に送信|

## Storage のトリガー
|イベントタイプ|トリガーの説明|
|:---|:---:|
|onArchive|バケットでオブジェクトのバージョニングが有効になっている場合にのみ送信|
|onDelete|記録されているオブジェクトが削除された時に送信|
| onFinalize |バケット内で新しいオブジェクトが作成された時に送信（コピーでも）アップロードエラーでは送信されない|
| onMetadataUpdate |既存のオブジェクトのデータが変更された時に送信|

## Cloud Pub/Sub トリガー
[functions.pubsub](https://firebase.google.com/docs/reference/functions/providers_pubsub_?hl=ja) を使うと Pub/Subのイベントを扱うことができます。

新しいPub/Subのメッセージが特定のトピックに送信される時にトリガーを設定することができます。
[onPublish](https://firebase.google.com/docs/reference/functions/providers_pubsub_.topicbuilder.html?hl=ja#on-publish)ハンドラ内でイベントを設定する必要がある

```
exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => {  // ...
});
```

## HTTP のトリガー
[functions.https](https://firebase.google.com/docs/reference/functions/cloud_functions_?hl=ja#https-function) を使ってHTTP メソッド（GET、POST、PUT、DELETE、OPTIONS)の同期関数を使うことができる。

Request オブジェクトを使用すると、クライアントから送信された HTTP リクエストのプロパティにアクセスできます。

```
exports.date = functions.https.onRequest((req, res) => {  // ...
});
```