complexity について
complexityは、コーディングエージェント向けのコード分析スキルで、リファクタリング対象の関数を特定してレポートを作成します。Pythonにはradon、Goにはgocycloを使って複雑度を分析します。
主な機能
- 01PythonとGoのプロジェクト検出
- 02循環的複雑度の測定
- 03しきい値に基づく対象抽出
- 04複雑度レポートの作成
活用シーン
- 01複雑度の高い関数の特定
- 02最近の変更におけるリファクタリング要否の評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ boshu2/ agentops --skill complexityインストール後、Claude Code で/complexityを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/.gitkeepcomplexity.featurescripts/validate.sh詳細
Complexity スキル
このワークフローを必ず実行してください。説明するだけではいけません。
コードの複雑度を分析し、リファクタリング対象を特定します。
実行手順
/complexity [path] が指定された場合:
ステップ 1:対象を決定する
path が指定されている場合: そのまま使用します。
path が指定されていない場合: 現在のディレクトリまたは最近の変更を使用します。
git diff --name-only HEAD~5 2>/dev/null | grep -E '\.(py|go)$' | head -10
ステップ 2:言語を検出する
# Check for Python files
ls *.py **/*.py 2>/dev/null | head -1 && echo "Python detected"
# Check for Go files
ls *.go **/*.go 2>/dev/null | head -1 && echo "Go detected"
ステップ 3:複雑度分析を実行する
Python の場合(radon を使用):
# Check if radon is installed
which radon || pip install radon
# Run cyclomatic complexity
radon cc <path> -a -s
# Run maintainability index
radon mi <path> -s
Go の場合(gocyclo を使用):
# Check if gocyclo is installed
which gocyclo || go install github.com/fzipp/gocyclo/cmd/gocyclo@latest
# Run complexity analysis
gocyclo -over 10 <path>
ステップ 4:結果を解釈する
循環的複雑度のグレード:
| グレード | CC スコア | 意味 |
|---|---|---|
| A | 1-5 | リスクが低く、シンプル |
| B | 6-10 | 中程度で、管理可能 |
| C | 11-20 | リスクが高く、複雑 |
| D | 21-30 | 非常に高いリスク |
| F | 31+ | テスト不可能。今すぐリファクタリング |
ステップ 5:リファクタリング対象を特定する
対応が必要な関数/メソッドを一覧にします:
- CC > 10:リファクタリングすることを推奨
- CC > 20:リファクタリング必須
- CC > 30:重大。直ちに対応
ステップ 6:複雑度レポートを作成する
出力先: .agents/complexity/YYYY-MM-DD-<target>.md
# Complexity Report: <Target>
**Date:** YYYY-MM-DD
**Language:** <Python/Go>
**Files Analyzed:** <count>
## Summary
- Average CC: <score>
- Highest CC: <score> in <function>
- Functions over threshold: <count>
## Refactor Targets
### Critical (CC > 20)
| Function | File | CC | Recommendation |
|----------|------|-----|----------------|
| <name> | <file:line> | <score> | <how to simplify> |
### High (CC 11-20)
| Function | File | CC | Recommendation |
|----------|------|-----|----------------|
| <name> | <file:line> | <score> | <how to simplify> |
## Refactoring Recommendations
1. **<Function>**: <specific suggestion>
- Extract: <what to extract>
- Simplify: <how to simplify>
## Next Steps
- [ ] Address critical complexity first
- [ ] Create issues for high complexity
- [ ] Consider refactoring sprint
ステップ 7:ユーザーに報告する
ユーザーに以下を伝えます:
- 複雑度の全体的な概要
- しきい値を超える関数の数
- リファクタリング対象の上位 3 件
- 完全なレポートの場所
/refactor <function>を実行して、複雑度が重大な対象に対処するよう案内
主なルール
- 適切なツールを使う — Python には radon、Go には gocyclo
- CC が高い箇所に注目する — 10 以上を優先
- 具体的な修正方法を示す — 「リファクタリングする」だけで済ませない
- レポートを作成する — 必ず成果物を出力する
クイックリファレンス
複雑度を下げる方法:
- ヘルパー関数を切り出す
- 条件分岐をポリモーフィズムに置き換える
- 早期リターンを使う
- 長い関数を分割する
- ネストしたループをシンプルにする
例
Python プロジェクトを分析する
ユーザーの入力: /complexity src/
実行内容:
- エージェントが
src/ディレクトリ内の Python ファイルを検出します - エージェントが radon のインストール状況を確認し、未インストールの場合はインストールします
- エージェントが循環的複雑度を測定するため、
radon cc src/ -a -sを実行します - エージェントが保守性指数を測定するため、
radon mi src/ -sを実行します - エージェントが CC > 20 の関数を 3 件、CC 11-20 の関数を 7 件特定します
- エージェントが詳細なレポートを
.agents/complexity/2026-02-13-src.mdに作成します - エージェントが
process_request()関数内のネストした条件分岐を切り出すことを推奨します
結果: 複雑度レポートで、process_request()(CC:28)が重大なリファクタリング対象として特定され、具体的な切り出し案が示されます。
Go モジュールでリファクタリング対象を見つける
ユーザーの入力: /complexity
実行内容:
- エージェントが
git diff --name-only HEAD~5で最近の変更を確認します - エージェントが Go ファイルを検出し、gocyclo のインストール状況を確認します
- エージェントがプロジェクトで
gocyclo -over 10 ./...を実行します - エージェントが複雑度 34 の
HandleWebhook()関数を特定します - エージェントが検証ロジックの切り出しを推奨するレポートを作成します
- エージェントが対象の上位 3 件を報告します:HandleWebhook(34)、ProcessBatch(22)、ValidateInput(15)
結果: 具体的な切り出し計画とともに、直ちにリファクタリングすべき重大な関数が特定されます。
関連項目
- refactor — 複雑度の高い対象に対する、安全で検証済みのリファクタリング
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
| ツールがインストールされていない(radon/gocyclo) | 依存関係が不足している | エージェントが自動でインストールします。Python の場合は pip install radon、Go の場合は go install github.com/fzipp/gocyclo/cmd/gocyclo@latest を実行します。インストール先が $PATH に含まれていることを確認してください。 |
| 複雑度の問題が見つからない | しきい値が高すぎる、またはコードが本当にシンプル | しきい値を下げます。gocyclo -over 5 を試すか、path にテストではなく実際の実装ファイルが含まれているか確認してください。 |
| レポートに推奨事項のない関数が記載されている | コードベースのコンテキストを考慮しない一般的な分析 | CC の高い関数を読み、構造を把握したうえで、実際のコードパターンに基づく具体的なリファクタリング案を提示してください。 |
| 複数の言語が混在するプロジェクト | 対象の path に複数の言語が含まれている | 言語ごとに個別に分析を実行します。例:まず /complexity src/python/、次に /complexity src/go/ を実行し、手動でレポートを統合します。 |
リファレンスドキュメント
- references/complexity.feature — 実行可能な仕様:循環的複雑度で関数をランク付けし、デフォルトでは最近の変更に範囲を絞り、注目すべきホットスポットの一覧を表示します(soc-qk4b)
コメント
Markdown 対応