# Find Refactoring

> コードベースからリファクタリング候補を検出し、優先度付きでGitHub Issueを作成します

- Skill: `majiayu000/find-refactoring` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/find-refactoring`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/find-refactoring/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/find-refactoring

---


# リファクタリング候補検出コマンド

コードベースを分析し、リファクタリングが必要な箇所を検出してGitHub Issueを作成します。

---

## 入力

$ARGUMENTS（対象パス、オプション）

例:
- `/find-refactoring src/` - src配下を分析
- `/find-refactoring --dry-run` - Issue作成せずレポートのみ
- `/find-refactoring src/ --min-priority=high` - 高優先度のみ

---

## 前提条件

> **詳細**: `refactoring-detection` skill を参照

| ツール | 必須/任意 | フォールバック |
|--------|---------|---------------|
| `ast-grep (sg)` | **必須** | エラー終了 |
| `jscpd` | 任意 | 重複検出スキップ |

---

## 全体フロー

| Phase | 名称 | 内容 |
|-------|------|------|
| 0 | 入力解析 | 対象パス・オプション解析 |
| 0.3 | 言語検出 | プロジェクト言語の自動判定 |
| 0.5 | ツール確認 | 必須ツールの存在確認 |
| 0.7 | 既存Issue確認 | 重複Issue防止チェック |
| 1 | 静的分析 | コード品質ルール違反の検出 |
| 2 | パターン分析 | コードスメル・重複の検出 |
| 3 | 優先度判定 | 優先度付与、粒度チェック |
| 3.5 | ユーザー確認 | `approval-gate` skill |
| 4 | Issue作成 | GitHub Issue作成（`--dry-run`時スキップ） |

> **Phase規約**: `workflow-phase-convention` skill を参照

---

## サーキットブレーカー

| 条件 | アクション |
|------|----------|
| **必須ツール不在** | エラー終了、インストール手順を表示 |
| **検出件数0件** | 「問題なし」を報告して終了 |
| **検出件数30件超** | 上位15件のみ表示、`--min-priority=high`を提案 |
| **Issue作成失敗** | 失敗分をレポート、成功分は継続 |

---

## Phase 0.3-0.7: 事前準備

### 言語検出

```bash
LANG=$(detect_language)  # typescript / rust / go / python
```

### ツール確認

```bash
check_required_tools || exit 1
check_optional_tools
```

### 既存Issue確認

```bash
EXISTING_ISSUES=$(get_existing_refactoring_issues)
```

> **実装詳細**: `refactoring-detection` skill を参照

---

## Phase 1-2: 検出実行

### 検出ルール

| カテゴリ | ルール | 優先度 |
|---------|--------|--------|
| **サイズ** | 500行超過ファイル | High |
| **サイズ** | 80行超過関数 | High |
| **サイズ** | 6引数超過関数 | Medium |
| **型安全** | `any`型使用 | High |
| **型安全** | ``ts-ignore` skill`使用 | Critical |
| **エラー処理** | 空catchブロック | High |
| **品質** | `console.log`残存 | Medium |
| **品質** | 重複コード（10行以上） | Medium |

### 言語別追加ルール

| 言語 | ルール | 優先度 |
|------|--------|--------|
| Rust | `todo!`/`unimplemented!`残存 | High |
| Rust | `unwrap()`多用（5箇所超/ファイル） | Medium |

> **検出パターン詳細**: `refactoring-detection` skill を参照

---

## Phase 3: 優先度・粒度判定

### 優先度基準

| 優先度 | 対応期限目安 |
|--------|-------------|
| Critical | 即時 |
| High | 1週間 |
| Medium | 2週間 |
| Low | 余裕時 |

### Issue粒度チェック

> 実装タスクは200行以下を対象

| 推定作業行数 | アクション |
|-------------|----------|
| 200行以下 | 単一Issueとして作成 |
| 200行超 | 「**要分割**」注記、`/decompose-issue`リンク付与 |

> **工数算出ロジック**: `refactoring-detection` skill を参照

---

## Phase 3.5: ユーザー確認

> **共通仕様**: `approval-gate` skill を参照

```markdown
## 検出されたリファクタリング候補

### サマリー
| 優先度 | 件数 |
|--------|------|
| Critical | {n} |
| High | {n} |
| Medium | {n} |

### 詳細（上位15件）

| # | ファイル | 問題 | 優先度 | 推定工数 | 備考 |
|---|---------|------|--------|---------|------|
| 1 | `src/foo.ts` | 723行（超過） | High | 1h | |
| 2 | `src/bar.ts` | any型 5箇所 | High | 25m | |
| 3 | `src/big.ts` | 1200行 | High | 3h | **要分割** |

### スキップ（既存Issue）
- `src/old.ts`: #45

---
**選択肢**:

1. 全件 → 全件Issue作成
2. High以上 → High以上のみ作成
3. 選択 → 指定番号のみ（例: `3 1,2,5`）
4. 終了 → 作成せず終了

> 番号を選択してください（1-4）:
```

---

## Phase 4: Issue作成

### ラベル事前作成

```bash
ensure_labels() {
    for label in refactoring automated priority/{critical,high,medium,low}; do
        gh label create "$label" --force 2>/dev/null || true
    done
}
```

### Issueテンプレート

```bash
gh issue create \
  --title "refactor: ${TITLE}" \
  --body "## 概要
${PROBLEM}

## 対象
- **ファイル**: \`${FILE_PATH}\`

## 推奨アクション
${ACTION}

## 推定工数
${EFFORT}
${DECOMPOSE_NOTE}

---
*\`/find-refactoring\` により自動生成*" \
  --label "refactoring,automated,priority/${PRIORITY}"
```

---

## 出力形式

### 成功時

```markdown
## リファクタリングIssue作成完了

| Issue | タイトル | 優先度 | 推定工数 |
|-------|---------|--------|---------|
| #101 | refactor: src/foo.ts 分割 | High | 1h |
| #102 | refactor: src/bar.ts any除去 | High | 25m |

### スキップ（既存Issue）
- `src/old.ts` → #45

### 次のステップ
1. 実装: `task #101 #102`
2. 大きなIssue分割: `/decompose-issue 103`
```

### dry-run時

```markdown
## リファクタリング候補レポート（dry-run）

| # | ファイル | 問題 | 優先度 | 推定工数 |
|---|---------|------|--------|---------|
| 1 | `src/foo.ts` | 723行超過 | High | 1h |

### Issue作成コマンド
\`/find-refactoring src/ --min-priority=high\`
```

---

## 完了条件

- [ ] 必須ツール（ast-grep）が利用可能
- [ ] 対象パスの分析が完了
- [ ] 既存Issueとの重複チェック済み
- [ ] 検出結果がユーザーに提示済み
- [ ] 承認されたIssueが作成済み（dry-run以外）
- [ ] 200行超Issueに分割推奨が注記済み

---

## 関連スキル

| スキル | 用途 |
|--------|------|
| `refactoring-detection` skill | 検出パターン・工数算出 |
| `code-quality-rules` skill | 品質ルール定義 |
| `issue-size-estimation` skill | Issue粒度判定 |
| `approval-gate` skill | ユーザー承認ゲート |

---

## 変更履歴

| バージョン | 変更内容 |
|-----------|---------|
| v1.2 | 検出ロジックをrefactoring-detectionスキルに分離 |
| v1.1 | 言語検出、ツール確認、既存Issue重複チェック、粒度チェック追加 |
| v1.0 | 初版作成 |

