ChatGPTでソースコードのリファクタリングをする方法!プロンプトも紹介!

アバター画像
nakatsuji

慶應義塾大学環境情報学部を卒業。大手メーカーに20年ほど勤務し、OSの開発やサポートに従事。現在はプログラミング講師などをしている。大手企業と個人事業主という大きく異なる視点を持つところが強み。国の内外を問わない旅好きで、写真はモンゴルにて騎馬トレックしたときのもの。

ソフトウェア開発におけるリファクタリングは、実現する機能を変更することなくソースコードの品質を高め、長期的な保守性を確保する上で欠かせないプロセスです。ChatGPTを用いてリファクタリングすることにより、コードの可読性や保守性が向上します。

この記事では、ChatGPTの基本からリファクタリングの方法、具体的なChatGPTのプロンプト、リファクタリングの適切なタイミングをわかりやすく解説します。

ChatGPTを活用した高品質な製品開発や効率的な開発環境に興味がある方にとって役立つ内容ですので、ぜひ最後までお読みください。

ChatGPTの基本

ChatGPTは人工知能(AI)によるチャットボットであり多様な機能があります。幅広い用途があるため日常の業務や問題解決の手助けになり、ソフトウェア開発も支援します。

ChatGPTの基礎と特徴を紹介していきます。

ChatGPTとは

ChatGPTは、OpenAIによって開発されたAIによる言語処理モデルです。

非常に自然な言語生成能力が特徴であり、人間との対話を模倣します。インターネット上で利用可能な広範なテキストデータから学習して多様なトピックに対応できます。その柔軟性と幅広い知識を生かして、さまざまな会話形式や情報提供のニーズに応えるツールです。

複雑な質問への回答、詳細な文章の作成、翻訳、要約など、さまざまな言語関連のタスクが可能です。学術的なテーマや技術的な質問に対しても高いレベルで応答でき、プログラミング言語のソースコード生成や解析、コードレビュー、修正提案などできます。

ChatGPTを活用することで、より効率的に情報を得られるようになります。

ChatGPTの特徴

ChatGPTの最大の特徴は、柔軟性と幅広い応用能力にあります。

文章の生成、要約、翻訳、情報提供など、多様な機能があり、あらゆる情報を迅速かつ正確に入手できます。人間が書いたものと見間違うほど自然であり、実用的なアドバイスや具体的な提案もできます。

自然言語による会話形式で質問に答えられるため、日々の業務や学習、さらには趣味の分野においても大きな助けとなります。プログラミング言語のコード解析などの機能もあり、ソフトウェア開発者にとって有益な支援ツールとなっています。

ChatGPTはただのチャットボットではなく、その使用範囲と効果は非常に広範にわたるのです。

ChatGPTを使ったソースコードリファクタリングの方法

ChatGPTを活用することで、ソースコードのリファクタリングを効果的にできます。

リファクタリングとは、ソフトウェアが実現する機能を変更することなく、プログラムのソースコードを改善するプロセスです。ソースコードの可読性や保守性を向上させ、ソフトウェアの品質を向上させるのが目的です。

ChatGPTを使ったリファクタリングについて、順を追って解説します。プログラミングの効率化に役立ててみましょう。

ソースコードの貼り付け

ソースコードのリファクタリングをするため、まずはChatGPTにソースコードを入力します。作業中の特定の関数やクラスのコードを選び、コピーしてChatGPTの入力フィールドに貼り付けます。リファクタリングしたい特定の部分や、改善が必要と思われる箇所に焦点を当てることが重要です。

使用しているプログラミング言語やフレームワークに関する情報を明示し、より適切に処理されるようにします。コード内で特に注目してほしいポイントや、解決したい具体的な問題について説明を加えることも重要です。

適切な情報と説明が提供されるほど、ChatGPTはコードの問題点を正確に特定し、実用的で効果的なリファクタリングの提案ができるようになります。コードの可読性を向上させるための改善案、パフォーマンスの最適化、または保守性の向上などです。

ChatGPTに対する入力を最適化することで、より良いフィードバックとリファクタリングの提案が得られます。

リファクタリングプロンプトの設定

リファクタリングを効率的に行うためには、ChatGPTに対して具体的なリクエストをします。「この関数の可読性を高めてください」や「このコードのパフォーマンスを改善する方法を教えてください」といったことです。

こうしたAIが応答を生成するための基礎となるメッセージがプロンプトです。AIに要求したい情報や求めていること、質問や特定のタスクの実行依頼、応答の方向性、用途などをプロンプトとして指定します。

明確で具体的なプロンプトにより、ChatGPTがより適切なリファクタリング提案ができるようになります。特定のコーディングスタイルやパターンに従うよう指示することも可能です。オブジェクト指向プログラミングや関数型プログラミングの原則に基づいたリファクタリングを要求することが挙げられます。

プロンプトを工夫することで、特定の開発スタイルやパフォーマンス要件に適したリファクタリングのアドバイスを得られます。

