Communitygithub.com

クラフツマン・コーダー: SOLID、AST CodeGraph影響解析、エビデンスファースト工学

SOLID原則(特に単一責任)、依存性注入、垂直スライスアーキテクチャとエンタープライズ統合パターンを強制し、AST/CodeGraphによる影響範囲分析、高パフォーマンスかつ低RAMのライブラリ選択、エビデンスファーストなTDD手法で堅牢なソフトウェア開発を支援します。

クラフツマン・コーダー: SOLID、AST CodeGraph影響解析、エビデンスファースト工学 とは?

このスキルは、任意のリポジトリにおいて、SOLID原則(単一責任の原則SRP)、依存性注入(DI)、垂直スライスアーキテクチャ(VSA)+エンタープライズ統合パターン(EIP)に基づく、規律ある工学的ワークフローを提供します。ASTおよびCodeGraphを用いたシンボル定義と呼び出し関係の事前影響範囲(ブラストラディウス)分析を必須とし、変更による波及リスクを最小化します。また、VSAのスライス間の依存を禁止する境界リンティング、リポジトリルートに設定を一元化する移植可能なGEMINI.mdの生成、リアルタイムWeb検索による最適なBig-O計算量の選択、高パフォーマンス・低RAMかつエンタープライズライセンス(MIT/Apache 2.0/BSD)に準拠したライブラリの選定を強制します。Infisicalによる集中シークレット管理、フレームワーク規約ファーストの設計、並列実行可能なハーメティックテスト、そして「Old Coder」流のエビデンスファーストTDD(RED→GREEN→REFACTOR)を採用し、AIエージェントが自律的かつ確定的に品質の高いコードを生成できるように設計されています。

対応~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/ihkaru/agent-skills/tree/HEAD/skills/craftsman-coder

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

クラフツマン・コーダー: SOLID、AST CodeGraph影響、& エビデンスファースト工学

堅牢で疎結合かつ検証可能なソフトウェアを構築するための、リポジトリに依存しない規律ある工学的ワークフロー。


