mcpField
S
solid-go

solid-go

github.com/fusengine開発3439 回インストール2 週間前に更新
リポジトリ

solid-go について

solid-goは、Goのモジュール型アーキテクチャを定めるスキルです。機能別ディレクトリ、インターフェースの配置と規模を規定し、SOLIDの資料と実装テンプレートを提供します。コード構成や再利用、依存注入の方針を揃えたいGo開発者向けです。

主な機能

  1. 01機能単位のコードモジュールを必須化
  2. 02インターフェースをportsディレクトリに限定
  3. 03ファイルとハンドラーのサイズ制限
  4. 04小さなインターフェースとgodocコメントを要求
  5. 05SOLIDとアーキテクチャのリファレンス
  6. 06モジュールとテストのテンプレート

活用シーン

  1. 01Goの機能モジュールのディレクトリを設計
  2. 02大きなハンドラーやインターフェースを分割
  3. 03機能追加前に共有コードを確認
  4. 04サービスとHTTPハンドラーのひな型を作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/fusengine/agents --skill solid-go

インストール後、Claude Code で/solid-goを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
architecture-patterns.md
dependency-inversion.md
interface-segregation.md
liskov-substitution.md
open-closed.md
single-responsibility.md
solid-principles.md
references/templates/
error.md
handler.md
interface.md
module.md
service.md
test.md

詳細

SOLID Go は Go 1.27 以降向けにモジュール式アーキテクチャを強制します。すべての機能は `internal/modules/[feature]/`(handlers、services、repositories、ports、models)の下に配置し、共有コードは `internal/core/` に置き、インターフェース(ports)は `ports/` ディレクトリにのみ配置して小さく保ち(Go のイディオムである 1〜3 メソッド)、関数はインターフェースを受け取りますが構造体を返し、すべてのエクスポートされた関数には godoc コメントを付けます。

新しいコードを書く前に、internal/core/services と internal/core/ports に対する DRY チェックを必須とします。概要については solid-principles.md を、SRP/OCP/LSP/ISP/DIP の詳細については各原則のリファレンスを、ヘキサゴナル/モジュール式のレイアウトについては architecture-patterns.md を、モジュール/サービス/インターフェース/ハンドラー/エラー/テストのスキャフォールディングについてはテンプレートを参照してください。

SOLID Go - モジュラーアーキテクチャ

エージェントワークフロー(必須)

実装の前に必ず、3 つのエージェントを並列で起動します。それぞれ name を指定した Agent 呼び出しを 1 回ずつ行います:

  1. fuse-ai-pilot:explore-codebase - 既存のアーキテクチャを分析
  2. fuse-ai-pilot:research-expert - Context7 経由で Go ドキュメントを検証
  3. fuse-ai-pilot:sniper - 実装後の検証

DRY - 作成前の再利用(必須)

新しいコードを書く前に:

  1. 類似のインターフェース、サービス、ロジックがないかコードベースを Grep する
  2. 共有の場所を確認する: internal/core/services/、internal/core/ports/
  3. 類似のコードが存在する場合 -> 重複させず、拡張/再利用する
  4. 2 つ以上の機能で使用されるコードの場合 -> internal/core/ に作成する

アーキテクチャ(モジュールは必須)

レイヤー配置場所最大行数
ハンドラーinternal/modules/[feature]/handlers/50
サービスinternal/modules/[feature]/services/100
リポジトリinternal/modules/[feature]/repositories/100
ポート(インターフェース)internal/modules/[feature]/ports/30
モデルinternal/modules/[feature]/models/50
共有internal/core/{services,ports,models}/-

フラットな internal/ 構造は決して使用しないでください - 常に internal/modules/[feature]/ を使用します


重要なルール(必須)

ルール値
ファイル上限100 行(90 行で分割)
ハンドラー50 行未満、サービスに委譲する
インターフェースports/ ディレクトリのみ
Godocすべてのエクスポートされた関数をドキュメント化
インターフェースを受け取る構造体を返す
小さなインターフェース最大 1〜3 メソッド(Go のイディオム)

リファレンスガイド

概念
トピックリファレンス参照すべきタイミング
SOLID 概要solid-principles.mdクイックリファレンス
SRPsingle-responsibility.md肥大化した構造体
OCPopen-closed.mdプロバイダーの追加
LSPliskov-substitution.mdコントラクト
ISPinterface-segregation.md肥大化したインターフェース
DIPdependency-inversion.mdインジェクション
アーキテクチャarchitecture-patterns.mdヘキサゴナル/モジュラー
テンプレート
テンプレート使用するタイミング
module.md機能モジュールの構造
service.mdビジネスロジックのサービス
interface.mdポートの定義
handler.mdHTTP ハンドラー
error.mdカスタムエラー
test.mdテーブル駆動テスト

禁止事項

アンチパターン修正方法
100 行を超えるファイル90 行で分割
実装ファイル内のインターフェースports/ ディレクトリに移動
肥大化したインターフェース(4 メソッド以上)小さなインターフェースに分割
フラットな internal/ 構造internal/modules/[feature]/ を使用
依存関係の配線に init()コンストラクターインジェクションを使用

コメント