ソースコードの解析とリファクタリング

ChatGPTによるソースコードの解析とリファクタリングは、コードの品質向上に非常に効果的な手段です。

ChatGPTは提供されたソースコードを徹底的に解析し、品質を向上させるための具体的な改善点やリファクタリングの提案をします。コードの構造をより効率的で理解しやすくするための提案、不要または重複した部分の削減、不具合の可能性がある箇所の特定と修正の提案などが含まれます。

コードの可読性や保守性を高めるための具体的なアドバイスも提供します。他の開発者がコードを理解しやすくなり、将来的なメンテナンス作業が容易になるでしょう。

重要なのは、ChatGPTの提案を参考しながらも、最終的には開発者自身が判断することです。開発者は自分の専門知識、経験、プロジェクトの特定の要件を踏まえてChatGPTの提案を検討し、最も適切と思われるリファクタリング手法を選択する必要があります。

これによりコードはより効率的でエラーが少なく保守しやすいものになり、ソフトウェアの品質が向上します。

業務効率化システムを開発したいなら「ジテラ」へ!他社より1.4倍速い開発、お返事は3日以内、開発知識ゼロでもOK!、お見積りは無料。お見積りは無料!

リファクタリングのためのプロンプト

リファクタリングを効果的にするには、ChatGPTへ適切なプロンプトを送る必要があります。プロンプトとは、ChatGPTに行ってほしい操作の具体的な指示です。

ここではnote株式会社CXOである深津貴之氏によって考案された「深津式プロンプト」を参考にしています。方向性や役割、具体的な思考、出力形式を明示することで、ChatGPTの回答を制限して精度の向上を図っています。

プロンプトに対するChatGPTの出力例を通じて、リファクタリングへの活用方法が理解できるでしょう。

入力

リファクタリングのためのプロンプトでは、ChatGPTに対して行いたい操作を明確に伝える必要があります。プロンプトの実例を次に紹介します。

### 成果物
ユーザーが指定した条件に基づくコード

### 命令書
あなたは、Pythonに精通したソフトウェア技術者です。
入力されたコードをリファクタリングし、保守性の高いコードを生成してください。

### 思考回路
- メソッドを抽出し、可読性をあげる
- コメントを日本語で追加し、可読性をあげる
- エラー処理を追加する
- メソッド名と変数名の命名規則をsnake caseに統一する

### 入力文
year = int(input("閏年か判定したい西暦: "))
leapYear = False

if year % 4 == 0:
    if year % 100 == 0:
        if year % 400 == 0:
            leapYear = True
        else:
            leapYear = False
    else:
        leapYear = True
else:
    leapYear = False

if leapYear:
    print(f"{year}年は閏年です。")
else:
    print(f"{year}年は閏年ではありません。")

### 出力文
- リファクタリングされたコードを出力
- リファクタリングに関する詳細やフィードバックを箇条書きで日本語で明示する
- 必要な情報を簡潔に、明確な日本語で伝える

次にプロンプトを解説しますので、ぜひ活用してみてください。

  • 「### 成果物」にて、ChatGPTへ大きな方向性を指示しています。
  • 「### 命令書」にて、役割を指示しています。今回のリファクタリング対象がPythonによることが示されています。この例を利用する場合は、対象のプログラミング言語やフレームワークに置き換えてください。
  • 「### 思考回路」にて、具体的な思考を指示しています。ここではリファクタリングの内容を記しています。リファクタリング対象のコードをコーディング規約へ準拠させたい場合は、その旨も書くと良いでしょう。
  • 「### 入力文」ソースコードを添付しています。リファクタリングしたい箇所を絞ると良いでしょう。例では閏年の判定コードを作成してみました。
  • 「### 出力文」にChatGPTからの出力形式を指示しています。必要に応じて変更してみてもよいでしょう。

出力

ChatGPTからの出力は、入力されたプロンプトに基づくリファクタリングの提案やアドバイスです。

ただし、重要なのはChatGPTの提案があくまで一つの参考であり、最終的な実装は開発者の判断に委ねられている点です。開発者はChatGPTの提案を検討し、自分の経験やプロジェクトの要件に基づいて最適なリファクタリングの方法を選択する必要があります。

次に、先に示したプロンプトに対するChatGPTの出力を掲載します。ChatGPTの精度に驚かれることでしょう。

ChatGPT
リファクタリングされたコードを以下に示します。改善点は以下の通りです。
  1. メソッドの抽出: 閏年判定のロジックをis_leap_yearというメソッドに分割し、コードの可読性を高めました。
  2. コメントの追加: 日本語でのコメントを追加し、コードの意図を明確にしました。
  3. エラー処理の追加: 入力値が正しい年であるかの基本的な検証を追加しました。
  4. 変数名の修正: 変数名をsnake caseに統一しました。

リファクタリングされたコード:

