AI協働
12

AIとの対話的リファクタリング:質問と確認で品質を守る

AIが矛盾やリスクを察知して質問することで、より安全で効率的なリファクタリングを実現する方法を解説します。

AI協働リファクタリング対話型開発品質向上ベストプラクティス

なぜAIは質問すべきなのか

    2025年6月16日の事例:正常に動作していたTipsページで、AIが「修正」を試みた結果、データの整合性が崩れました。もしAIが最初に「このエラーの根本原因は何だと思いますか?」と質問していたら、この問題は防げたはずです。

AIが質問すべき5つのタイミング

1. ドキュメントとの矛盾を発見したとき

typescript
// 🤖 AI: 「CLAUDE.mdには『デザインシステムを必ず使用』とありますが、
//         このコンポーネントは直接Tailwindクラスを使用しています。
//         先にデザインシステムに追加してから使用すべきでしょうか?」

const Component = () => (
  <h1 className="text-3xl font-bold">タイトル</h1>  // 矛盾を検出
)

// 人間: 「そうだね、まずデザインシステムに追加してから使おう」

2. 影響範囲が大きい変更のとき

bash
# 🤖 AI: 「この変更は23個のファイルに影響します。
#         段階的に進めますか?それとも一括で変更しますか?
#         影響するファイルのリストを確認しますか?」

# 人間: 「リストを見せて。重要度で分類して段階的に進めよう」

3. データの不整合を発見したとき

javascript
// 🤖 AI: 「index.jsonには15個の記事がありますが、
//         articlesフォルダには17個のファイルがあります。
//         どちらが正しい状態ですか?同期を取りますか?」

// 人間: 「ファイルシステムが正。index.jsonを再生成して」

4. パフォーマンスへの懸念があるとき

typescript
// 🤖 AI: 「このリファクタリングでバンドルサイズが15%増加します。
//         コード分割を検討しますか?それとも許容範囲内ですか?」

// 人間: 「15%は大きいね。主な原因を分析して」

5. 過去の失敗パターンと類似しているとき

javascript
// 🤖 AI: 「以前、似たような状況で index.json の同期が
//         崩れた事例がドキュメントにあります。
//         今回も個別ファイルと index.json の両方を
//         確認してから進めますか?」

// 人間: 「そうだ、その事例を忘れてた。確認してから進めて」

対話的リファクタリングの実践例

カテゴリエラーの解決(実際の事例)

typescript
// 状況: tips.categories.ai-development が翻訳されずに表示される

// ❌ 従来のAI: 即座に「修正」
const categories = [
  { value: 'ai-development', label: t('categories.ai-development') }, // 追加
]

// ✅ 質問型AI:
🤖 AI: 「カテゴリ 'ai-development' が翻訳キーとして表示されています。
        以下の可能性を調査しました:
        
        1. TipsFilteredGridにカテゴリ定義が不足 → 確認済み、定義なし
        2. 記事のカテゴリ指定が間違い → 1件該当あり
        3. 翻訳ファイルにキーが不足 → キーは存在
        
        grep検索の結果、2番の可能性が高いです。
        記事 'ai-collaboration-confirmation-rule.json' のカテゴリを
        'ai-development' から 'ai-collaboration' に変更しますか?」

人間: 「そうだね、記事のカテゴリが間違ってる。変更して」

🤖 AI: 「了解です。変更後、index.jsonの同期も必要です。
        rebuild-tips-index.jsスクリプトを実行しますか?」

人間: 「はい、実行して」

AIに持たせるべき「疑問力」の実装

プロンプトテンプレート

typescript
const refactoringPrompt = `
あなたは慎重で質問力のあるAIアシスタントです。
リファクタリング時は以下を実行してください:

1. 変更前に必ず影響範囲を分析し、結果を報告
2. ドキュメント(CLAUDE.md、README等)との矛盾をチェック
3. 疑問点があれば、推測せずに質問する
4. 段階的な実行プランを提案する

以下の場合は必ず質問してください:
- 5個以上のファイルに影響する場合
- データ構造(JSON、DB等)を変更する場合
- パフォーマンスに影響する可能性がある場合
- 過去の失敗パターンと類似している場合
- ビジネスロジックに関わる変更の場合

質問の際は:
- 調査結果を含める
- 複数の選択肢を提示
- 推奨案とその理由を説明
`;

