CloudFunctions for Firebaseの一つの利点は、他のFirebase サービスとの強力な連携です。
Functionの起動トリガーとして、各サービスのイベントを利用できます。
今回はサービスごとに多様にあるトリガーをまとめてみました。
ここで紹介したコードはこちらのGithubリポジトリにあります。
https://github.com/kawamataryo/firebase-functions-trigger-list
Firestore
#onCreate
document()
で指定したコレクションへのドキュメントの追加をトリガーに関数が実行される。
export const onCreate = functions.firestore
.document("/users/{userId}")
.onCreate(async (snapshot, context) => {
// do anything
console.log(`user ${context.params.userId} created.`);
});
#onUpdate
document()
で指定したコレクションのドキュメントの更新をトリガーに関数が実行される。
export const onUpdate = functions.firestore
.document("/users/{userId}")
.onUpdate(async (change, context) => {
// do anything
console.log(`user ${context.params.userId} updated.`);
});
#onDelete
document()
で指定したコレクションからのドキュメントの削除をトリガーに関数が実行される。
export const onDelete = functions.firestore
.document("/users/{userId}")
.onDelete(async (snapshot, context) => {
// do anything
console.log(`user ${context.params.userId} deleted.`);
});
#onWrite
document()
で指定したコレクションにてドキュメントの追加・更新・削除をトリガーに関数が実行される。
export const onWrite = functions.firestore
.document("/users/{userId}")
.onWrite(async (change, context) => {
// do anything
console.log(`user ${context.params.userId} wrote.`);
});
Firebase Authentication
#onCreate
Firebase Authenticationでのユーザー追加をトリガーに関数が実行される。
export const onCreate = functions.auth
.user()
.onCreate((userRecord, _context) => {
// do anything
console.log(`user ${userRecord.uid} created.`);
});
#onDelete
Firebase Authenticationでのユーザー削除をトリガーに関数が実行される。
export const onDelete = functions.auth
.user()
.onDelete((userRecord, _context) => {
// do anything
console.log(`user ${userRecord.uid} deleted.`);
});
Firebase Analytics
#onLog
event()
で指定したイベントの発生をトリガーに関数が実行される。
export const sampleEvent = functions.analytics
.event("sample_event")
.onLog((analyticsEvent, context) => {
// do anything
console.log(`Trigger ${analyticsEvent.name}.`);
});
Remote Config
#onUpdate
設定の更新をトリガーに関数が実行される。
export const onUpdate = functions.remoteConfig.onUpdate(
(templateVersion, _context) => {
// do anything
console.log(`Remote config updated to ${templateVersion.versionNumber}`);
}
);
Cloud Storage
#onArchive
オブジェクトのライブバージョンがアーカイブバージョンになったことをトリガーに関数が実行される。
※ バケットでオブジェクトのバージョニングが有効になっている場合にのみ送信
export const onArchive = functions.storage
.object()
.onArchive((_objectMetadata, _context) => {
// do anything
console.log("storage archived");
});
#onDelete
オブジェクトの更新、削除をトリガーに関数が実行される。
※ バケットでオブジェクトのバージョニングが有効になっている場合、onDeleteではなくonArchive
が実行される。(たぶん)
export const onDelete = functions.storage
.object()
.onDelete((_objectMetadata, _context) => {
// do anything
console.log("storage deleted");
});
#onFinalize
バケットで新しいオブジェクトが正常に作成されたことをトリガーに関数が実行される。
※ 既存のオブジェクトをコピーまたは再作成した場合にも実行される
※ アップロードが失敗した場合は実行されない
export const onFinalize = functions.storage
.object()
.onFinalize((_objectMetadata, _context) => {
// do anything
console.log("storage finalized");
});
#onMetadataUpdate
オブジェクトのメタデータが更新されたことをトリガーに関数が実行される。
export const onMetadataUpdate = functions.storage
.object()
.onMetadataUpdate((_objectMetadata, _context) => {
// do anything
console.log("storage metadata updated");
});
Clashlytics
#onNew
新しいissueが発生したことをトリガーに関数が実行される。
export const onNew = functions.crashlytics
.issue()
.onNew(async (issue, _context) => {
// do anything
console.log(`New issue has occurred. ${issue.issueTitle}`);
});
#onRegressed
一度クローズしたissueが再度発生したことをトリガーに関数が実行される。
export const onRegressed = functions.crashlytics
.issue()
.onRegressed(async (issue, _context) => {
// do anything
console.log(`Regressed has occurred. ${issue.issueTitle}`);
});
#onVelocityAlert
設定したvelocityでAlertの発生をトリガーに関数が実行される。
export const onVelocityAlert = functions.crashlytics
.issue()
.onVelocityAlert(async (issue, _context) => {
// do anything
console.log(`Velocity alert. ${issue.issueTitle}`);
});
Test Lab
#onComplete
TestMatrix が完了したことをトリガーに関数が実行される。
export const onComplete = functions.testLab
.testMatrix()
.onComplete((testMatrix, _context) => {
// do anything
console.log(`${testMatrix.testMatrixId} is complete`);
});