核となる信条

  1. AST & CodeGraph探索ファースト: コードを盲目的に変更またはリファクタリングしない。実装を変更する前に、シンボル定義、呼び出し元、呼び出し先、そしてブラストラディウスを常にマッピングする。
  2. SOLID & 単一責任の原則 (SRP): すべてのモジュール、関数、クラスは、変更される単一の理由を持つ。ビジネスロジックをI/O、永続化、外部APIから分離する。
    • 分解ルール: 1つのコンポーネント、クラス、または関数が長すぎるか、複数の関心事を扱う場合、すぐに単一責任を持つより小さなアトミックなサブコンポーネント/サービスに分解する。
  3. 依存性注入 (DI) & 制御の反転: 依存関係(リポジトリ、クライアント、ロガー)をコンストラクタまたはフレームワークのメカニズムを介して注入する。ロジックを具体的なインフラストラクチャから切り離す。ハードコードされた直接的な外部インスタンス化を避ける。
  4. フォールバックアーキテクチャ: 垂直スライスアーキテクチャ (VSA) + EIP: リポジトリに確立されたフレームワーク規約が存在しない場合、常に垂直スライスアーキテクチャ (VSA) をSOLIDおよびエンタープライズ統合パターン (EIP) と組み合わせて優先する:
    • 水平な技術レイヤーではなく、Request-Endpoint-Response (REPR) パターンを使用して、ビジネス機能 (features/<feature_name>/) ごとにコードを整理する。
    • スライス連携にはEIPパターンを採用する: コマンド/クエリルーター、パイプアンドフィルター、べき等レシーバー、ドメインイベントPub/Sub。
    • 詳細ガイド: Vertical Slice & EIP ガイド
  5. 確定的 VSA アーキテクチャ境界リンティング: リポジトリがVSAを実装している場合、スライス間の直接インポートを禁止する確定的な境界リンター(例: JS/TS用dependency-cruiser、Python用import-linter、Go用depguard、またはvsa_boundary_checker.py)を設定する。
  6. 必須のリポジトリレベル GEMINI.md (移植可能 & Git対応): リポジトリを作成または初期化する際、アーキテクチャの選択、境界ルール、Gauntletコマンドを永続化するために、常にリポジトリルートにプロジェクトレベルの GEMINI.md を生成する。
    • 厳格な移植性ルール: このファイルはコミットされプッシュされるため、外部ホストパス(~/.gemini/config/...、/data/data/...など)やマシン固有のシークレットを決して参照しない。100%自己完結型で移植可能でなければならない。
  7. リアルタイムWeb調査 & 最適なBig-O計算量: 最も最適なBig-O時間および空間計算量($O(1)$ルックアップ、$O(N \log N)$ソート、ストリーミング$O(1)$メモリ)を持つアルゴリズムおよびデータ構造パターンを常に選択する。
    • 必須Web調査: 知識が古くなっている可能性があるため、事前学習済みの仮定だけに頼らない。現在の月と年に基づいて常にWebを調査し、最先端のアルゴリズムパターン、最適なデータ構造、最新の高性能ライブラリ実装を発見する。
  8. 高性能、低RAMライブラリ & エンタープライズライセンス準拠:
    • ピークパフォーマンス & 低メモリ: モダンでキャッシュフレンドリー、ゼロコピー、SIMDアクセラレーションされたライブラリ(例: orjson/msgspec、polars、sonic、zerolog、simd-json、fast-json-stringify)を優先する。
    • エンタープライズライセンス準拠: 寛容なオープンソースライセンス(MIT、Apache 2.0、BSD-2/3、ISC)を選択する。ソース開示義務なしにエンタープライズ監査をシームレスに通過させるために、ウィルス性のコピーレフトライセンス(GPL、AGPL、SSPL)を厳密に避ける。
    • 詳細ガイド: 高性能ライブラリ & ライセンスガイド
  9. SRPと抽象化のための確定的静的コード分析: 常に確定的な静的解析ツールを優先してコードを監査し、SRP違反(例: 肥大化した長さ、過剰な責任)や抽象化バイパス(例: プレゼンテーション層やビジネスロジック内での直接の生SQLやHTTP呼び出し)を検出する。
  10. 集中シークレットインジェクション (Infisical): シークレットをハードコードしたり、生の認証情報をgit/ローカルenvファイルに保存したりしない。シークレットはInfisical(infisical run -- ...)を介してランタイム注入される依存関係として扱う。
  11. フレームワーク規約ファースト: アドホックな抽象化を発明するのではなく、既存フレームワークの慣用的な規約(例: FastAPIのDepends、NestJSの@Injectable、Reactフック、Goインターフェース)を尊重する。
  12. 並列化可能でハーメティックなテスト: すべてのテストはステートレスで、隔離され、並列実行可能でなければならない(例: pytest -n auto、go test -parallel)。共有可能な可変状態や静的なシングルトンの副作用を一切持たない。
  13. 「Old Coder」のエビデンスファースト規律: コードではなくエビデンスをレビューする。Spec -> RED -> GREEN -> REFACTOR のループに従い、完了を報告する前に自動化されたターミナルチェックを通じて検証する。
  14. AIエージェント対応ツール & スキル工学: 繰り返し現れるパターンをツールやスキルに抽出する際: --json出力、非対話型実行(ゼロプロンプト)、--dry-run安全性、予測可能な名詞-動詞の命名、型指定された終了コードを保証する。

ステップバイステップワークフロー

ステップ 1: 変更前のブラストラディウス分析 (CodeGraph AST)

関数、クラス、またはサービスを変更する前に、ブラストラディウスを検査してダウンストリームへの影響を判断する:

python3 ~/.gemini/config/skills/craftsman-coder/scripts/codegraph_impact.py <path_to_repo> --symbol <TargetSymbol>
  • 直接呼び出し元と参照ファイルをレビューする。
  • 影響を受けるテストスイートをレビューする: このシンボルをテストがカバーしていない場合、リファクタリング前にテストを作成しなければならない。