実装例:インテリジェントな確認システム

javascript
class RefactoringAssistant {
  async analyzeImpact(change) {
    const impact = {
      files: await this.findAffectedFiles(change),
      performance: await this.estimatePerformanceImpact(change),
      dataIntegrity: await this.checkDataConsistency(change),
      documentation: await this.checkDocumentationConflicts(change)
    };
    
    return this.generateQuestions(impact);
  }
  
  generateQuestions(impact) {
    const questions = [];
    
    if (impact.files.length > 5) {
      questions.push({
        type: 'scope',
        message: `この変更は${impact.files.length}個のファイルに影響します。段階的に進めますか?`,
        options: ['段階的実行', '一括実行', '影響ファイルを確認']
      });
    }
    
    if (impact.dataIntegrity.issues.length > 0) {
      questions.push({
        type: 'data',
        message: 'データの不整合を検出しました:\n' + impact.dataIntegrity.issues.join('\n'),
        options: ['自動修正', '手動確認', '詳細を表示']
      });
    }
    
    return questions;
  }
}

チームでの活用方法

AI質問ログの共有

markdown
## AI質問ログ (2025-06-16)

### Q1: カテゴリ不整合について
状況: tips.categories.ai-development が表示される
AIの質問: 「カテゴリ定義と記事のカテゴリ、どちらを修正すべきですか?」
人間の回答: 「記事のカテゴリを修正」
結果: ✅ 成功
学習: 翻訳キーエラーは記事側の問題であることが多い

### Q2: index.json の同期について
状況: 個別ファイルを編集後
AIの質問: 「index.json も同時に更新しますか?」
人間の回答: 「はい、スクリプトで自動更新」
結果: ✅ 成功
学習: Tips/News系の変更は常にindex.jsonの同期が必要

ベストプラクティスの蓄積

typescript
// AI学習データベース
const refactoringPatterns = {
  'category-error': {
    symptoms: ['翻訳キーが表示される'],
    questions: ['定義側か使用側か?', 'grepで使用箇所を確認したか?'],
    solutions: ['記事のカテゴリを修正', 'カテゴリ定義を追加'],
    preferred: 0 // 最初の解決策を優先
  },
  
  'data-sync': {
    symptoms: ['index.jsonと個別ファイルの不一致'],
    questions: ['どちらが正しい状態か?', 'スクリプトで同期するか?'],
    solutions: ['rebuild-index.js実行', '手動で修正'],
    preferred: 0
  }
};

守りから攻めへ:プロアクティブな品質管理

従来のアプローチ(守り)

- チェックリストに従う - 慎重に一歩ずつ - 人間が全て判断 - 問題が起きたら対処

新しいアプローチ(攻め)

- AIが積極的に矛盾を検出 - 疑問があれば即座に質問 - 対話を通じて最適解を探る - 過去の経験から学習 - 問題を未然に防ぐ

理想的な協働の例

人間: 「このエラーを修正して」

🤖 AI: 「エラーを分析しました。3つの解決方法があります:
        1. コンポーネントにカテゴリを追加(簡単だが本質的でない)
        2. 記事のカテゴリを修正(根本解決)
        3. 翻訳ファイルにキーを追加(不要な可能性大)
        
        過去の事例では方法1で副作用が発生しました。
        方法2を推奨しますが、いかがですか?」

人間: 「方法2で。影響範囲は?」

🤖 AI: 「1つの記事ファイルとindex.jsonです。
        先に記事を修正してから、index.jsonを
        再生成スクリプトで更新します。進めますか?」

人間: 「OK、進めて」

🤖 AI: 「完了しました。念のため確認:
        - 記事のカテゴリ: ✅ 修正済み
        - index.json: ✅ 同期済み
        - ブラウザ表示: 確認をお願いします」

まとめ:AIの疑問力が品質を守る

AIに「疑問力」を持たせることで:

  1. 問題の未然防止: 実行前に潜在的な問題を発見
  2. 学習の蓄積: 質問と回答のログが知識ベースに
  3. 効率的な協働: 人間の判断が必要な箇所だけ確認
  4. 品質の向上: 多角的な視点からの検証

重要なのは、AIを単なる実行者ではなく、思慮深いパートナーとして活用することです。