Java入門 / コード生成AI

VS Code + Gemini Code Assist で Java プログラミング(2)機能の利用

2025.05.09

前回の記事では、Visual Studio Code 上に Gemini Code Assist 拡張機能を追加して、コード生成AIを利用した Java の開発環境を作成しました。当記事では、実際に Gemini Code Assist を使用し、利用できる機能やコーディングの例などをご紹介します。

◆Java入門 記事一覧はこちら

Gemini Code Assist を利用する

それでは早速、実際に Gemini Code Assist を利用して Java のプログラミングを行ってみましょう。

Gemini Code Assist では、コード生成、コード補完、エラーの修正(クイックフィックス)といったコーディングの補助機能や、テストコードの生成機能が利用できます。

 参考 - Gemini Code Assist の Standard と Enterprise によるコード

コーディング補助

入力欄の表示と注意点

前回の記事では、ファイルを作成した直後にプロンプトを入力してコードを生成する手順をご紹介しました。

既存のファイルに対して、コード生成や概要の出力などを行う際は、VS Code 上に対象のファイルを表示した状態で「 Ctrl + I 」キーを押下し、プロンプト(作成内容などを指示する文言)の入力欄を表示します。


Gemini Code Assist の入力欄には、初期状態で以下の4つのコマンドが準備されています。それぞれの機能は以下の通りです。

  • /generate (デフォルト)
    プロンプトに従ってコードを生成して提案します。提案は Gemini Diff エディターに表示され、そのままソースコードに反映させることができます。

  • /fix
    入力欄で指定したエラーの修正を提案します。提案は Gemini Diff エディターに表示され、そのままソースコードに反映させることができます。

  • Explain this
    クリックすると、開いているファイルの要約をチャット欄に出力します。

  • Generate unit tests
    クリックすると、開いているファイルのテストコードをチャット欄に出力します。


(プロンプトの入力イメージ)


コード生成のプロンプトなどを入力する際は、VS Codeからフォーカスを外すと入力欄が閉じてしまうことに注意が必要です。(資料などを確認しようとした際に、途中まで入力したプロンプトが消えてしまうため)

利用に慣れるまでは、メモ帳などのテキストエディタに一旦プロンプトを記述し、コピー&ペーストで Gemini Code Assist の入力欄に貼り付けて実行しても良いでしょう。

コード生成

コード生成を利用する

既存のファイルにコードを追加したい場合や、コードを修正したい場合は、対象のファイルを開き、コードを挿入したい箇所にカーソルがある状態で「 Ctrl + I 」キーを押下します。


(「/generate 」が選択されている状態で)プロンプトを入力します。


Enter キーを押下すると、生成するコード(の候補)が Gemini Diff エディターに提案されます。「Accept」をクリックすると、対象のファイルに反映します。


「Accept」を押下して反映後のファイルは以下の通りです。変更はまだ保存されていないため、Ctrl + Sを押下(または「ファイル」→「保存」をクリック)して、ファイルを保存してください。


想定した内容と異なるなど、提案されたコードを適用しない場合は「Accept」の右の「Decline」をクリックして取り消します。詳細な条件を指定するなど、プロンプトを修正して再度コード生成をお試しください。

利用例1 定型的なメソッドの追加

定型的なメソッドの作成は、AI によるコーディングが最も得意とするところです。例えば、以下のようなプロジェクトの共有部品などは、プロンプトのみでほぼ期待通りのメソッドを作成することも可能です。

例えば、『引数の文字列に対し、先頭からN文字が、指定した正規表現にマッチしているかどうかを返すメソッドを作成してください。』というプロンプトでメソッドの生成を指示してみます。

Gemini Code Assist からは、以下のようなコードが提案されました。


提案されたコードの内容は以下の通りです。このプロンプトでは、作成してほしいメソッドの機能(文字列の先頭からのマッチング)、入力(文字列、文字数、正規表現)、そして出力(真偽値)を明確に伝えることで、ほぼ期待どおりのメソッドを作成することができました。

