TODO: ここにアプリの説明を記載する(何ができるのか)
miseをインストールするmise installでbunをインストールする
- プロジェクトルートにて
bun iを実行して全パッケージの依存関係をインストールする bun run devを実行して開発サーバを立ち上げる
package.json(root)>versionを更新git commitgit tag vn.n.ngit push origin main --tags
root → web → server → api-spec の順番で構築を進める
git initmise use bun@latestbun@latestのインストールmise.tomlの生成
bun init- package.json の整備
- workspaces の設定
- メタ情報(description や version など)の設定
- プロジェクト整備
tsconfig.jsonの設定- 不要ファイルの削除など
- pre-commit 環境を構築
- lefthook
- biome
bun create @angular web- プロジェクト整備
tsconfig.jsonの設定- 不要ファイルの削除など
wrangler.jsoncを手動で作成- これがないと workers にデプロイできない
bun create cloudflare@latest server- プロジェクト整備
tsconfig.jsonの設定- 不要ファイルの削除など
- D1 + Drizzle 環境構築
- 参考
- 注意: D1のAPIトークン(
CLOUDFLARE_D1_TOKEN)を作成するときは必ず開始日も設定すること
- D1 と繋いで、データを取得&返却をするサンプルを書いて疎通確認する
bun init- プロジェクト整備
tsconfig.jsonの設定- 不要ファイルの削除など
- サンプルスキーマから
openapi-typescriptで型定義を生成できるか確認する - 3 で生成した型定義を
serverとwebのどちらからか参照する設定を行い、参照できるか確認する
- pre-commit 時にテスト/リント/フォーマットが期待通りに動くか確認する
- デプロイして本番環境でも問題なく動くか確認する
- README.md / AGENTS.md の整備
- FE/BEを1枚のリポジトリで管理できる
- PJ全体の見通しが良くなる
- AIもコンテキストが散らばっていないから把握しやすい
- FE/BEをまとめてコミットできる
- APIの仕様変更が起きたときに、APIの提供者(BE)と利用者(FE)をまとめて更新して一緒にコミットすることができるのでPRが読みやすい & 背景も読み取りやすい
- 本当の意味で全検索が可能になるので、影響調査が正確 & やりやすい
- 依存関係を共有することができる
- 複雑化しやすいことからデメリットにもなり得るが、用法要領を守ればメリットの部分だけを享受できる
- (両方でTS & Bunを使うため)1つのコマンドで両方の開発サーバを立ち上げることが可能になる
- 依存関係の共有は行わない
- ルートに
biomeとlefthookを入れているが、ルートから(GitHookによるpre-commitから)しか使わないためこのようなケースは例外扱いとする - バリデーションライブラリの
valibotやテストライブラリのvitestをルートにインストールして、各パッケージから参照しに行くような運用はNG - 理由は、プロダクションコードと距離が近いようなライブラリはバージョンを更新する機会が多くあり、ルートで共有していると片方の都合だけでバージョンを更新することが困難になることが容易に予想されるためである
- ルートに
- 共有するのは「型定義」のみ
- OpenAPIの仕様書から型を生成する
openapi-typescriptによって生成されたTypeScriptの型定義を格パッケージから参照するだけに留める - 第一級オブジェクト(プリミティブ値や配列や関数などのJavaScriptにおける、すべてのオブジェクト)を共有する運用はNG
- 理由は、ビルドプロセスを含めた余計な複雑化を避けるためと、共有してはいけないオブジェクトを共有してしまうことで起こり得るセキュリティインシデントを避けるためである
- TypeScriptの型定義であればランタイムには残らないため、生産性/保守性のために同一の型定義を格パッケージから参照することはモノレポの利点を上手く享受できる方針と考えられる
- OpenAPIの仕様書から型を生成する