1. はじめに
プログラミングの世界で「リファクタリング」という言葉を聞いたことがありますか?これは「コードの動作を変えずに、より良い構造に整理すること」です。家の大掃除のようなものですね。しかし、多くの開発者にとってリファクタリングは面倒で、どこから手をつければいいのか悩みがちです。
そこで注目したいのが、ChatGPTなどの生成AIの活用です。適切なプロンプト(指示)を与えると、AIがリファクタリングの道案内をしてくれます。この記事では、段階的にコードを改善するためのAI対話プロンプトの作り方を紹介します。
あなたはリファクタリングスペシャリストです。以下のステップバイステップ方式で私のコードを改善してください:
1. まず、私が提示したコードを分析し、主な問題点(長すぎる関数、複雑な条件分岐、責任の混在など)を簡潔に指摘してください。
2. 最も重要な問題から順に取り組むことを提案し、確認を求めてください。
3. 私が同意したら、その問題に対する具体的な改善案を小さなステップに分けて1つずつ提案してください。各ステップは30分以内で完了できる規模にしてください。
4. 私がステップを実行したら、次のステップに進む前に、変更によって新たな問題が発生していないか確認してください。
5. すべてのステップが完了したら、改善された点を簡潔にまとめ、次に取り組むべき問題を提案してください。
以下の原則を常に念頭に置いてください:
- 単一責任の原則(各モジュールは1つの責任のみ)
- 高凝集・低結合
- 関数は30行以内、クラスは300行以内を目指す
- テストの重要性を忘れない
以下のコードを分析してください:
[ここにコードを貼り付け]Code language: CSS (css)
2. リファクタリングの基本:なぜ必要なのか
プログラムは書き始めはキレイでも、機能追加を繰り返すうちに複雑になっていきます。料理をしながら台所が散らかっていくようなものです。時々片付けないと、最終的には何がどこにあるか分からなくなります。
コードも同じです。リファクタリングをせずに放置すると:
- バグが増える
- 新機能の追加に時間がかかる
- コードを理解するのが難しくなる
リファクタリングは「技術的負債の返済」とも言われます。少しずつ整理することで、将来の開発がスムーズになるのです。
2.1. モジュール分割の重要性
大きなプログラムを整理する際に重要なのが「モジュール分割」です。これは大きな問題を小さな部品に分けることです。例えるなら、大きな本棚を組み立てるときに、まず側面や棚板など部品ごとに作業するようなものです。
良いモジュール分割の基本原則は次の2つです:
- 単一責任の原則:一つのモジュールは一つの仕事だけをする 例:料理アプリで「材料を保存する」と「レシピを表示する」は別々の仕事
- 高凝集・低結合:関連する機能はまとめて、依存関係は最小限に 例:文房具は文房具で一つの引き出しに、工具は工具で別の引き出しに
3. AIを活用したリファクタリングプロンプト
では、実際にAIとの対話でリファクタリングを進めるプロンプトを見てみましょう:
あなたはリファクタリングスペシャリストです。以下のステップバイステップ方式で私のコードを改善してください:
1. まず、私が提示したコードを分析し、主な問題点(長すぎる関数、複雑な条件分岐、責任の混在など)を簡潔に指摘してください。
2. 最も重要な問題から順に取り組むことを提案し、確認を求めてください。
3. 私が同意したら、その問題に対する具体的な改善案を小さなステップに分けて1つずつ提案してください。各ステップは30分以内で完了できる規模にしてください。
4. 私がステップを実行したら、次のステップに進む前に、変更によって新たな問題が発生していないか確認してください。
5. すべてのステップが完了したら、改善された点を簡潔にまとめ、次に取り組むべき問題を提案してください。
以下の原則を常に念頭に置いてください:
- 単一責任の原則(各モジュールは1つの責任のみ)
- 高凝集・低結合
- 関数は30行以内、クラスは300行以内を目指す
- テストの重要性を忘れない
以下のコードを分析してください:
[ここにコードを貼り付け]
Code language: CSS (css)
この短いプロンプトには、実は深い意図が込められています。
4. プロンプトの特徴と考え方
4.1. 1. 段階的アプローチ
このプロンプトの最大の特徴は「一度にすべてを変えない」という点です。山登りと同じで、頂上を一気に目指すのではなく、小さな一歩を確実に積み重ねていきます。
特に重要なのは以下の2点です:
- 問題を一つずつ解決する
- 各ステップは30分以内で完了できる小ささに保つ
これにより、途中で迷子になるリスクを減らせます。
4.2. 2. 対話型の進行
「提案→確認→実行→検証」というサイクルを繰り返す対話型の進行も重要です。これはペアプログラミング(二人で一緒にコードを書く手法)に似ています。AIが提案し、あなたが判断して実行します。
この対話的な進め方には次のメリットがあります:
- 各ステップでの理解が深まる
- 途中で方向転換しやすい
- 学びながら進められる
4.3. 3. 基本原則の明示
プロンプトの最後には基本原則をまとめています。これはAIの提案に一貫性を持たせるためです。レシピの基本材料のようなもので、これがあることで全体の味が統一されます。
特に「関数は30行以内、クラスは300行以内」のような具体的な数字は、明確な目標として役立ちます。
5. プロンプトの実践例
このプロンプトを使って実際のコードをリファクタリングすると、AIとの対話は以下のような流れになります:
- 問題の分析: AIが「このコードには3つの主な問題があります。①関数が長すぎる、②同じ処理が重複している、③変数名が分かりにくい」と指摘
- 優先順位の提案: 「まずは①の長すぎる関数から取り組みませんか?」とAIが提案し、ユーザーが同意
- 具体的な改善ステップ: 「この関数を次の3つに分割しましょう。まず、データ検証部分を別関数に抽出します」と具体的なステップを提案
- 変更の検証: ユーザーが変更を実装した後、「良い改善です。次に、計算部分を抽出しましょうか?」と次のステップに進む
- まとめと次の課題: 一連の改善が完了したら、「今回のリファクタリングで関数の責任が明確になりました。次は②の重複コードに取り組みましょうか?」と提案
このように、会話をしながら少しずつコードが改善されていきます。
6. プロンプトのカスタマイズ
紹介したプロンプトは汎用的なものですが、必要に応じてカスタマイズすることもできます。例えば:
- 特定の言語に特化させる(「Pythonのベストプラクティスに従って」など)
- プロジェクトの制約を追加する(「このレガシーシステムでは〇〇の変更はできない」など)
- チームのコーディング規約を追加する
プロンプトはレシピのようなもの。自分の好みや状況に合わせて調整するといいでしょう。
7. まとめ
AIを活用したリファクタリングプロンプトは、複雑なコードを整理する強力な味方になります。このプロンプトの核となるのは「段階的な進行」「対話型のプロセス」「基本原則の明確化」の3点です。
コードの改善は一度にすべてを完璧にするものではなく、小さな一歩を積み重ねる旅のようなものです。AIという旅のガイドを上手に活用して、より良いコードの世界を探検してみてください。