開発規約(Conventions)

本プロジェクトの開発規約です。コードレビューや実装で新たに合意した規約を、その都度ここへ追記・更新していきます。

⚠️ 初版(既存コードから抽出した観測ベース)。各機能のドキュメント化を進めながら、合意済みの規約として精緻化していきます。

モノレポ構成

npm workspaces + Turborepo によるモノレポ。apps/*(アプリ)と packages/*(共有パッケージ)で構成する。

apps/

  • system-manager システム管理画面
  • organization-manager 組織管理画面
  • user ユーザー画面
  • www 公開画面

packages/

  • database Prisma + zod スキーマ + ドメインヘルパー
  • datetime 日時ユーティリティ
  • mulpay 決済(Mulpay)
  • eslint-config / typescript-config 共有設定

技術スタック

ディレクトリ・命名

サーバーアクション

ルートのコロケーション(App Router)

フォーム(react-hook-form)

ルートグループ(ユーザー画面)

コンポーネント

// NG: アクションの型に依存
import { BillingRecordMonthlyTotal } from "@/actions/billing-record/list-billing-record-monthly-totals";

// OK: コンポーネント側で型を定義
type BillingRecordMonthlyTotals = {
  month: number;
  totalAmount: number;
}[];

サーバーアクション

export async function createHomestaging(data): Promise<Result<Homestaging>> {
  return action("createHomestaging", async (user) => {
    // user.organization 利用可
    if (!inputImageUri) return failed(ErrorCode.BadRequest, { log: { ... } });
    const homestaging = await prisma.homestaging.create({ ... });
    return succeeded(homestaging);
  });
}

エラーコード

Prisma / データモデル

認証・認可

外部サービス

日時・タイムゾーン

既知のブレ(要整理)

開発を進める中で方針が変わり、コードベースに生じている不整合のうち、把握済みのもの。 今後どちらかへ寄せる予定の項目を記録する(意図通りの差異はここには含めない)。

① サーバーアクションのラップ方法が不統一 置換予定

多くは action() ラッパーを使うが、system-manager の AI設定更新(update-ai-instruction.ts 当初7ファイル)は auth() を直書きしていた。3D間取りは対応済み(残り6ファイル)方針action() に置き換えていく。該当関数には // TODO を追記済み。
→ 課題:action() ラッパー未統一

② 画像生成のトリガが API ルート 制約による意図的

CRUD はサーバーアクションだが、画像生成(generate)は API ルート(app/api/{type}/[id]/generate/route.ts)に実装。 理由:画像生成はコンポーネントではなくサービスワーカー起点で呼ばれるため。本来はサーバーアクションにしたいが、現状の制約で API ルートに置いている。
→ 課題:画像生成のトリガが API ルート

generateImage のシグネチャ不統一 統一予定

多くは generateImage(session, data) だが、ホームステージングのみ generateImage(data)方針generateImage(session, data) へ統一する。該当関数に // TODO 追記済み。
→ 課題:generateImage シグネチャ不統一
※ ホームステージングが AI設定を使わない点は意図通り(マスタ由来)でありブレではない。

※ 本ドキュメントは継続更新します。新たに合意した規約・例外・非推奨パターンがあれば随時追記してください。