構成
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のパッケージ管理が全体のパッケージ管理に含まれているのがやや気持ち悪い