News

JetBrains IDE の行全体コード補完: 知っておくべき情報

Read this post in other languages:

AI を使ったプログラミングについては現在も意見が大きく分かれていますが、AI を日常業務のワークフローに採用し始めている開発者が増えつつあることは否定できません。 読者の皆さんがこの議論における自分の立場をすでに決めているかどうかは分かりませんが、バージョン 2024.1 の JetBrains IDE には、好奇心を刺激する新機能「行全体コード補完」が搭載されています。 これは AI を利用した機能で、インターネット経由でデータを送信することなくローカルで動作します。

このブログ記事では、行全体コード補完とは何か、その仕組みとサポート対象言語、およびこの機能のフィードバックを提供する方法について詳しく説明します。

JetBrains IDE の行全体コード補完とは?

この新しいタイプのコード補完は、最新の 2024.1 アップデートで JetBrains IDE に追加されました。 以下のようにグレー調の単一行の候補として表示され、現在のファイルのコンテキストに基づいて行を補完します。

このような候補は JetBrains が各種の言語とフレームワークに対して特別にトレーニングした専門の言語モデルによって生成されています。 このモデルはインターネット経由でコードを送信することなくローカルで動作します。

行全体コード補完は現在、対応する JetBrains IDE(IntelliJ IDEA Ultimate、WebStorm、PhpStorm、GoLand、および RubyMine)内で JavaKotlinPythonJavaScriptTypeScriptCSSPHPGoRuby に使用できます。 この機能は今後数か月にわたって C#、Rust、および C++ に拡張され、Rider、RustRover、および CLion でも提供される予定になっています。

行全体コード補完は有効な JetBrains IDE サブスクリプションで無料で使用できますので、バージョン 2024.1 以降を使用していることをご確認ください。 まだサブスクリプションをお持ちでない方でも、この機能を 30 日間の無料体験期間中に使用できます。

行全体補完の仕組み

行全体コード補完は主に二つの目標を念頭に作成されています。 一つ目は言うまでもなく、開発者の時間を節約してコーディング速度を向上させることです。しかしそれ以上に、特定の組織がクラウド接続の AI ソリューションを使用する際に遭遇する制約に対処するソリューションの提供も目指しました。

この二つの目標の実現を可能にしている、行全体コード補完の中身をご紹介します。

  • ローカルで動作し、オフラインで使用できます。 つまり、この機能はインターネットに接続せずに利用が可能になっています。
  • インターネット経由でマシンからデータを送信しません。 行全体コード補完を実現する言語モデルはローカルで動作するため、次の 2 つの理由で優れています。 1 つ目の理由は、コードがマシンの外部に流出しないため、安全を確保できるということです。 2 つ目の理由は、クラウド関連の余計なコストがかからないことです。そのため、この機能は無料で提供されています。
  • JetBrains IDE の内部に深く組み込まれています。 すべての候補は適切に整形され、IDE によって角括弧と引用符が正しく閉じられているかがチェックされます。 また、静的解析の力とコードに関する弊社の知識を活かして不適切な候補を除外しています。 サポート対象のすべての言語には、補完コードの正しさを確認する独自のチェックが備わっています。 IDE が存在しない変数とメソッドを提案しないようにするため、未解決の参照チェックなどのごく基本的なチェックがほとんどの言語に実装されています。 自動インポート機能もサポートされています。
  • 可能な限り円滑なワークフローを維持するように設計されています。 スマートなフィルタリングを使用することで、追加された直後に明示的にキャンセルまたは削除される傾向にある候補の表示を回避しています。

その他の技術的な詳細については、以下にあるこちらのセクションをご覧ください。

行全体コード補完と AI Assistant の比較

JetBrains IDE では行全体コード補完と JetBrains AI Assistant の 2 つの方法で AI 機能を利用できます。 これらは混同する可能性があるため、共通点と相違点を説明します。

