コーディングガイドライン
このドキュメントは Todo プロジェクトで Python と TypeScript の双方におけるコーディングスタイルおよび開発ルールをまとめたものです。既存のリンターやフォーマッターを尊重しつつ、可読性と保守性を最大化することを目的とします。
共通方針
- 変更意図をコミットメッセージとコードコメントで明確にする。複雑な処理のみコメントを追加し、冗長な説明は避ける。
- 型情報を積極的に活用し、CI で発見できる問題はローカルでも早期に検出する。
- フォーマッタ(Python:
uv run ruff format、TypeScript:npm run lint:fixなど)が提供されている場合は必ず適用してからプルリクエストを作成する。 - 新規機能やバグ修正にはテストを追加し、既存テストが赤になっていないことを確認する。
Python
- スタイルは PEP 8 に従い、
ruffによるフォーマットとリンティングを基準とする。 - 可能な限り型ヒントを付与し、
mypyなどの型チェッカーで検証できる状態を保つ。 - 関数は単一責務と可読性・保守性を重視し、複雑または読みにくくなった場合はヘルパー関数への分割を検討する(目安として 25 行程度を参考にしてもよいが、厳密な基準ではありません)。
- 例外は具体的な型で捕捉し、
except Exceptionのような広すぎるキャッチは避ける。 - ロギングには標準の
loggingモジュールを使用し、printによるデバッグ出力は残さない。 - テストは
pytestを使用し、Arrange-Act-Assert パターンで構造化する。外部 API はpytest-mockでスタブ化し、安定したテストを心掛ける。
TypeScript
- スタイルはプロジェクトに定義された ESLint ルールと
prettier設定に従う。 - すべての公開 API には明示的な型注釈を付与し、
anyの使用は必ず// eslint-disable-next-line @typescript-eslint/no-explicit-anyと、その直上に「なぜanyが必要か」を説明するコメントの両方を記載した場合のみ許可する。 - React コンポーネントは関数コンポーネントを基本とし、
useEffectなどのフックは依存配列を厳密に管理する。 - データ取得や副作用は Service 層やカスタムフックに分離し、UI コンポーネントを薄く保つ。
async/awaitを使用して非同期処理を記述し、エラーハンドリングにはtry/catchもしくはResultパターンを採用する。- Playwright などの E2E テストではユーザー操作を基本単位とする。
- セレクタはまずロールやラベル、テキストなどアクセシビリティに基づくもの(例: role, accessible name, label)を優先して使用し、どうしても難しい場合のみテスト ID (
data-testid) を利用する。
レビューとテスト
- プルリクエストには変更概要、動作確認結果、テスト手順を必ず記載する。
- CI が落ちた場合は原因を特定し、修正コミットを積むかリベースで解消する。
- レビューコメントには具体的な改善案を添え、曖昧な指摘にならないようにする。
これらのガイドラインは継続的に見直し、プロジェクトの成長に合わせて更新してください。