GitHub Copilotを使ってコードをリファクタリングする方法:保守しやすいコードに改善するには?
GitHubは「GitHub Copilot」を使ったコードリファクタリングについて紹介するブログエントリを公開した。
GitHubは2025年2月11日(米国時間)、「GitHub Copilot」を使ったコードリファクタリングについて紹介するブログエントリを公開した。同社は以下のように説明している。
コードファクタリングとは
リファクタリングとは、プロジェクトにデジタル版の大掃除を施すようなものだ。関数、クラス、モジュールをブラッシュアップし、単なる整理整頓ではなく、外部の動作を変更することなくコードをより効率的で保守しやすく、読みやすくする作業のことをいう。
標準的なリファクタリングの手法として、以下のようなものがある。
- 複雑な条件分岐の簡素化
- 重複したロジックの抽出(同じコードを複数の場所で管理する必要がなくなる)
- 変数名や関数名の改善(「doThing()」のように何をするのか分からない関数名は避ける)
- モノリシックな関数を小さなモジュールに分割(「1つの関数を見るのに何度もスクロールしなければならない」ような状態を防ぐため)
リファクタリングは単なる整理ではない。コードベースをより堅牢(けんろう)でスケーラブルにし、作業しやすくすることも重要である。GitHub Copilot を使用すると、これをより速く、より少ない手間で実施できる。
リファクタリング前にコードの動作を理解することが重要
コードをリファクタリングする前に、そのコードがどのように機能するかを理解しておく必要がある。コードの動作を知らなければ、「改善」のつもりで行った変更が、意図しない動作を引き起こす可能性がある。
以下のメソッドを例に挙げる。
public String getSound(String animal) { if (animal == null) { System.out.println("Oops! A null animal?"); } else if (animal.equalsIgnoreCase("Dog")) { return "Bark"; } else if ( animal.equalsIgnoreCase("Cat")) { return "Meow"; } else if ( animal.equalsIgnoreCase("Bird")) { return "Tweet"; } return "Unknown"; }
このコードを見て、「switch文を使うべきだ」と考える人もいるだろう。それはリファクタリングの一例といえる。しかし、そう判断するためには、「if」文と「switch」文の動作を理解している必要がある。このコードは、条件に一致するものが見つかるまで「if」文を順番に評価し続け、最終的に該当するものがなければ“Unknown”を返す。この動作を理解して初めて、そのような提案が可能となる。
コードベースが複雑になり、複数のファイルをまたいで関数が呼び出されるようになると、さらに複雑になってしまう。そこでCopilotが役に立つ。
Copilot Chatにコードの動作の説明を求めるには、平易な言葉で質問するか、「/explain」コマンドを使用する。Copilotが調べる範囲を限定するには、問い合わせの前に統合開発環境(IDE)でコードを選択するか、「#file」を使用して特定のファイルを指定する。Copilotにコードのコメントを追加するように依頼することもできる。
例えば、以下のようなプロンプトを利用できる。
- 「Explain what this code does.」(このコードは何をしているか説明して)
- 「What is this code doing?」(このコードの動作を解説して)
- 「Add comments to this code to make it more understandable.」(このコードにコメントを追加して、より理解しやすくして)
リファクタリングするコードを完全に理解するまで、Copilot Chatを使用してコードベースを分析、説明する必要がある。
コードをリファクタリングして、全面的な改善を試みる
何事もそうだが、最初は小さく始める方がよい。コードのリファクタリングを始める場合は、シンプルなアプローチを取るべきだ。プロジェクト内でCopilot Chatを開き、「このコードをどのように改善すればよいか?」と尋ねる。もしくは、GitHub Copilotにコードの説明を依頼する場合と同様に、特定のコードをハイライトするか、「#file」を使って対象ファイルを指定すると、より正確な提案を得られる。
例えば、以下のようなプロンプトが考えられる。
- 「How would you improve this?」(このコードをどのように改善できるか?)
- 「Improve the variable names in this function.」(この関数の変数名を改善して)
- 「#file:pageInit.js, #file:socketConnector.js Offer suggestions to simplify this code.」(#file:pageInit.js, #file:socketConnector.jsのコードを簡潔にする提案をして)
Copilotは指定された内容に基づいてコードの改善点を提案する。これはリファクタリングの第一歩として有効だが、Copilotに何らかのガイダンスを与えると、さらに多くのことが可能になる。
生成AI(人工知能)を搭載した開発ツールを活用する際は、プロンプトにコンテキストを追加すると、求める結果を得られる可能性が高くなる。ツールに実行させたいことを具体的に指定することで、より適切な提案を得ることができる。
これは、何かをコーディングするように言われたとき、アイデアや疑問が多過ぎてどこから始めればいいのかよく分からない場合と似ている。そうではなく、具体的に「リストをソートするクラスをコーディングしてほしい」と言われた場合は、目の前のタスクに集中できる。
上記のプロンプトは、あまり具体的な内容やコンテキストを提供していないため、Copilotはコードを改善する可能性のあるあらゆる方法を探ることになる。その利点として、考えもしなかった選択肢が表示される可能性がある。その半面で、提案された解決策の中には、特定の懸念に対処できないものもあるかもしれない。
AI開発ツールからの提案は必ず確認すること
GitHub Copilotのようなツールは、コードの提案やコードのリファクタリングの方法を見つけるのに非常に優れている。しかし、他の生成AIと同様に、Copilotが提示する提案を受け入れる前に、必ず慎重に確認する必要がある。GitHub Copilot を「アシスタント」と呼ぶのには理由がある。それは スキルの代わりではなく、能力を増強するためのものだからだ。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
「Xcode」でも「GitHub Copilot」の無料プランでコード補完機能を利用可能に 何がメリットか
GitHubは、「GitHub Copilot for Xcode」のコード補完機能の一般提供を開始した。Visual Studio CodeでGitHub Copilot“無料版”が使える! 「生産性、爆上がり」で感動した話
GitHub Copilot Free(無料版)、みんな使ってる? 実際にリアルな開発で活用し、その実力を検証! AIアシストはどこまで使える? ソフトウェアエンジニアの仕事はどう変わる? そして、AI時代に求められるスキルとは? AIエージェントの可能性も交えつつ、未来の開発を好き勝手に語ります。全てのVisual Studioユーザーが無料版「GitHub Copilot」を利用可能に Visual Studioでの開発体験はどう変わる?
Microsoftは、Visual StudioでもGitHub Copilotの無料プランであるGitHub Copilot Freeが利用可能になったと明らかにした。