行全体コード補完と JetBrains AI Assistant はどちらも作業を高速化することを目的としています。 どちらも従来から長らく提供されてきた JetBrains IDE の標準補完を超える機能となっています。JetBrains AI Assistant はより総合的な機能セットを提供し、コンテキスト対応のスマートチャット、テストの生成、ドキュメントの作成など、その他多くの機能が含まれます。

以下にこれら 2 つの AI 機能を比較した表を掲載しています。

ユーザーのコードが AI 機能のトレーニングに使用されることはありませんので、ご安心ください。 勤務先の会社で厳格なデータプライバシー規制が設けられているものの、AI を使用してワークフローを高速化したい方には行全体コード補完が適している可能性があります。

詳細

行全体コード補完の根幹をなしているのはプログラミング言語固有の言語モデルです。このモデルはパーミッシブライセンスのオープンソースコードのデータセットを使用して社内でトレーニングされています。 言語モデルの入力となっているのは、キャレット位置の前のコードです。ただし、一部の言語では関連するファイルの内容も追加しています。 出力はモデルが提案する現在の行の続きで、グレー表示されます。

言語モデルの推論はローカルマシンで実行されます。 最も効率よく生成できるようにするため、モデルの推論は別のプロセスで実行され、ターゲットマシンのアーキテクチャ用に大幅に最適化されています。 たとえば x86-64 アーキテクチャを使用している場合は CPU 上でモデルが実行されますが、ARM64 アーキテクチャを使用している場合はコンピューターの GPU の能力が利用されます。

候補が生成されると、多数の後処理ステップが適用されます。 まずはこの候補が構文的および意味的に正しいかどうかを確認し、その後にスマートなフィルタリング、書式設定、括弧の対応付け、およびその他のさまざまな操作を実行します。 後処理はユーザーエクスペリエンスに非常に重要であるため、ワークフローを中断させない有益な候補のみを表示するように努めています。

最後になりますが、単一行候補を採用する決定を下した理由についても気になっているかと思います。 AI による補完候補を長くすることにはメリットもデメリットもあります。 候補が長いほどユーザーのキー入力数は少なくなる傾向にあります。それは良いことですが、同時にユーザー側で必要となるレビューの回数も増えてしまいます。 このことを考慮し、単一行のコードを補完するのが落とし所だと判断しました。

この決定により、候補の品質を大きく低下させることなく、モデルのサイズを削減できました。 JetBrains IDE のバージョン 2024.1 では、1 億個のパラメーターを持ち、最大コンテキストサイズが 1,536 トークンの言語モデルを使用しています。これは約 170 行のコードに相当します。

機能の設定方法

行全体コード補完は Settings(設定)| Editor(エディター)| General(一般)| Code Completion(コード補完)で構成できます。Machine Learning-Assisted Completion(機械学習を使った補完)セクションにすべての設定が含まれています。

この機能をオフにするには、Enable Full Line suggestions(行全体候補を有効にする)チェックボックスをオフにできます。 また、この機能を提供しているプラグインを無効にすることもできます。 無効にするには、Settings(設定)| Plugins(プラグイン)に移動し、Installed(インストール済み)タブに切り替えて full line code completion(行全体コード補完)を見つけてください。

フィードバックの提供方法

行全体コード補完は現在も活発に開発中ですので、ぜひフィードバックをお寄せください。 このブログ記事の下にあるコメント欄にご入力ください。 また、こちらで既存の課題に投票するか、ログイン後に右上の New Issue ボタンをクリックして新しい課題を作成することも可能です。

本日は以上です。 ぜひ行全体コード補完をお試しになり、ご感想をお聞かせください。 この機能は C#、Rust、および C++ のサポートや AI Assistant の複数行コード補完との統合の改善を最優先に今後も改善し続けていきます。 更新情報をお待ちください!

オリジナル(英語)ブログ投稿記事の作者:

Ryuji Owan

Ekaterina Ryabukha

image description

Discover more