golang-ddd-refactor について
ビジネスルールが通信層や永続化コードに散在する Go プロジェクトを、DDD に沿ってリファクタリングするスキルです。段階的な移行、ドメインテスト、リポジトリ境界の整理を扱います。
主な機能
- 01ビジネスルールをドメインの振る舞いに抽出
- 02コンストラクターで有効な状態を保証
- 03ドメインとデータベースの関心を分離
- 04リポジトリインターフェースを絞り込む
- 05ブラックボックスのドメインテストを追加
活用シーン
- 01業務ルールが散在する Go ハンドラーの改修
- 02ドメインパッケージから永続化型を排除
- 03重複検証をドメイン不変条件に置き換え
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ joeyave/ golang-ddd-skills --skill golang-ddd-refactorインストール後、Claude Code で/golang-ddd-refactorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/domain-rules.mdrefactor-playbook.md詳細
Golang DDD リファクタリング
コードはすでに動作しているものの、ビジネスルールがトランスポート層や永続化コードに散在しているため、信頼性やテスト容易性、拡張性が損なわれている場合に、このスキルを使用してください。
リファクタリングの手順
- システムの境界からユースケースを見つけます。
- HTTP ハンドラー、gRPC メソッド、コマンド、リポジトリのコールバック、トランザクションブロックから始めます。
- 新しい型を導入する前に、ビジネス上の操作を平易な言葉で書き出します。
- 条件分岐に隠れているルールを抽出します。
- 何かを実行できるかどうかを判断する、「
ifの壁」を探します。 - そのルールを不変条件と、ドメイン型の振る舞いメソッドに変換します。
- ドメイン型を作成するか、改善します。
- 無効な状態を拒否するコンストラクターを優先します。
- 外部からの変更で不変条件が破られる場合は、非公開フィールドを優先します。
- セッターを、ビジネス用語で命名した振る舞いメソッドに置き換えます。
- ドメインをデータベースに依存しない形にします。
- ドメインパッケージから Firestore、SQL、protobuf、HTTP に関する要素を取り除きます。
- ストレージ上の形がドメインの形と異なる場合は、個別の永続化モデルを導入します。
- リポジトリーの境界を再構築します。
- リポジトリーインターフェースは、それを使用するコードの近くに配置します。
- すべてのビジネス操作を反映したリポジトリーメソッドよりも、読み込みや更新など、汎用的なリポジトリー機能を優先します。
- 書き込みにトランザクション内での読み取り・変更・保存が必要な場合は、クロージャーを使った更新メソッドを使用します。
- ドメインのブラックボックステストを追加します。
- 非公開フィールドではなく、エクスポートされた振る舞いをテストします。
- 「利用可能な時間」や「キャンセルされたトレーニング」など、意味のあるドメインオブジェクトを作成するヘルパーを使用します。
- ドメインテストにモックを含めないでください。
- 古いコードパスを縮小します。
- ハンドラー、サービス、リポジトリーから新しいドメインの振る舞いに処理を委譲します。
- ドメインで確実に検証できるようになったら、重複したバリデーションを削除します。
ガードレール
- 実際のビジネス上の振る舞いを明確にしない限り、エンティティや値オブジェクトを作らないでください。
- 純粋なトランスポート層のバリデーションがビジネスルールでない限り、ドメインに移さないでください。
- データベースのトランザクション型やクライアントをドメインに漏らさないでください。
- 古いコードで使われていたという理由だけで、書き込み可能な公開フィールドを残さないでください。
これらのリファレンスを使用する
- このスキルパック向けに調整された基本ルールについては、references/domain-rules.md を参照してください。
- 段階的な移行手順とアンチパターンのチェックリストについては、references/refactor-playbook.md を参照してください。
成果物
- 振る舞いを中心としたドメインメソッド
- 有効性を保証するコンストラクターまたはファクトリー
- 簡素化されたリポジトリーの契約
- ハンドラーやアダプターから削除された重複するビジネスチェック
- ビジネス用語で振る舞いを記述した、対象を絞ったドメインテスト
コメント
Markdown 対応