LoginSignup
1
3

More than 3 years have passed since last update.

Firebaseのバックエンド担当になったときに作ったパッケージ構成

Posted at

構成

firebase init

で色々聞かれるけどその後必要があって諸々追加する

.
├── README.md
├── firebase
│   ├── README.md
│   ├── admin_scripts 
│   │   ├── config.js // 環境ごとの設定を入れたりなど
│   │   ├── run_test.js
│   │   └── user      // 各コレクションごとにscaffoldするスクリプトなど
│   │       ├── create.js
│   │       └── delete.js
│   ├── bulk_data     // 作成するサンプルデータの管理
│   │   ├── images
│   │   └── users.json
│   ├── credentials   // 環境ごとのcredential
│   │   ├── secret.dev.json
│   │   ├── secret.prod.json
│   │   └── secret.stg.json
│   ├── firebase.json
│   ├── firestore.indexes.json
│   ├── firestore.rules 
│   ├── functions     // デフォでtsにできる
│   │   ├── etc
│   │   ├── lib
│   │   ├── node_modules
│   │   ├── package-lock.json
│   │   ├── package.json
│   │   ├── src
│   │   ├── tsconfig.json
│   │   └── tslint.json
│   ├── package-lock.json
│   ├── package.json
│   ├── public   // フロントの動きを確認できるなにかを実装する
│   │   └── index.html
│   ├── storage.rules
│   ├── test
│   │   ├── build // tsをビルドしたjsが入る
│   │   ├── helper
│   │   └── users.ts // firebase.rulesにあるルールのテスト
│   └── tsconfig.json

cmd

    "bulk-create-user-dev": "babel-node ./admin_scripts/user/create.js --env dev",
    "bulk-delete-user-dev": "babel-node ./admin_scripts/user/delete.js --env dev",
    "serve-firestore": "firebase serve --only firestore",
    "deploy-functions": "firebase deploy --only functions",
    "deploy-rule": "firebase deploy --only firestore:rules",
    "deploy-storage": "firebase deploy --only firestore:storage",
    "pretest": "tsc",
    "test": "mocha test/build/*"

注意なんですが、admin sdkを使ってbulkしているんですが、これは

  • rulesを無視して実行できてしまう
  • stg/prodにもすぐ実行できてしまう

ので運用フェーズになったときには運用を変えないといけない。ローンチ前はそこまで考えないで柔軟性重視でこのまま。ruleのdeployも本来CDに任せたほうがいい。

tsをrule testで利用する

tsconfig.json
{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "sourceMap": true,
    "experimentalDecorators": true,
    "lib": [ "es6", "dom" ],
    "types" : [
      "node"
    ],
    "outDir": "test/build/"
  }
}
package.jsonのdependencies
"dependencies": {
    "@firebase/testing": "^0.11.4",
    "@types/jest": "^24.0.15",
    "@types/mocha": "^5.2.7",
    "babel-cli": "^6.26.0",
    "commander": "^2.20.0",
    "csv": "^5.1.1",
    "csv-parse": "^4.4.3",
    "filesystem": "^1.0.1",
    "firebase": "^6.2.2",
    "firebase-admin": "^8.2.0",
    "mocha": "^6.1.4",
    "mocha-typescript": "^1.1.17",
    "nanoid": "^2.0.3",
    "ts-node": "^8.3.0",
    "typescript": "^3.5.3"
  }

反省

  • admin_scriptsをtsにしたかった
  • functionsが別でパッケージ管理されているのがやや気持ち悪い
  • testのパッケージ管理が全体のパッケージ管理に含まれているのがやや気持ち悪い
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3