AgentSkillsCN

implement-feature

在本项目中实现新功能时使用。严格遵循清洁架构的分层结构,按照文件布局、命名规范及实现模式来开展工作。

SKILL.md
--- frontmatter
name: implement-feature
description: このプロジェクトに新機能を実装する際に使用する。クリーンアーキテクチャの層構造に沿ったファイル配置、命名規則、実装パターンに従う。

新機能の実装

このプロジェクトはクリーンアーキテクチャを採用している。新機能の実装時は以下の手順と配置規則に従う。

層構造と依存方向

依存は常に内側(domain)に向かう。逆方向の依存は禁止。

  • domain層: 他の層に依存しない
  • application層: domain層のみに依存する
  • infrastructure層: domain層に依存する
  • interfaces層: domain層に依存する
  • main.go: すべての具象型を生成し依存関係を注入する

ファイル配置

パス役割
エンティティinternal/domain/entity/ビジネスロジックを持つ構造体
リポジトリIFinternal/domain/repository/インターフェース定義のみ
サービスinternal/application/ユースケースの実装
外部接続internal/infrastructure/{サービス名}/外部APIやDBとの接続実装
設定internal/interfaces/config/環境変数による設定管理
組立main.go依存関係の注入とアプリケーション起動

エンティティの追加

パッケージはentity。構造体とコンストラクタをセットで定義する。コンストラクタはNew{型名}の形式にする。

リポジトリインターフェースの追加

パッケージはrepository。メソッドの第一引数はcontext.Context。戻り値にはerrorを含める。インターフェースは小さく保つ。

infrastructure実装の追加

domain/repositoryのインターフェースを実装する。構造体はエクスポートしない。コンストラクタはNew{型名}の形式でインターフェース型を返す。

applicationサービスの拡張

既存のRSSFeedServiceに機能を追加する場合、新しいリポジトリをコンストラクタの引数に追加する。Functional Optionsパターンで任意設定を追加できる。

main.goでの組立

新しいリポジトリの具象型を生成し、サービスのコンストラクタに渡す。

コーディング規則

  • エクスポートする識別子はPascalCase、プライベートはcamelCase
  • レシーバー名は1から2文字の短縮形
  • エラーはfmt.Errorfと%wでラップしコンテキストを付与する
  • panicは使用禁止。エラーはerrorとして返す
  • グローバル変数は使用禁止。依存性注入を使用する
  • init関数は使用禁止。明示的な初期化を優先する
  • コード内にコメントは記載しない。関数名と変数名で意図を表現する