def is_leap_year(year):
    """
    指定された年が閏年かどうかを判定する。
    :param year: 判定したい年
    :return: 閏年の場合はTrue、そうでない場合はFalse
    """
    if year % 4 == 0:
        if year % 100 == 0:
            if year % 400 == 0:
                return True
            else:
                return False
        else:
            return True
    else:
        return False

try:
    # ユーザー入力を整数に変換
    year = int(input("閏年か判定したい西暦: "))
    if year <= 0:
        raise ValueError("年は正の整数である必要があります。")

    # 閏年判定
    leap_year = is_leap_year(year)

    # 結果の出力
    if leap_year:
        print(f"{year}年は閏年です。")
    else:
        print(f"{year}年は閏年ではありません。")

except ValueError as e:
    # 不正な入力へのエラーメッセージ
    print("無効な入力です。", e)

リファクタリングに関する詳細やフィードバック:

  • メソッド抽出: 閏年判定ロジックをメソッドとして分離することで、コードの構造が明確になり、再利用性が向上しました。
  • 日本語コメント: コメントを日本語で追加することで、コードの意図がより理解しやすくなりました。
  • エラー処理の追加: 入力された値が正しい年かどうかの検証を追加することで、プログラムの堅牢性が向上しました。
  • 命名規則の統一: 変数名をsnake caseに統一することで、Pythonの標準的なスタイルガイドに準拠し、一貫性が保たれました。

リファクタリングのタイミング

リファクタリングの実施タイミングを見極めることは非常に重要です。適切なタイミングでリファクタリングすることで、コードの保守性を向上させて開発効率を高められます。

主要なタイミングは2つあります。1つは機能を追加したい時やバグを修正する前、もう1つはコードが見づらい時です。開発の質を維持しつつ、効率的な開発プロセスを維持できます。

機能を追加したい時/バグを修正する前

新しい機能を追加したりバグを修正したりする前は、リファクタリングに最適なタイミングの1つです。新機能の追加やバグの修正は、既存のコードに重大な変更を加える可能性があります。この時点でコードを整理し、問題がある箇所を改善することは非常に重要です。

リファクタリングによりコードの構造を理解しやすくし、新しい変更を加えやすくします。バグ修正前のリファクタリングにより問題の原因を特定しやすくなるため、デバッグが効率的です。リファクタリングによってコードの品質を高めれば、新機能の統合やバグ修正をスムーズに進められます。

このタイミングでのリファクタリングは、将来的なメンテナンスの労力を軽減し、開発サイクル全体の効率を向上させられるのです。

コードが見づらい時

コードが見づらくなった時も、リファクタリングすべき重要なタイミングです。コードが複雑で読みにくい状態になると、開発の効率が低下してエラーの発生リスクが高まります。

コードの可読性を高めるためにリファクタリングをすることで、他の開発者がコードを理解しやすくなりチームでの開発効率が上がります。無駄な部分を削除して効率的で保守しやすいコードにすることは重要です。定期的なコードの見直しは、保守性を保って開発プロセスを効率的にし、将来的な問題の発生を防ぎます。

リファクタリングによってコードの構造を改善して可読性を高めることは、開発者の生産性を高めて長期的なソフトウェアメンテナンスのコストを削減します。

ChatGPTのリファクタリングのまとめ

パッチ管理におすすめのツール紹介

ChatGPTを活用したリファクタリングは、ソースコードの品質を向上させて開発プロセスを効率的にします。

適切なプロンプトを用いることで、コードの可読性や保守性を向上させたりパフォーマンスを改善させたりと、さまざまなリファクタリングを実施できます。適切なタイミングでリファクタリングすることで、ソフトウェアの品質を維持しつつ開発効率を高められます。

ChatGPTを用いて有益な回答を効率的に得るにはコツがあります。有用なプロンプトを具体的に紹介しましたので、ぜひご活用ください。ChatGPTを活用したリファクタリングについて理解を深め、実際の開発プロジェクトで効果を実感していただければ幸いです。

株式会社Jiteraは次世代のソフトウェア開発環境を目指しています。ChatGPTを用いた開発に関する質問や相談がある場合は、お気軽にJiteraへ連絡して成功をサポートしてもらいましょう。

アバター画像
nakatsuji

慶應義塾大学環境情報学部を卒業。大手メーカーに20年ほど勤務し、OSの開発やサポートに従事。現在はプログラミング講師などをしている。大手企業と個人事業主という大きく異なる視点を持つところが強み。国の内外を問わない旅好きで、写真はモンゴルにて騎馬トレックしたときのもの。

コスト削減も課題解決も同時に実現

「JITERA」で迅速
ソフトウェア開発

開発を相談する
Recommended articles for you

Discover more of
what matters to you

email-img
メルマガ登録
JITERA社内で話題になった生成AIトレンドをいち早くお届けします。
Thank you!

Jiteraのメールマガジン登録が完了しました。