Skip to content

Latest commit

 

History

History
121 lines (92 loc) · 5.53 KB

File metadata and controls

121 lines (92 loc) · 5.53 KB

コード規約

このファイルはプロジェクト全体で共有するコード規約です。 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 など)はコミットしない

Git・コミット

  • 1コミットは1つの変更を表すようにする(複数の変更をまとめない)
  • コミットメッセージは以下のプレフィックスを使う:
    • feat: 新機能
    • fix: バグ修正
    • refactor: リファクタリング(動作変更なし)
    • test: テスト追加・修正
    • docs: ドキュメント変更
    • chore: ビルド・設定変更

TypeScript / JavaScript

  • any 型の使用は禁止。unknown を使い型を絞り込むこと
  • 型のインポートは import type を使う
  • nullundefined を混在させない(どちらかに統一する)
  • Optional Chaining(?.)と Nullish Coalescing(??)を積極的に使う

非同期処理

  • async/await に統一する(.then() チェーンは新規コードでは使わない)
  • awaittry/catch で囲むか、呼び出し元でエラーハンドリングする
  • Promise.all を使って並列化できる処理は並列化する

その他

  • == ではなく === を使う
  • var は禁止。const を優先し、再代入が必要な場合のみ let を使う
  • for...in はオブジェクトのみ。配列には for...of か配列メソッドを使う

Go

命名

  • パッケージ名は小文字の単語(アンダースコアなし)
  • エクスポートされる識別子は PascalCase、内部は camelCase
  • エラー変数名は err、複数ある場合は xxxErr と具体的に命名する

エラー処理

  • エラーは必ず処理する(_ での無視は禁止)
  • エラーは fmt.Errorf("処理名: %w", err) でラップしてコンテキストを付与する
  • panic は原則禁止(ライブラリコードでは絶対禁止)

その他

  • goroutine を起動する場合は必ず終了条件を明確にする(リーク防止)
  • context.Context は関数の第1引数として渡す
  • インターフェースはそれを使う側のパッケージに定義する(実装側ではなく)
  • テストはテーブル駆動テストで書く

HTML / CSS(フロントエンド共通)

HTML

  • セマンティックタグを使う(<div> だけで構造を作らない)
  • alt 属性をすべての <img> に設定する(装飾画像は alt=""
  • フォームには適切な <label> を関連付ける(for 属性を使う)
  • <table> はデータ表示のみに使う(レイアウトへの使用は禁止)

CSS

  • クラス名は kebab-case(例: card-title
  • !important は原則禁止(使う場合はコメントで理由を明記)
  • インラインスタイル(style 属性)は禁止(動的に値が変わる場合を除く)
  • マジックナンバーは CSS 変数(--var-name)で管理する

React

コンポーネント

  • Functional Component のみ使用(クラスコンポーネントは禁止)
  • コンポーネントのファイル名は PascalCase(例: UserCard.tsx
  • props には必ず型定義(interface または type)を付ける
  • 1コンポーネントは1ファイルを原則とする

Hooks

  • useEffect の依存配列は正確に指定する(ESLint の警告を無視しない)
  • カスタムフックで副作用ロジックをコンポーネントから切り出す
  • 配列の key に index を使わない(ユニークな ID を使う)

Backnote 用にカスタマイズ済み(TypeScript + Go + React)