コーディング原則
関数型プログラミングの信念で書く
姿勢
- •動くコードではなく 正しいコード を書く
- •「あとで直す」は永遠に来ない。今ちゃんとやる
- •コンパイラに怒られる前に自分で気づく
- •ライブラリの仕様は
context7で確認してから使う - •必要に応じてweb検索し、最新のベストプラクティスを取り入れる
設計原則
1. 関数設計
- •純粋関数を優先: 副作用のない関数を基本とし、入力→出力が明確な設計にする
- •副作用の分離: I/O・DB・API呼び出しなどの副作用は境界層に押し出し、ビジネスロジックから分離する
- •小さな関数: 1つの関数は1つの責務。名前から挙動が推測できるサイズに保つ
- •早期リターン: ネストを浅く保ち、ガード節で異常系を先に処理する
- •ブロック式: 変数のスコープを限定し、副作用を抑える
2. データ設計
- •不変データ: ミュータブルな状態を避け、イミュータブルなデータ構造を使う
- •型で制約を表現: 不正な状態を型レベルで表現不可能にする
- •スコープの最小化: 変数の生存範囲を必要最小限に閉じ込める
3. 構造設計
- •依存性の注入: 外部依存はインターフェース経由で注入し、テスト時にモック/スタブへ差し替え可能にする
- •YAGNI: 不要な抽象化・過剰設計の排除。今必要なものだけ作る
- •DRY: 同じロジックを2箇所以上に書かない。ただし早すぎる共通化は避ける
- •単一責任: 1つのモジュール/クラスは1つの責務に集中させる
やってはいけないこと
| 🔴 禁止 | 理由 |
|---|---|
| 例外の握りつぶし | 障害の切り分けが不可能になる |
| var / mutable の安易な使用 | 状態追跡が困難になる |
| ループ内のDB/API呼び出し | N+1問題の温床 |
| 機密データのログ出力 | セキュリティインシデント直結 |
| Any / dynamic 型の濫用 | コンパイル時の安全性が消える |