コード生成中級
既存関数のリファクタ依頼テンプレ
副作用が読みづらい長大関数を、純粋関数 + 副作用層に分解するためのプロンプトテンプレ。
監修: 平原尚樹
株式会社BlueAI 代表取締役CEO / ソフトウェアエンジニア / プロダクトエンジニア / Google Cloud Architect / 元AIスタートアップ(Doorkel)
監修: 酒井歩乃加
早稲田大学文化構想学部卒業 / フリーランス編集者・ライター / 元マイベスト編集ディレクター / SEO対策記事・取材記事執筆
こんな課題を解決
200 行超の関数があり、テストも書きづらい。意図を保ったまま小さく分割したいが、振る舞いを変えてしまわないか不安。
プロンプト
Claude Code に入力
次の関数を「振る舞いを変えずに」リファクタしてください。
## 対象
- ファイル: [path/to/file.ts]
- 関数名: [functionName]
- 行数: [N行]
## 進め方
1. まず関数の責務を箇条書きで列挙(Claude が要約)
2. 入力 → 中間状態 → 副作用 → 戻り値 の流れを図解
3. 純粋関数として切り出せる箇所を特定
4. I/O(DB, fetch, console)は最後にまとめる
5. 段階的に小さくコミット可能な粒度で diff を提示
## ガードレール
- パブリック API のシグネチャは変更しない
- 既存のユニットテストが全てパスすること
- 命名は domain language を優先(実装語彙より業務語彙)
- 1 関数 1 責務、ネストは 2 段まで
## 仕上げ
- リファクタ後のテスト容易性を確認するため新規ユニットテストを 2-3 本追加実行結果の例
Claude Code が以下を返します。 - 責務リスト 5 項目(料金計算 / 在庫引当 / ログ記録など) - 抽出した純粋関数 calculateDiscount / allocateStock の diff - 元の関数は orchestrator として 30 行程度に縮小 - 追加した新規テスト 3 本
コツ・ポイント
- 事前に「現在のテストが緑であること」を確認してから依頼する
- 関数が長すぎる場合は責務リスト止まりで一度レビューを挟むと安全
- 純粋関数化が難しい部分は明示的に副作用層と命名する
- 命名候補が複数あれば 2-3 案出させて選ぶと品質が上がる