コーディングルール
命名規則
| 対象 | 規則 | 例 |
|---|---|---|
| TS の変数・関数 | camelCase | handleTableChange |
| React コンポーネント | PascalCase | QuestionResponseChart |
| コンポーネントの配置 | components/<カテゴリ>/<Name>/index.tsx + index.scss |
components/SurveyCharts/QuestionResponseGrid/index.tsx |
| ページの配置 | pages/<Name>/index.tsx + index.scss |
pages/Sample2/index.tsx |
| CSS クラス | BEM | sample2-page__title / step-card__select |
| TS の定数 | UPPER_SNAKE_CASE | CATALOG_NAME / QUESTION_TYPE_FILTER |
| Python の変数・関数 | snake_case | fetch_all_questions |
| Pydantic モデル | PascalCase | QuestionDataResponse |
| API のパス・クエリ | snake_case | /api/catalogs/{catalog_name}/.../all_questions?question_type= |
フォーマッター・リンター
設定ファイル: nodejs-fastapi-hello-world-app/.prettierrc.json、nodejs-fastapi-hello-world-app/eslint.config.js
Prettier の設定はセミコロンなし・シングルクォート・printWidth: 100・trailingComma: es5。リポジトリルートの .husky/pre-commit が format:check と lint を実行するため、違反するとコミットできない。
Python 側のフォーマッター・リンターは未導入。
PRとレビューの基準
- 1PRは1つの目的に絞る
- レビュワーが理解できるよう説明をPR本文に書く
- セルフレビューをしてからレビュー依頼する
- フロントエンドを変更した PR には
npm run buildの成果物(backend/static/)を含める。含めないと本番に反映されない - API を変更した PR には
npm run generate:clientの再生成結果を含める
ブランチ戦略
| ブランチ | 環境 |
|---|---|
main |
dev |
stg |
stg |
prd |
prd |
アンチパターン
- 生成物を手で編集する —
frontend/src/api/generated/**とfrontend/src/api/openapi.yamlは生成物。変更したいときは元の Pydantic モデル/response_modelを直してnpm run generate:clientを実行する。 - SQL に識別子を直接埋め込む — catalog / schema / table は必ず
backend/sql/utils.fully_qualified_nameを通す(^[A-Za-z0-9_]+$の allowlist + バッククォート)。 - SQL に値を文字列連結する — 値は必ず
?プレースホルダで渡す。 - route に業務ロジックを書く —
routes/は薄く保つ。asyncio.to_threadで同期の SQL 層を呼び、例外をValueError → 400/RuntimeError → 503/ その他 → 500 にマップするだけにする。 - API クライアントを手書きする — orval の生成 hook を使う。
any型の多用 — 生成された型をそのまま使う。backend/generate_models_from_databricks.pyを実行して放置する — このスクリプトはbackend/models/__init__.pyを生成モデルだけで上書きするため、実行後にapi/data_sqlの import を手で戻す。