AI News HubLIVE
站内改写4 分で読了

言語サーバーでGitHub Copilot CLIに真のコードインテリジェンスを

GitHub Copilot CLIにLSPサーバーをインストール・設定することで、力任せのgrepや逆コンパイルから脱却し、真のコードインテリジェンスを実現します。LSPセットアップスキルは14の言語に対応し、自動化を提供します。本記事ではその仕組みと開始方法を解説します。

ソースGitHub AI & ML著者: Natalie Guevara

GitHub Copilot CLIがJARファイルを一時ディレクトリに展開し、.classファイルをgrepで検索し、生のバイトコードからAPIシグネチャを断片的に組み立てる様子を見たことがありますか?エージェントは機知に富んでいますが、言語サーバーがないと、それが精一杯です。

言語サーバープロトコル(LSP)は、VS Codeなどのエディターで「定義へ移動」「参照の検索」、型解決を実現する標準規格です。これはターミナルでも同様に機能します。LSPセットアップスキルは、Copilot CLI向けのLSPサーバーのインストールと設定を自動化し、テキスト検索のヒューリスティックに頼るのではなく、エージェントがコードに関する正確で構造化された回答を得られるようにします。

この記事では、スキルの内部動作、生成する設定形式、そして現在サポートしている14の言語のいずれかをセットアップする方法を学びます。

問題:ヒューリスティックなコード理解

LSPサーバーがない場合、GitHub Copilot CLIのエージェントはテキスト検索とバイナリ抽出を通じてAPI情報をリバースエンジニアリングします。Javaプロジェクトの場合、次のようになります:

依存JARを見つける

find ~/.m2/repository -name "*httpclient*.jar"

一時ディレクトリに展開

mkdir /tmp/httpclient && cd /tmp/httpclient jar xf ~/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar

展開されたクラスファイルからメソッドを検索

grep -r "execute" --include="*.class" .

Pythonの場合、エージェントはsite-packages内のファイルをcatするかもしれません。TypeScriptの場合、node_modulesを辿ります。これらのテキストベースのアプローチは単純なケースでは機能しますが、生のテキストに対するパターンマッチングであり、真の意味解析ではないため、ジェネリクス、オーバーロード、推移的な型を見逃し、コンパイル済みバイトコードをまったく参照できません。これこそが言語サーバーが埋めるギャップです。

LSPサーバーは構造的にこれを解決します。エージェントがシンボルに対してtextDocument/definitionリクエストを送信すると、言語サーバーは正確なソース位置、完全に解決された型、およびシグネチャを返します。

LSPセットアップスキルの仕組み

トリガーされると、スキルは7ステップのワークフローを実行します:

  1. 言語選択

エージェントはask_userを使用して選択肢のセットを提示し、ユーザーがLSPサポートを必要とする言語を決定します。これが後続のすべてのステップを駆動します。

  1. オペレーティングシステムの検出

エージェントはuname -s(Windowsの場合は$env:OS / %OS%を確認)を実行してターゲットプラットフォームを特定します。インストールコマンドはOSによって異なります。例えば、macOSではbrew install jdtls、Linuxではeclipse.orgからのダウンロードです。

  1. LSPサーバーの検索

スキルはリファレンスファイル(references/lsp-servers.md)を含み、14の言語のキュレートされたデータ(OSごとのインストールコマンド、バイナリ名、すぐに使える設定スニペット)を提供します。エージェントはこのファイルを読み取り、一致するエントリを選択します。

  1. 設定スコープ

エージェントは設定を次のいずれに適用するか尋ねます:

ユーザーレベル:~/.copilot/lsp-config.json — すべてのリポジトリに適用

リポジトリレベル:リポジトリルートまたは.github/lsp.jsonのlsp.json — 単一プロジェクトにスコープ

両方が存在する場合、リポジトリレベルの設定が優先されます。

  1. インストール

エージェントは適切なインストールコマンドを実行します。例:

任意のOSのTypeScript

npm install -g typescript typescript-language-server

macOSのJava

brew install jdtls

任意のOSのRust

rustup component add rust-analyzer

  1. 設定

エージェントは選択された設定ファイルにエントリを書き込むかマージします。形式はlspServersオブジェクトを使用し、各キーはサーバー識別子です:

{ "lspServers": { "java": { "command": "jdtls", "args": [], "fileExtensions": { ".java": "java" } } } }

スキルが強制する主要なルール:

commandは$PATH上、または絶対パスである必要があります

argsは通常、標準I/Oトランスポートに"--stdio"を含みます(一部のサーバー(jdtlsなど)はこれを内部的に処理します)

fileExtensionsは各拡張子(先頭にドット)を言語識別子にマッピングします

設定ファイルの既存のエントリは保持されます — エージェントはマージし、上書きしません

  1. 検証

エージェントはwhich(Windowsではwhere.exe)を実行してサーバーにアクセス可能であることを確認し、設定ファイルが適切なJSON形式であることを検証します。

サポートされている言語

スキルには、いくつかのプログラミング言語向けに事前定義された言語サーバーが付属しています。コーディングエージェントがまだマッピングされていない言語に直面した場合、適切なサーバーを検索し、手動設定を案内します。

セットアップ後の変化

LSPサーバーが設定されると、CLIエージェントは次のことが可能になります:

依存関係全体で型を解決 — もうJARファイルやnode_modulesをgrepする必要はありません

サードパーティライブラリの定義にジャンプ(ソースがリポジトリにチェックインされていない場合でも)

プロジェクト全体でシンボルのすべての参照を検索

任意の関数、クラス、型のホバードキュメントを読み取り

これにより、エージェントはツール呼び出しに費やす時間が減り、初回でより正確なコードを生成します。ユーザーにとっては、エージェントがIDEがすでに知っている質問に答えるためにJARファイルを展開したりnode_modulesをgrepするのを待つ時間が減り、誤ったシグネチャに基づく誤った方向転換が減ります。エージェントは、エディターでの定義への移動と同じ構造化された理解でコードを推論するため、より大きく厄介なタスクを任せて結果を信頼できます。

はじめに

スキルをダウンロード:Awesome Copilot LSPセットアップスキルページにアクセスし、ダウンロードボタンをクリックしてZIPファイルを入手します。

ZIPを~/.copilot/skills/に展開:次を実行

unzip lsp-setup.zip -d ~/.copilot/skills/

GitHub Copilot CLIを再起動:Copilot CLIが既に実行中の場合は、最初に/exitと入力します。その後、copilotを再起動して新しいスキルを認識させます。

エージェントに言語サーバーのセットアップを依頼:例:「JavaのLSPをセットアップして」または「Pythonのコードインテリジェンスを有効にして」。

検証:スキルがLSPサーバーをインストールして設定した後、Copilot CLIをもう一度再起動し(/exit、その後再起動)、/lspを実行してサーバーステータスを確認し、依存関係の1つのシンボルで定義へ移動を試します。

このスキルはAwesome Copilotプロジェクトの一部です。オープンソースなので、貢献やフィードバックを歓迎します!