このファイルはプロジェクト全体で共有するコード規約です。
setup.sh実行時にCLAUDE.mdへ取り込まれ、AIコードレビューの基準として使用されます。
- 変数・関数名は意図が伝わる名前をつけること(
tmp,data,valなどの汎用名は禁止) - 略語は広く知られているもの(
url,id,html)以外は使わない - ブール値の変数名は
is_,has_,can_などの接頭辞をつける(例:isLoading,hasError) - 定数はすべて大文字のスネークケースで定義する(例:
MAX_RETRY_COUNT)
- なぜそうしたか(Why) を書く。何をしているか(What)はコードを読めばわかる
- コメントアウトしたコードはコミットしない(履歴はGitで管理する)
TODO/FIXMEを書く場合は担当者名と対応予定を必ず記載する- 例:
// TODO(yamada): キャッシュ対応後に削除 #123
- 例:
- 1つの関数は1つのことだけを行う(単一責任の原則)
- 関数の行数は50行以内を目安にする(超える場合は分割を検討)
- 引数は4つ以内を目安にする(超える場合はオブジェクト/構造体にまとめる)
- 早期リターン(ガード節)を使い、ネストを深くしない
- エラーは握りつぶさない(空の
catchブロック、_での無視は禁止) - エラーメッセージにはデバッグに役立つ情報(対象ID、操作内容)を含める
- ユーザー向けのエラーメッセージと、ログ用のエラーメッセージを混在させない
- APIキー・パスワード・トークンのハードコードは絶対禁止(環境変数で管理)
- ユーザー入力は必ずバリデーション・サニタイズしてから使用する
- デバッグ用の出力(
console.log,var_dump,printなど)はコミットしない
- 1コミットは1つの変更を表すようにする(複数の変更をまとめない)
- コミットメッセージは以下のプレフィックスを使う:
feat:新機能fix:バグ修正refactor:リファクタリング(動作変更なし)test:テスト追加・修正docs:ドキュメント変更chore:ビルド・設定変更
any型の使用は禁止。unknownを使い型を絞り込むこと- 型のインポートは
import typeを使う nullとundefinedを混在させない(どちらかに統一する)- Optional Chaining(
?.)と Nullish Coalescing(??)を積極的に使う
async/awaitに統一する(.then()チェーンは新規コードでは使わない)awaitはtry/catchで囲むか、呼び出し元でエラーハンドリングするPromise.allを使って並列化できる処理は並列化する
==ではなく===を使うvarは禁止。constを優先し、再代入が必要な場合のみletを使うfor...inはオブジェクトのみ。配列にはfor...ofか配列メソッドを使う
- パッケージ名は小文字の単語(アンダースコアなし)
- エクスポートされる識別子は PascalCase、内部は camelCase
- エラー変数名は
err、複数ある場合はxxxErrと具体的に命名する
- エラーは必ず処理する(
_での無視は禁止) - エラーは
fmt.Errorf("処理名: %w", err)でラップしてコンテキストを付与する panicは原則禁止(ライブラリコードでは絶対禁止)
goroutineを起動する場合は必ず終了条件を明確にする(リーク防止)context.Contextは関数の第1引数として渡す- インターフェースはそれを使う側のパッケージに定義する(実装側ではなく)
- テストはテーブル駆動テストで書く
- セマンティックタグを使う(
<div>だけで構造を作らない) alt属性をすべての<img>に設定する(装飾画像はalt="")- フォームには適切な
<label>を関連付ける(for属性を使う) <table>はデータ表示のみに使う(レイアウトへの使用は禁止)
- クラス名は kebab-case(例:
card-title) !importantは原則禁止(使う場合はコメントで理由を明記)- インラインスタイル(
style属性)は禁止(動的に値が変わる場合を除く) - マジックナンバーは CSS 変数(
--var-name)で管理する
- Functional Component のみ使用(クラスコンポーネントは禁止)
- コンポーネントのファイル名は PascalCase(例:
UserCard.tsx) - props には必ず型定義(interface または type)を付ける
- 1コンポーネントは1ファイルを原則とする
useEffectの依存配列は正確に指定する(ESLint の警告を無視しない)- カスタムフックで副作用ロジックをコンポーネントから切り出す
- 配列の
keyに index を使わない(ユニークな ID を使う)
Backnote 用にカスタマイズ済み(TypeScript + Go + React)