Help us understand the problem. What is going on with this article?

CloudFunctionsのトリガーのファイルを規約化する

CloudFunctionのトリガーのファイルを規約化する

下記にてCloudFunctionsのトリガーのディレクトリ設計についてまとめていました。

上記の記事の案2)のケースを元に、規約化するやり方をこの記事ではまとめます。

はじめに

先程の記事の案2)は、こんな感じでファイル名でストレージパスを表現します。

file.png

つまり、下記のようにマッピングしています

  • 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) => {
  // ...
});

シンプルですね。
これで、規約化されました。

snamiki1212
Qiitaは雑なメモ、ブログはマシな記事
https://snamiki1212.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away