/**
 * 引数の文字列に対し、先頭からN文字が、指定した正規表現にマッチしているかどうかを返します。
 *
 * @param str チェック対象の文字列
 * @param regex 正規表現
 * @param n 先頭からチェックする文字数
 * @return マッチしている場合はtrue、そうでない場合はfalse
 */
public static boolean matchesFromStart(String str, String regex, int n) {
    if (str == null || regex == null || n <= 0) {
        return false;
    }
    String target = str.substring(0, Math.min(n, str.length()));
    return target.matches(regex);
}


ただし、プロンプトで指定していないパターン(上記では「指定した文字数が負の値だった場合」や「引数の文字列がN文字以下だった場合」など)の動作は、AI が参考にしたコードなどから想定される内容で実装されるため、注意が必要です。

このように注意すべき点はあるものの、細かなポイントや詳細な動作までプロンプトで指定したり、ある程度の内容のメソッドを生成した後に細かい点のみ手動でコーディングする、といった対応を行うことで、コーディングの労力を大幅に削減することができると思います。

利用例2 Java Bean の作成

Java Bean の作成も、AIを利用することで非常に簡単に作成することができます。例えば、以下のプロンプトで、各フィールド と Getter/Setter メソッドを一度に生成できました。

会員情報として「氏名」「郵便番号」「住所(都道府県)」「住所(市町村)」「住所(番地等)」「住所(建物名・部屋番号)」「ステータス」のメンバ変数と、それぞれのGetter/Setterを追加してください。変数の型は「ステータス」のみIntegerで、他はStringとしてください。


このプロンプトでは、以下のようなコードが提案されました。
※提案されたコードに黄色い波下線が付いている理由と注意点に関しては、後述の「ライセンスに関する注意点」をご確認ください。


(提案されたコードの内容)

package bean;

public class User2 {

    private String name;
    private String postalCode;
    private String prefecture;
    private String city;
    private String addressLine1;
    private String addressLine2;
    private Integer status;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPostalCode() {
        return postalCode;
    }

 ~~ 中略 ~~

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }
}


プログラム設計で各項目の変数名が決まっていない場合などでは、これを利用してコードを作成したり、逆に生成された変数名を設計へ反映させることもできるのではないでしょうか。

ただし、プロジェクトで命名規則や用語や変数名の辞書が定められている場合、ルールに則った変数名を利用するにはまだ課題がありそうです。Gemini Code Assist に辞書が利用できるか、チャットを利用して直接聞いてみました。

ライセンスに関する注意点

Gemini Code Assist で提案されるコードが、Github などからライセンスが不明なプログラムコードを参照して生成された場合など、注意点がある時には当該部分のコードに波下線が付きます。

当該部分のコードにマウスカーソルをかざすと、メッセージと詳細が表示されます。個人での学習などでは特に気にする必要はありませんが、商用利用する場合などでは内容を確認の上、注意して利用するようにしてください。

コード補完

Gemini Code Assist でコード補完を利用するには、コードを入力中に自動的に表示される候補から選択する方法と、利用したい位置で Ctrl + Enter キーを押下して明示的に候補を表示させる方法があります。

例えばメソッド名に、そのメソッドが実行したい処理の名前を具体的に記述してコード補完を利用すると、関連性の高い引数の型や、実際に行う処理のコードが提案されます。また、複数のメソッドに共通するプレフィックスを使用している場合なども、コード補完が有効に機能します。


メソッド名には、行いたい処理を具体的に記述するほど、期待する処理に近い内容が提案されます。上記の例では、戻り値の型(boolean)と 「existFile」で「ファイルが存在する」こと、「AndNotDir」では「かつディレクトリ(フォルダ)ではない」ことを明示しています。

エディタ上に表示された提案をコードに反映するには、提案が表示されている状態で Tab キーを押下します。


