Skip to content
Back to skills

Component Refactor Planner

ASecurity

指定されたコンポーネントのリファクタリングを設計する。

  • 666 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added February 8, 2026
development

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill component-refactor-planner --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Component Refactor Planner?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Component Refactor Planner
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-component-refactor-planner/badge)](https://www.skillsdirectory.com/skills/majiayu000-component-refactor-planner)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: component-refactor-planner
description: 指定されたコンポーネントのリファクタリングを設計する。
---

# Component Refactor Planner

コンポーネントを分析し、リファクタリングの設計を行うスキル。

## リファクタリングの原則

1. **Single Responsibility** - 1コンポーネント/関数 = 1責務
2. **DRY** - 重複コードをhooks/utilsに抽出
3. **一貫性** - プロジェクトのパターンに従う
4. **テスタビリティ** - ロジックを分離してテスト可能に

## 自動分析ワークフロー

### ステップ0: テストカバレッジ確認

**IMPORTANT:** リファクタリング前にテストの存在を確認。

確認対象:

- `{Component}.stories.tsx` (play関数)
- `{Component}.a11y.test.tsx`
- `{Component}.vrt.test.tsx`
- `hooks/use{Hook}/use{Hook}.test.ts`
- `util.test.ts`

テスト不足時:

1. `/component-test-runner {Component}` でテスト状況確認
2. `/component-test-planner {Component}` でテスト設計
3. テスト追加後にリファクタリング開始

### ステップ1: コンポーネント情報収集

読み取り対象: `{Component}.tsx`, `type.ts`, `const.ts`, `hooks/`, `util.ts`

### ステップ2: 問題点の自動検出

| 観点     | チェック項目                             |
| -------- | ---------------------------------------- |
| 複雑度   | 行数>100、useState/useEffect≥5、ネスト≥3 |
| 責務     | UI/ロジック混在、インラインハンドラ≥3    |
| 一貫性   | ディレクトリ構造、命名規則、スタイル分離 |
| 再利用性 | 重複ロジック、汎用hooks抽出可能性        |

### ステップ3: 改善提案の生成

## リファクタリングパターン

### 1. ディレクトリ構造

```
Component/
├── Component.tsx
├── Component.stories.tsx
├── Component.a11y.test.tsx
├── Component.vrt.test.tsx
├── const.ts          # Tailwind Variants
├── type.ts           # Props型
├── index.ts
├── hooks/            # 複雑なロジック
├── util.ts           # 純粋関数
└── SubComponent/     # サブコンポーネント
```

### 2. Hooks抽出

**条件:** 複雑なstate/effect/callback、複数箇所で使用、独立テストしたい

**命名:** `use{Component}{Functionality}` (例: `useComboboxKeyboard`)

**Tips:**

- useEffectの必要性が不明な場合は、`use-effect-necessity`エージェントを使用して判定する
- 型定義は `type.ts` に分離し、`import type`でインポートする。

### 3. ユーティリティ抽出

**条件:** 純粋関数、計算ロジック、バリデーション

### 4. サブコンポーネント分割

**条件:** 50行以上のUIブロック、独自props、再利用可能性

### 5. Tailwind Variants

**命名:** `{COMPONENT}_{ELEMENT}_VARIANTS`

**条件:** className条件分岐≥3、複数箇所で使用

### 6. イベントハンドラ命名

- ユーザー操作: `handle{Action}` / `handle{Action}{Target}`
- Props: `on{Event}` (受け取り側)

### 7. 型定義

`ComponentProps<"element">` + `VariantProps` + JSDocコメント

## 出力フォーマット

```markdown
## {コンポーネント名} リファクタリング設計

### コンポーネント分析結果

| 項目        | 値    | 基準 | 状態  |
| ----------- | ----- | ---- | ----- |
| 行数        | {n}行 | ≤100 | ✅/⚠️ |
| useState数  | {n}個 | ≤5   | ✅/⚠️ |
| useEffect数 | {n}個 | ≤3   | ✅/⚠️ |

### テストカバレッジ状況

| 種別        | ファイル        | 存在      |
| ----------- | --------------- | --------- |
| Interaction | stories.tsx     | ✅/❌     |
| A11y        | a11y.test.tsx   | ✅/❌     |
| VRT         | vrt.test.tsx    | ✅/❌     |
| Unit        | hooks/util.test | ✅/❌/N/A |

⚠️ テスト不足時はリファクタリング前にテスト追加を推奨

### 検出された問題点

#### 問題1: {概要}

- 現状: {コード}
- 問題点: {説明}
- 優先度: High/Medium/Low

### リファクタリング提案

#### 提案1: {概要}

- 対象: {パス}
- 改善後: {構造/コード}
- メリット: {リスト}
- リスク: {リスト}

### 実装順序

1. [ ] {変更1}
2. [ ] {変更2}
3. [ ] テスト追加/更新
4. [ ] 最終確認

### 影響範囲

| ファイル | 変更種別       | 影響   |
| -------- | -------------- | ------ |
| {path}   | 新規/修正/削除 | {説明} |
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.