命名規則
モノレポ内のアプリ、ファイル、テーブル、変数、環境変数の命名方法。
30以上のアプリをまたいでもモノレポをナビゲートしやすくするには、一貫した命名が鍵です。ファイル、テーブル、変数を作成するときは以下の規則に従い、迷ったら既存アプリの書き方を参考にしてください。
クイックリファレンス
| 項目 | 規則 | 例 |
|---|---|---|
| アプリディレクトリ | kebab-case | apps/checkin-board/ |
| データベーステーブル(アプリ固有) | snake_case、アプリ名プレフィックス | checkin_board_checkin |
| データベーステーブル(共有) | セマンティックプレフィックス | class_user, log_activity |
| コンポーネントファイル | PascalCase.tsx | UserProfile.tsx |
| ユーティリティファイル | camelCase.ts | formatDate.ts |
| APIルートフォルダ | kebab-case | app/api/user-profile/route.ts |
| ページルートフォルダ | kebab-case | app/user-settings/page.tsx |
| 変数 | camelCase | userName, totalCount |
| 関数 | camelCase(動詞-名詞) | getUserData(), calculateTotal() |
| 定数 | UPPER_SNAKE_CASE | MAX_RETRY_ATTEMPTS |
| React フック | useCamelCase | useUserData() |
| CSSクラス | kebab-case | user-card |
| 環境変数 | UPPER_SNAKE_CASE | DATABASE_URL, AUTH_UI_URL |
| パッケージ名 | kebab-case | "name": "checkin-board" |
アプリ
kebab-case(小文字・ハイフン区切り)を使います:
- ✅
checkin-board,breakfast-tracker,meal-planner - ❌
CheckinBoard,checkin_board,checkinBoard
アプリディレクトリ、package.jsonのname、ルートのスクリプト(dev:<app-name>, build:<app-name>, start:<app-name>)はすべて一致させます。
データベーステーブル
アプリ固有のテーブルは、アプリ名をsnake_caseにしたものをプレフィックスとして付けます:
{app_name}_{table_name}
アプリのkebab-case名をsnake_caseに変換します: checkin-board → checkin_board_*。
| アプリ | テーブル例 |
|---|---|
checkin-board | checkin_board_checkin |
breakfast-tracker | breakfast_tracker_meal |
meal-planner | meal_planner_recipe |
共有テーブル(複数のアプリで使用)はセマンティックプレフィックスを使います: class_user, log_activity, map_*。スキーマのワークフロー全体はデータベースを参照してください。
環境変数
UPPER_SNAKE_CASEを使います。RailwayにマッピングされるアプリごとのGitHub secretは、アプリ名をsnake_caseにしたプレフィックスを付けます:
BREAKFAST_TRACKER_SLACK_WEBHOOK_URLRECRUIT_ASHBY_API_KEYSTAFF_MEAL_TRACKER_OPENAI_API_KEY
これにより、30以上のアプリをまたいでもGitHub変数が衝突しません。Railwayへのマッピングについては環境変数を参照してください。
Next.jsのパブリック変数(ブラウザに公開される)はNEXT_PUBLIC_を付けます — NEXT_PUBLIC_API_URL。
Claudeに聞く
クイズ
`checkin-board`アプリの`reservations`テーブルの正しい名前はどれですか?