Jiwon Min Developer

JetBrains AI Assistant 実践深掘り:コード生成からリファクタリングまで

開発者はコードを書く以外にも、数多くの認知的労働をこなします。レガシーコードを分析し、より良い構造を考えてリファクタリングを行い、変更内容を明確に説明するコミットメッセージを作成するなどです。GitHub Copilotがコード自動補完の時代を切り開いたとすれば、今やAIツールは開発ワークフロー全体にさらに深く関与するようになっています。

JetBrains AI Assistantは、私たちが日々使用するIntelliJ、PyCharm、WebStormといったIDEに直接統合されたAIツールです。単なるコードスニペットの生成にとどまらず、IDEが持つ豊富なコードインデックス情報を基に、より文脈に即した提案を行うことを目指しています。

本記事では、JetBrains AI Assistantの基本設定から、実務で役立つ主要機能、そして私が実際に経験した失敗談や技術的なトレードオフまで、シニア開発者の視点から率直に解説します。

JetBrains AI Assistant 実践深掘り:コード生成からリファクタリングまで

© AI生成画像


JetBrains AI Assistant、始める前に:設定とモデル

JetBrains AI Assistantは、別途プラグインをインストールする必要なく、最新バージョンのJetBrains IDEに組み込まれています。ただし、使用するにはいくつかの設定が必要です。

初期設定とライセンス

AI Assistantを有効にすると、JetBrainsアカウントへのログインを求められます。このツールはサブスクリプションベースの有料サービスです。独立したAI Assistant Proサブスクリプションを購入するか、All Products Packのような上位プランに含まれる形で利用できます。初期には試用期間(Trial)が提供されるので、支払いの前に十分に機能を試してみることをお勧めします。

APIキーを直接入力する方式ではなく、JetBrainsアカウント自体にライセンスが紐づく点が、他のサービスとの違いです。

動作原理:クラウドLLMとコンテキスト

AI Assistantは基本的に、JetBrainsがホスティングするサーバーを通じて、OpenAIやAnthropicなど複数のパートナー企業のLLMにアクセスします。ユーザーがコードを要求すると、IDEは現在のファイルのコード、プロジェクトの構造情報、言語設定など、必要なコンテキストを収集してJetBrainsサーバーに送信します。

重要なのは、コードが外部サーバーに送信されるという事実です。 JetBrainsはデータセキュリティとプライバシーポリシーを通じて、送信されたコードをモデルの学習には使用しないと明記しています。しかし、社内のセキュリティ規定が厳しい企業では、使用前に必ずポリシーの確認が必要です。

コードベースを理解するAI:主要機能の分析

単なるプロンプト入力と結果確認にとどまらず、IDEの特定機能と組み合わせることで、AI Assistantの真価が発揮されます。

1. コンテキストを認識したコード生成 (Alt + \)

コメントや関数シグネチャだけを記述し、Alt + \(macOS: ⌥ + \)ショートカットキーを押すと、AIが実装全体を提案します。GitHub Copilotと似ていますが、現在開いているファイルだけでなく、IDEがインデックス化したプロジェクト内の他のクラスや関数の存在をよりよく認識する傾向があります。

# usersテーブルから特定のIDを持つユーザーを検索し、
# Userオブジェクトとして返す関数。
# ユーザーが存在しない場合はNoneを返すこと。
def find_user_by_id(user_id: int) -> User | None:
    # ここで Alt + \ を押すと以下のコードが生成される
    db = get_database_connection()
    cursor = db.cursor()
    cursor.execute("SELECT id, name, email FROM users WHERE id = %s", (user_id,))
    user_data = cursor.fetchone()
    if user_data:
        return User(id=user_data[0], name=user_data[1], email=user_data[2])
    return None

上記の例では、Userオブジェクトやget_database_connection関数の構造をプロジェクト内の他のファイルから把握し、コードを生成してくれる点が印象的です。

2. インテリジェントなリファクタリング提案

既存のコードを選択し、右クリックメニューから「AI Actions > Suggest Refactoring」を選択すると、コードの改善案を提示します。これは単にコードを書き直すのとは異なります。例えば、長い関数を複数の小さな関数に分割したり、ネストしたif-else文をより読みやすい形に変更するなど、構造的な改善に焦点を当てています。

この機能は、レガシーコードを保守したり、同僚の複雑なコードを初めて分析する際に特に役立ちました。

3. AIによるコミットメッセージ作成

最も実用的な機能の一つです。IDEの「Commit」パネルで「Generate Commit Message with AI Assistant」ボタンをクリックすると、変更されたコード(diff)を分析し、自動でコミットメッセージの草案を作成してくれます。

単に「Update file.py」のようなメッセージではなく、変更の目的と主要な内容を要約したタイトルと本文を生成します。チームのコミット規約に合わせて少し修正するだけで済むため、ドキュメント作成にかかる時間を大幅に削減できます。

実務で直面した落とし穴 (Failure Cases & Trade-offs)

すべてのAIツールがそうであるように、JetBrains AI Assistantも万能ではありません。盲信して使うと、かえって問題が生じる可能性があります。

「ハルシネーション」現象と誤った提案

最も一般的な問題です。存在しないライブラリ関数を呼び出したり、微妙に誤ったロジックを提案したりすることがしばしばあります。特に複雑なビジネスロジックやドメイン固有のコードを扱う際に、このような間違いが頻発しました。

AIが提案するコードはあくまで草案であり、最終的な責任は開発者にあります。 提案されたコードを必ず一行ずつ読み、意図通りに動作するかを検証する習慣が重要です。

コンテキスト範囲の限界

AI Assistantは、プロジェクトの全ファイルを一度に読み込むことはできません。現在開いているファイルと密接に関連する一部のファイルを中心にコンテキストを構成します。

そのため、複数のモジュールにまたがる複雑な依存関係を持つ機能を修正する際には、見当違いの提案をすることがあります。例えば、Aモジュールのインターフェース変更がCモジュールの実装に与える影響を全く把握できない、といった具合です。このような場合、AIに頼るのではなく、開発者自身が全体的な構造を把握してコードを修正する必要があります。

結論:誰にとって最も有用なツールか?

JetBrains AI Assistantは、単なるコード補完を超え、開発ワークフローに深く統合された「アシスタント」の役割を果たします。特に、以下のような開発者にとって大きな助けとなるでしょう。

  1. 既にJetBrains IDEエコシステムに慣れ親しんでいる開発者: 新たな学習なしに、既存のショートカットやUIに自然に溶け込み、すぐに生産性を向上させることができます。
  2. レガシーコードの保守担当者: コードの説明やリファクタリング提案機能は、複雑なコードベースを迅速に把握するための強力な武器となります。
  3. ドキュメント作成とコード品質を重視する開発者: コミットメッセージの自動生成や命名提案などの機能は、コード品質を一貫して維持するために費やされる時間を削減します。

もちろん、クラウドベースモデルの限界とコストは明確な短所です。しかし、それをよく理解して使用すれば、コーディングの退屈な部分を自動化し、開発者がより創造的で重要な問題に集中できるよう支援する強力なツールであることは間違いありません。重要なのは、AIの提案を批判的に受け入れ、最終的な決定を下す主体は常に開発者自身であるという点を忘れないことです。

参考資料