また、メソッド内で何らかのチェック条件を記述してコード補完を利用した場合は、想定されるチェック処理・エラー処理などが提案されるなど、記述位置に応じて前後の処理も考慮したコードが提案されます。(下図は『 if ( file 』まで入力時に、提案された後続の処理の例)

チャット

チャットビューでのコード生成

Gemini Code Assist のチャット機能は、VS Code のサイドバーにある Gemini Code Assist のアイコンからチャットビューを開いて利用できます。


チャットの入力時には「@」の後にファイルパス(例: @MyClass.java)を入力することで、特定のファイルの内容を Gemini Code Assist にコンテキストとして認識させ、そのファイルに対する質問やコード生成の指示を出すことができます。

これにより、AI はファイルの内容を踏まえた、より適切な回答やコード生成の支援を行うことができます。


生成されたプログラムコードはチャット欄に表示されるため、ファイルに反映するには自分でコピー&ペーストする必要があります。

一方、コード生成やコード補完では通常1つの提案結果を反映しますが、チャットでは会話をするように繰り返しプロンプトを入力することで、生成されたコードを段階的にブラッシュアップさせ、より自分の意図に近いコードを生成することが可能です。


(チャットの回答)


チャットでは直近の入力ほど参考とされるため、繰り返し質問や改善したい内容を伝えることで、直前の入力も合わせて考慮して少しずつ完成に近づけていくことが可能です。

その他の利用方法

チャットではコードを直接生成させる以外にも、コーディングについての相談なども可能です。複雑な構成のメソッドを作成するような場合では、課題の整理などにも利用できます。

また、プログラム学習の観点からは、プログラムのポイントの解説をしてもらったり、作成したメソッドの問題点をチェックしてもらうなど、コード生成やコード補完以上に役立てることができそうです。

テスト補助

テストコード作成

Gemini Code Assist では、プログラムのテストコードの生成も可能です。Ctrl + I で表示される機能から「Generate unit tests」を選択すると、チャットビューにテスト用のコードが出力されます。


以下のようにテストコードが出力されます。Javaの環境構築時にJUnitの拡張機能をインストール済ですので、JUnit 用のテストコードが生成されています。


テストコードはチャットで直接指示して出力することもできます。また、メソッド単位でのテストコードの作成なども可能です。

カスタムコマンド

カスタムコマンドの追加

Gemini Code Assist では、既定のコマンド以外に、あらかじめプロンプトをカスタムコマンドとして登録しておくことができます。カスタムコマンドを追加するには、Ctrl + I キーで表示されたGemini Code Assist の入力欄の下部にある「Customize commands...」をクリックします。


表示された設定画面で「項目の追加」をクリックします。


「項目」(入力欄は「キー」と表示)の欄にコマンド名(コマンド文字列)を、「値」の欄に実行したいプロンプトを入力し、「OK」をクリックしてカスタムコマンドを登録します。

今回は「jpcomment」というコマンド名で「クラスおよびメソッド、メンバ変数へのJavaDocコメントを日本語で追加してください。」というプロンプトを登録してみました。


登録したカスタムコマンドの内容を変更したい場合は、行の右側の鉛筆のアイコンをクリックして編集できます。


このように、よく利用するプロンプトをカスタムコマンドとして登録しておくことで、同じプロンプトを繰り返し入力せずに実行することができりようになります。

カスタムコマンドの実行

登録したカスタムコマンドは、Gemini Code Assist の入力欄の項目にコマンドとして追加されます。


コード生成を行うプロンプトであれば、対象のファイルを開いた状態でコマンドをクリックすることで、 Gemini Diff エディターにコードが提案され、そのままコードに反映させることができます。


登録したカスタムコマンドは、プロンプトの入力欄またはチャットビューの入力欄に「/」に続けてコマンド名を入力することでも実行できます。


この方法でカスタムコマンドを実行した場合は、チャット欄に結果が表示されます。内容を確認しながら必要な部分のみ適用したり、続けてチャットを利用してブラッシュアップしたい場合などでは、こちらの方法がおすすめです。



いかがでしたでしょうか。Gemini Code Assist では、簡単なプロンプトの入力だけでも一般的なレベルのプログラムが作成でき、プロンプトの入力内容次第では複雑な処理も作成することができそうです。

次回の記事では、Gemini Code Assist を用いて Spring Boot プロジェクト(Webアプリケーション)の作成にチャレンジしてみたいと思います。

株式会社GSI 採用サイト

新しいこと、始めよう

あなたとともに歩を進めるWEBメディア

広告

広告