ステップ 2: アーキテクチャ、アルゴリズムBig-O、リポジトリレベルのGEMINI.md

  • 明確な仕様と設計を策定する:
    • リポジトリを作成/初期化する場合、自己完結型の GEMINI.md をリポジトリルートに作成する(ゼロ外部パス、ゼロシークレット)。
    • フレームワーク規約が存在しない場合、垂直スライス(features/<name>/)をREPRおよびEIPパターンで構成する。
    • アーキテクチャ境界リンターをセットアップまたは検証する(例: dependency-cruiser、import-linter、vsa_boundary_checker.py)。
    • クラス/関数/コンポーネントが複数のことを行っていないか、または長さのしきい値を超えていないか? 焦点を絞ったサブコンポーネントに分解する(SRP)。
    • 外部システムが密結合になっていないか? インターフェース/プロトコルを定義し、依存性注入を使用する。
    • アルゴリズム計算量 & Web検索: Big-Oの時間/空間計算量をベンチマークする。現在の月と年に基づいて、最新のアルゴリズム最適化を積極的にWeb検索する。
    • 依存関係監査: 低RAM、高スループットでエンタープライズセーフなライセンス(MIT / Apache 2.0 / BSD)のライブラリを選択する。コピーレフト/AGPLの推移的依存関係がゼロであることを確認する。
  • 詳細リファレンス: SOLID & DI パターンガイド
  • 詳細リファレンス: Vertical Slice & EIP ガイド
  • 詳細リファレンス: VSA境界強制 & リポジトリGEMINI.mdガイド
  • 詳細リファレンス: 高性能ライブラリ & ライセンスガイド

ステップ 3: 並列化可能なテストを書く (RED)

  • 期待される動作やバグ修正を検証する、隔離されたハーメティックなユニットテストまたは統合テストを書く。
  • テストが独立した一時リソースまたはインメモリモックを使用していることを確認する。
  • テストを実行して失敗することを確認する (RED)。
  • 詳細リファレンス: 並列テスト & Old Coderガイド

ステップ 4: 最小限でクリーンなソリューションを実装する (GREEN)

  • テストを満たすために必要なものだけを実装する。
  • コンポーネントを凝集性が高く、単一目的に保つ。
  • 依存関係をクリーンに注入する。

ステップ 5: リファクタリング & Gauntlet (REFACTOR & EVIDENCE)

  • テストがグリーンのまま、コードをクリーンアップする。
  • Gauntletを実行する(すべての検証は自動化かつ確定的でなければならない):
    1. VSA境界チェック: アーキテクチャ境界チェックを実行する(例: npx depcruise --config .dependency-cruiser.js src または python3 ~/.gemini/config/skills/craftsman-coder/scripts/vsa_boundary_checker.py <path_to_repo>)。
    2. 確定的静的SRP & 抽象化分析:
      python3 ~/.gemini/config/skills/craftsman-coder/scripts/static_srp_analyzer.py <path_to_repo> --strict
      
    3. リンター & 静的解析(例: ruff check .、eslint、golangci-lint)
    4. 型チェック(例: mypy、tsc --noEmit)
    5. 完全テストスイートを並列実行する(例: pytest -n auto、go test -parallel 4 ./...)
  • 最終的な応答には、ターミナルからのエビデンス(終了コード、テスト合格サマリー)を含める。

組み込みスクリプト & ツール

  • CodeGraph AST 影響分析ツール: scripts/codegraph_impact.py

    • Python、JS/TS、Go、Rust、JavaにわたるASTと相互参照を検査する。
    • ブラストラディウスのリスクレベル(低、中、高、重大)を計算する。
    • 直接呼び出し元と影響を受けるテストスイートを特定する。
  • 確定的静的SRP & 抽象化分析ツール: scripts/static_srp_analyzer.py

    • SRPの長さ/複雑さの違反についてコードを評価する。
    • 抽象化バイパス(リポジトリ/アダプター外での生SQL/HTTP呼び出し)にフラグを立てる。
    • CI/Old Coder検証のために、機械可読な --json と確定的な終了コードを出力する。
  • VSA アーキテクチャ境界チェッカー: scripts/vsa_boundary_checker.py

    • 不正なスライス間インポートを防止することで、スライスの分離を強制する。
    • .vsa-boundaries.json で設定可能。ゼロ依存、リポジトリ非依存(MIT)。

関連スキル