CloudFunctionのトリガーのファイルを規約化する
下記にてCloudFunctionsのトリガーのディレクトリ設計についてまとめていました。
上記の記事の案2)のケースを元に、規約化するやり方をこの記事ではまとめます。
はじめに
先程の記事の案2)は、こんな感じでファイル名でストレージパスを表現します。
つまり、下記のようにマッピングしています
- Firestoreのストレージパス: version/v1/users/{user_id}
- TypeScriptのディレクトリ設計:
~/version.v1.users.{user_id}.ts
ここで、TypeScript側のファイルはこの命名に従えば規約化されるようなロジックを書きたいです。
では、みていきます。
コード:ファイル名から規約化する
まず、conventer.ts
にてファイル名を元にストレージのpathへ変換するメソッドを定義しておきます
conventer.ts
import path from 'path'
export const getStoragePath = (filename: string) =>
path.basename(filename, '.ts').replace(/\./g, "/");
コード:ファイル名からストレージパスにつなげる
トリガーファンクションで、自分のファイル名を元にFirestoreのファイルパスを導き出すことで規約化します。
こんな感じです。
version.v1.users.{user_id}.ts
import * as functions from "firebase-functions";
import {getStoragePath} from './conventer'
const storagePath = getStoragePath(__filename)
// => version/v1/users/{user_id}
const ref = functions
.region("asia-northeast1")
.database.ref(storagePath);
export const onCreate = ref.onCreate((snapshot, context) => {
// ...
});
シンプルですね。
これで、規約化されました。