solid-go について
solid-goは、Goのモジュール型アーキテクチャを定めるスキルです。機能別ディレクトリ、インターフェースの配置と規模を規定し、SOLIDの資料と実装テンプレートを提供します。コード構成や再利用、依存注入の方針を揃えたいGo開発者向けです。
主な機能
- 01機能単位のコードモジュールを必須化
- 02インターフェースをportsディレクトリに限定
- 03ファイルとハンドラーのサイズ制限
- 04小さなインターフェースとgodocコメントを要求
- 05SOLIDとアーキテクチャのリファレンス
- 06モジュールとテストのテンプレート
活用シーン
- 01Goの機能モジュールのディレクトリを設計
- 02大きなハンドラーやインターフェースを分割
- 03機能追加前に共有コードを確認
- 04サービスとHTTPハンドラーのひな型を作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ fusengine/ agents --skill solid-goインストール後、Claude Code で/solid-goを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/architecture-patterns.mddependency-inversion.mdinterface-segregation.mdliskov-substitution.mdopen-closed.mdsingle-responsibility.mdsolid-principles.mdreferences/templates/error.mdhandler.mdinterface.mdmodule.mdservice.mdtest.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 回ずつ行います:
- fuse-ai-pilot:explore-codebase - 既存のアーキテクチャを分析
- fuse-ai-pilot:research-expert - Context7 経由で Go ドキュメントを検証
- fuse-ai-pilot:sniper - 実装後の検証
DRY - 作成前の再利用(必須)
新しいコードを書く前に:
- 類似のインターフェース、サービス、ロジックがないかコードベースを Grep する
- 共有の場所を確認する:
internal/core/services/、internal/core/ports/ - 類似のコードが存在する場合 -> 重複させず、拡張/再利用する
- 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 | クイックリファレンス |
| SRP | single-responsibility.md | 肥大化した構造体 |
| OCP | open-closed.md | プロバイダーの追加 |
| LSP | liskov-substitution.md | コントラクト |
| ISP | interface-segregation.md | 肥大化したインターフェース |
| DIP | dependency-inversion.md | インジェクション |
| アーキテクチャ | architecture-patterns.md | ヘキサゴナル/モジュラー |
テンプレート
| テンプレート | 使用するタイミング |
|---|---|
| module.md | 機能モジュールの構造 |
| service.md | ビジネスロジックのサービス |
| interface.md | ポートの定義 |
| handler.md | HTTP ハンドラー |
| error.md | カスタムエラー |
| test.md | テーブル駆動テスト |
禁止事項
| アンチパターン | 修正方法 |
|---|---|
| 100 行を超えるファイル | 90 行で分割 |
| 実装ファイル内のインターフェース | ports/ ディレクトリに移動 |
| 肥大化したインターフェース(4 メソッド以上) | 小さなインターフェースに分割 |
フラットな internal/ 構造 | internal/modules/[feature]/ を使用 |
依存関係の配線に init() | コンストラクターインジェクションを使用 |
コメント
Markdown 対応