Firebase FunctionsのCRUDコードジェネレーターを備えたモノレポのテンプレートです。
jsonファイルで定義したスキーマから、フロントエンド、バックエンドで共有可能なTypeScriptの型定義とFirebase Functionsのコードを自動生成します。
また、Firebase Hosting Frameworksを利用したNext.jsのHosting環境も構築しています。
git clone https://github.com/dar0xt/monorepo-firebase-nextjs
cd monorepo-firebase-nextjs
npm i
- フロントエンド(/web)、バックエンド(/functions)ともに.envに環境変数を入力する。
- /emulators, /functions, /webにおいて、.firebasercのプロジェクト名を入力する。
xxxはuserやpostなどのようなドメイン名を想定しています。
/packages/generators/xxx.json
にスキーマを定義するnpm run generate
でコードを生成する
- xxx.controller.ts (/functions)
- xxx.dto.ts (/functions)
- xxx.service.ts (/functions)
- xxx.model.ts (/functions)
- xxx.collection.ts (/functions)
- xxx.validation.ts (/shared)
/functionsに生成されるコードは、xxxのCRUDを行うためのコードです。
/sharedに生成されるコードは、フロントエンドとバックエンドから参照可能なxxxの型定義とバリデーションのためのコードです。
.
├── README.md
└───packages
├── emulators (ローカルでFirebaseのエミュレーターを起動するためのコード)
├── functions (Firebase Functionsのコード)
├── generators (コードジェネレーター)
├── shared (フロントエンドとバックエンドで共有するコード)
└── web (フロントエンドのコード)
/functions
- tsyringe: 依存性注入ライブラリを用いて、コードをテストしやすくする。
- esbuild: 高速なビルドツール
/generators
- plop: テンプレート(.hbs)からコードを自動生成する。
/shared
- zod: アプリケーション全体のバリデーションを担う。functionsのRequestおよびResponseのバリデーションと、型生成に利用する。
/web
- next: Next.js 13でAppRouterを使用
不明点等ございましたら、Twitterまでお問い合わせください。 PRもお待ちしております。