yu-Yoshiaki coo-maeda .cursorrules file for TypeScript

# アシスタント設定
- 役割: エキスパートプログラミングアシスタント
- 言語: 日本語(デフォルト)/ 英語
- フォーマット: Markdown

## 基本的にテスト駆動開発を行なってください。
- テストコードは`tests/`ディレクトリに作成してください。

## 応答フォーマット
1. 説明(マークダウン形式)
2. コードブロック(以下を含む):
   - 言語識別子
   - 編集対象ファイルパス
   - 変更箇所の前後のコンテキスト
3. 補足情報(必要な場合)

## コード編集ルール
1. 関連する変更箇所のみ表示
2. 関数のコンテキストを含める
3. 変更のない部分はコメントで省略
4. ファイル全体の表示は要求された場合のみ

## ファイル作成
- 常に完全なファイル内容を表示
- 言語とパスを含める: ```言語:パス/へ/ファイル

; ## タスク作成ルール
; 1. 対象ディレクトリで`tasks/todo/`ディレクトリが存在する場合は、`tasks/todo/`ディレクトリに作成。ない場合は、ディレクトリを作成してから作成。
; 2. フォーマット: NNN_タスク名.ts
; 3. 含めるべき内容:
;    - 概要
;    - 対象ファイル
;    - 目的
;    - 実装内容
;    - 注意点
;    - 想定される課題
;    - 参考情報
;    - ステータス
; - タスクは`tasks/doing/`ディレクトリに作成してください。
; - タスクは`tasks/done/`ディレクトリに移動してください。
; - タスクは`tasks/todo/`ディレクトリに作成してください。
; - できるだけタスクを消化してください。
; - 一つ一つのタスクは、小さく分割してください。一つが重く・大きくなりすぎないようにしてください。
; - ドキュメント作成系は`docs/`ディレクトリに作成するタスクにしてください。
; - 作成する際は、現在の最終番号を確認してください。タスク番号が重複しないようにしてください。

## CLIコマンド
- 必ずpwdで現在位置を確認
- 不明確な指示は確認を取る

## エラー処理
- 必要に応じて詳細を確認
- 詳細なエラーメッセージを提供
- 代替案を提案

## 要件⇄プログラム の同期
- 要件 と プログラムが一致しているか定期チェックを行なってください。要件は`docs/`ディレクトリに存在します。
- テストとプログラムが乖離している場合は、テストを修正してください。

## Next.jsについて
- デフォルトでは`tsconfig.json`に`"jsx": "preserve"`が設定されています。
- これは、`tsx`ファイルを`ts`ファイルとして扱うためのものです。
- ファイル・コンポーネントはできるだけ分割してください。
- 基本、React Server Componentを使用してください。
- Client Componentを使用する場合は、`use client`をつけてください。
- Client Componentは、最低限のコードのみを記述してください。

## パッケージマネージャー
- パッケージマネージャーは`pnpm`を使用してください。
- わからない場合は、lockファイルを見てください。pnpm: pnpm-lock.yaml, bun: bun.lockb, yarn: yarn.lock, npm: package-lock.json

## 命名規則
### データベース
- テーブル名: スネークケース(例: business_plans)
- カラム名: スネークケース(例: created_at)
- 外部キー: 参照先テーブル名の単数形_id(例: user_id)
- 列挙型: スネークケース(例: schedule_status)

### TypeScript/JavaScript
- 変数名: キャメルケース(例: createdAt)
- クラス名: パスカルケース(例: BusinessPlan)
- インターフェース名: パスカルケース(例: BusinessPlanInput)
- 型名: パスカルケース(例: ActionItem)
- 列挙型: パスカルケース(例: ScheduleStatus)
- 定数: 大文字スネークケース(例: MAX_RETRY_COUNT)

### 型変換
- データベース ⇄ TypeScript間の自動変換
  - スネークケース ⇄ キャメルケース
  - Date ⇄ ISO8601文字列
  - Array ⇄ JSON文字列

## データベース連携
### 型安全性
- 型定義の一貫性
  - フロントエンド型定義
  - API入力型定義
  - データベーススキーマ
  の3つで整合性を保つ

### 日付フォーマット
- データベース: timestamptz
- フロントエンド: Date型
- API: ISO8601文字列
- タイムゾーン: UTC

### オプショナル項目
- データベース: NULL許容
- TypeScript: Optional型(例: field?: string)
- バリデーション: zodスキーマで定義

### インデックスシグネチャ
- Record<string, unknown>の使用は避ける
- 具体的な型を指定する

### 配列のkey
- インデックスの使用は避ける
- タイムスタンプや一意なIDを使用

## エラーハンドリング
### 階層化されたエラー処理
- OpenAIエラー
- JSON解析エラー
- 型変換エラー
の順で処理

### エラー状態の型定義
- status: success/error/loading/pending
- data: 成功時のデータ
- error: エラー情報
- message: ユーザー向けメッセージ

## 認証・認可
### セッション管理
- supabase.auth.getUser()による統一的な認証
  - createClient()による認証クライアント取得
  - getUser()による認証チェック
  - cookieを使用しない認証
  - エラーハンドリング
    - userError || !user による統一的なチェック
    - 401エラーレスポンス
  - ユーザーIDの取得
    - user.id による一貫した参照

### エラーレスポンス
- 401: 認証が必要
- 403: アクセス権限なし
- 404: リソースが存在しない
- エラーメッセージの統一
  - message: エラーメッセージ
  - code: エラーコード
  - details: 詳細情報(オプション)
bun
css
java
javascript
next.js
npm
openai
plpgsql
+5 more

First Time Repository

TypeScript

Languages:

CSS: 1.6KB
JavaScript: 0.4KB
PLpgSQL: 20.0KB
TypeScript: 244.2KB
Created: 12/23/2024
Updated: 1/4/2025

All Repositories (1)