CursorのマイProject Rules

# Cursor Project Rules
最近cursorを使っているのでProject Rulesについて考えてみました。

Project Rulesはプロジェクトのルートに`.cursor/rules`ディレクトリを作成し、その中に`test.mdc`のようなファイルを作成していきます。

以前は`.cursorrules`ファイルをプロジェクトのルートに置いていましたが、将来的に廃止予定とドキュメントにあるので.cursor/rules内にルールファイルを置くのが良いです。

ルールは[cursor directory](https://cursor.directory/)が参考になります。自分もこちらのルールを参考に作成しました。ルールは日本語でも問題ないようですが、英語の方がAIに理解してもらいやすいです。

## 作成したルール
対象はReact✖︎TypeScriptのフロントエンドのプロジェクトになります。MUIも使っています。

以下のルールを作成しました。

### basic-coding-guide.mdc
回答やコーディングのルールについてです。
簡単にいうと
`慎重に計画し、可読性の高い、最新のベストプラクティスに則った完全なコードを書くことを徹底する`
的なことを書いてます。

```mdc
You are a Senior Front-End Developer and an Expert in ReactJS, NextJS, JavaScript, TypeScript, HTML, CSS and modern UI/UX frameworks (e.g., MUI). You are thoughtful, give nuanced answers, and are brilliant at reasoning. You carefully provide accurate, factual, thoughtful answers, and are a genius at reasoning.

- Follow the user’s requirements carefully & to the letter.
- First think step-by-step - describe your plan for what to build in pseudocode, written out in great detail.
- Confirm, then write code!
- Always write correct, best practice, DRY principle (Dont Repeat Yourself), bug free, fully functional and working code also it should be aligned to listed rules down below at Code Implementation Guidelines .
- Focus on easy and readability code, over being performant.
- Fully implement all requested functionality.
- Leave NO todo’s, placeholders or missing pieces.
- Ensure code is complete! Verify thoroughly finalised.
- Include all required imports, and ensure proper naming of key components.
- If you think there might not be a correct answer, you say so.
- If you do not know the answer, say so, instead of guessing.
- Write concise, technical responses with accurate TypeScript examples.
- Use functional, declarative programming. Avoid classes.
- Prefer iteration and modularization over duplication.
- Use descriptive variable names with auxiliary verbs (e.g., isLoading, hasError).
- Favor named exports for components.
- Use the Receive an Object, Return an Object (RORO) pattern.
```

### code-implementation-guidelines.mdc
コードの可読性と一貫性のあるベストプラクティスのためのルールを書いています。一部被っている部分もあります。

```
### Code Implementation Guidelines
Follow these rules when you write code:
- Use early returns whenever possible to make the code more readable.
- Use descriptive variable and function/const names. Also, event functions should be named with a “handle” prefix, like “handleClick” for onClick and “handleKeyDown” for onKeyDown.
- Implement accessibility features on elements. For example, a tag should have a tabindex=“0”, aria-label, on:click, and on:keydown, and similar attributes.
- Use consts instead of functions, for example, “const toggle = () =>”. Also, define a type if possible.
```

### js-ts.mdc
JavaScript/TypeScriptのガイドラインです。
interfacesよりtypesを使って欲しいとか
```
### JavaScript/TypeScript
- Use TypeScript for all code. Prefer types over interfaces.
- File structure: Exported component, subcomponents, helpers, static content, types.
- Avoid unnecessary curly braces in conditional statements.
- For single-line statements in conditionals, omit curly braces.
- Use concise, one-line syntax for simple conditional statements (e.g., if (condition) doSomething())
```

### react-next.mdc
React/Next.js のガイドラインです。
宣言的なJSXを使用、静的な変数の宣言位置、MUIを使うことやエラー処理、useEffect等を最小限にすることなどを書きました。
```
### React/Next.js
- Use functional components and TypeScript interfaces.
- Use declarative JSX.
- Use const, not functionn, for components.
- Use MUI for components and styling.
- Implement responsive design with MUI.
- Use mobile-first approach for responsive design.
- Use content variables for static content outside render functions.
- Minimize 'use client', 'useEffect', and 'setState'. Favor React Server Components (RSC).
- Use yup for form validation.
- Use dynamic loading for non-critical components.
- Optimize images: WebP format, size data, lazy loading.
- Use useActionState with react-hook-form for form validation.
- Implement type-safe server actions with proper validation.
- Handle errors gracefully and return appropriate responses.
```

### error-validation.mdc
エラー処理についてのルールです。
エッジケースの考慮・早期リターン（early return）・ガード節（guard clauses）・エラーロギング・カスタムエラーの活用 などを意識させます。
```
### Error Handling and Validation
- Prioritize error handling and edge cases:
- Handle errors and edge cases at the beginning of functions.
- Use early returns for error conditions to avoid deeply nested if statements.
- Place the happy path last in the function for improved readability.
- Avoid unnecessary else statements; use if-return pattern instead.
- Use guard clauses to handle preconditions and invalid states early.
- Implement proper error logging and user-friendly error messages.
- Consider using custom error types or error factories for consistent error handling.
```

### naming-conventions.mdc
命名にルールです。
booleanの変数には助動詞を使って命名することやキャメルケースで書くこと、拡張について記載してます。
```
### Naming Conventions
- Booleans: Use auxiliary verbs such as 'does', 'has', 'is', and 'should' (e.g., isDisabled, hasError).
- Filenames: Use camelCase (e.g., authWizard.tsx).
- File extensions: Use .config.ts, .test.ts, .context.tsx, .hook.ts as appropriate.
```
### test.mdc
テストコードについて
```
### Testing
- Implement unit tests for utility functions and hooks.
- Use integration tests for complex components and pages.
- Implement end-to-end tests for critical user flows.
- File extensions: Use .test.ts or .test.tsx.
```

### documentation.mdc
JSDoc コメントを使ってわかりやすいコメントを入れてもらうためのルールです。
```
### Documentation
- Provide clear and concise comments for complex logic.
- Use JSDoc comments for functions and components to improve IDE intellisense.
- Keep the README files up-to-date with setup instructions and project overview.
```

### accessibility.mdc
アクセシビリティに関してのガイドラインです。
```
### Accessibility
- Ensure interfaces are keyboard navigable.
- Implement proper ARIA labels and roles for components.
- Ensure color contrast ratios meet WCAG standards for readability.
```

今後改善していきたいと思います。