
Core Coding Standards
AI駆動開発でソフトウェアを開発する際に使えるコーディング規約の解説です。Go言語対応。
基本原則
命名規則
クラス設計
- 依存性注入ではインターフェースに依存する
- クラスはすべての依存関係を明示的に受け取る
- 各クラスは独立して動作するようにする
- 1ファイルに複数のクラスを配置しない
- 構造体のフィールドは非公開にしコンストラクタで初期化する
- 構造体フィールドへのアクセスはゲッターで行いセッターは避ける
- 不必要にゲッターを使わない
関数設計
- 各関数は100行以内に収める
- 関数のパラメータは5つ以内にする
- フラグパラメータで振る舞いを切り替えるのではなく関数を分割する
- 外部から呼ばれる必要がない関数は公開しない
- 目的が異なる場合は同じ処理でも関数を分ける
- 副作用よりも結果を返す純粋関数を優先する
コード品質
- switch/if-elseif分岐をインターフェースとポリモーフィズムで置き換える
- 深いネストよりもブロック文を優先する
- 同一スコープ内で変数を再利用しない
- エラーを握りつぶさない
- 値をハードコーディングしない
ドメイン駆動設計
- 重要なドメイン概念にはValue Objectを活用する
- 引数と戻り値にはできるだけValue Objectを使う
- エンティティのドメイン検証は内部メソッドで実行する
- ドメインの責務をユーティリティパッケージに入れない
