GitHub Copilot CLIは、サポートされているWindowsクライアントからモデルリクエストをWindows Server上でホストされているOpenAI互換の推論エンドポイントに送信できるAIコーディングエージェントです。 この構成により、端末から組織ホストモデルを使い、Windows Serverがモデルホスティングと計算を集中管理できます。
この記事では、クライアント接続の設定方法と、設定済みモデルが応答するかどうかの検証方法を紹介します。 推論サービスを展開したり安全にしたりするわけではありません。
Prerequisites
- GitHub Copilot CLIがサポートするWindowsバージョンを実行するクライアントコンピュータで、以下のようなものがあります:
- PowerShell 6以降のバージョンです。
- Windows パッケージ マネージャー(WinGet)です。
- アクティブなGitHub Copilot サブスクリプション。 組織や企業がサブスクリプションを提供している場合、その管理者はGitHub Copilot CLIを許可しなければなりません。
- GitHub Copilot CLIを起動するための信頼できるワーキングディレクトリです。
- Windows Server上の既存のOpenAI互換エンドポイントで、以下のようなものを搭載しています。
- クライアントコンピュータからアクセス可能です。
- 認証が必要です。 この手順はリモートWindows Server接続に適用されます。 認証なしのエンドポイントは、この手順外のループバックのみのシナリオのために予約してください。
- 意図されたサーバーネットワークインターフェースのみを受信し、認可されたクライアントコンピュータやサブネットからのインバウンド接続のみを許可し、公共インターネットからの直接接続は受け付けません。
- ストリーミングやツールや関数呼び出しをサポートします。 OpenAIの互換性だけでは、すべてのGitHub Copilot CLI機能のサポートを保証するわけではありません。 エンドポイントオペレーターでエンドポイントと選択したモデルの能力を検証します。
- 以下の特徴を持つ、Windows クライアントから Windows Server へのネットワーク接続:
- クライアントコンピュータから解決されるWindows Server推論エンドポイントのDNS名です。
- ネットワークルートとファイアウォールルールで、認証されたクライアントやサブネットのみがエンドポイントポートに接続できるようにします。
- クライアントが信頼し、その件名または別名がエンドポイントのDNS名と一致するHTTPS証明書です。
- エンドポイントの基本URL(例えば
https://inference.contoso.com/v1)。 - エンドポイントの認証情報と認証タイプは、エンドポイントオペレーターが指定します。
GitHub Copilot CLI をインストールする
PowerShell を開きます。
安定したGitHub Copilot CLIパッケージをインストールしてください:
winget install GitHub.Copilot設置が成功したか確認してください:
copilot --versionコマンドはインストールされたGitHub CopilotのCLIバージョンを返します。
Windows Serverの推論エンドポイントからモデルIDを取得する
エンドポイントオペレーターが提供するベースURLを設定します:
$BaseUrl = 'https://inference.contoso.com/v1'エンドポイントオペレーターが指定するAPIキーまたはベアラートークンを入力します。 有効期間が短く、最小権限の資格情報を使用しましょう。 組織が承認されたシークレットストアコマンドを提供した場合は、直接入力するのではなく、認証情報を取得するために使ってください。 以下のコマンドは
SecureString値を平文$endpointCredential値に変換し、このPowerShellセッションのためにメモリに残ります。$secureEndpointCredential = Read-Host 'Enter the endpoint credential' -AsSecureString $endpointCredential = [System.Net.NetworkCredential]::new('', $secureEndpointCredential).PasswordGETリクエストを$BaseUrl/modelsに送ってください。$endpointCredentialをAuthorization: Bearerヘッダーに含め、応答のdata配列から各モデルIDを読み込みます:$requestParameters = @{ Uri = "$BaseUrl/models" Method = 'Get' } try { $requestParameters.Headers = @{ Authorization = "Bearer $endpointCredential" } $models = Invoke-RestMethod @requestParameters $models.data | Select-Object -ExpandProperty id } finally { $requestParameters.Headers = $null }コマンドは1つ以上のモデルIDを返します。 ストリーミングやツールや関数呼び出しをサポートするモデルの正確なIDをコピーしてください。
GitHub CopilotのCLIプロバイダーとモデルの設定
$BaseUrlをWindows ServerエンドポイントのベースURLに設定し、APIキーまたはベアラートークンに$endpointCredentialしてください。 同じPowerShellセッション内で、プロバイダータイプ、エンドポイントのベースURL、正確なモデルIDを設定します。<MODEL_ID>をWindows Serverエンドポイントが返すIDに置き換えます。$env:COPILOT_PROVIDER_TYPE = 'openai' $env:COPILOT_PROVIDER_BASE_URL = $BaseUrl $env:COPILOT_MODEL = '<MODEL_ID>'openaiプロバイダータイプは、vLLMを含むOpenAI互換エンドポイントをサポートしています。現在のPowerShellセッションが継承したプロバイダー認証変数をすべてクリアします:
Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinueエンドポイントオペレーターが指定した認証方法を設定してください:
標準的なOpenAIのAPIキー認証には、利用可能な場合は組織承認のシークレットストアコマンドを使用してください。
$env:COPILOT_PROVIDER_API_KEY_COMMAND = '<APPROVED_SECRET_STORE_COMMAND>'コマンドは承認された秘密ストアから認証情報を取得し、認証情報のみを出力し、ログや永続化は行わなければなりません。
COPILOT_PROVIDER_API_KEY_COMMANDは、COPILOT_PROVIDER_API_KEYよりも優先されます。承認されたシークレットストアコマンドが利用できない場合は、APIキーを現在のPowerShellセッションの短期間のフォールバックとして直接設定します。
$env:COPILOT_PROVIDER_API_KEY = $endpointCredentialベアラートークン認証のために、ベアラートークンを設定します:
$env:COPILOT_PROVIDER_BEARER_TOKEN = $endpointCredential
Important
スクリプトやソース管理、コマンドの例にはAPIキーを入れないでください。
copilotそして、起動するプロセスはプロバイダー認証環境の変数を継承します。 短期間の最小権限認証情報を使い、GitHub Copilot CLIを終了した後に変数を削除してください。インストール済みバージョンでサポートされているプロバイダー変数を確認してください:
copilot help providers
GitHub Copilot CLIの開始と検証
信頼できるファイルのディレクトリに変更する:
Set-Location 'C:\path\to\trusted-project'
Important
copilot開始前に停止したり、以前のコマンドが失敗した場合は、プロバイダー認証変数を削除し、リクエストヘッダーをクリアし、PowerShellを閉じる前に安全な認証情報を処分してください:
if ($requestParameters) {
$requestParameters.Headers = $null
}
Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue
if ($secureEndpointCredential) {
$secureEndpointCredential.Dispose()
}
クリーンアップが完了したらPowerShellセッションを終了します。 不変の平文 $endpointCredential 文字列は、プロセスが終了するまでメモリに残ります。
CLI GitHub Copilot起動し、
tryブロックで検証ステップを実行してください。これにより、PowerShellがプロバイダー認証環境変数を削除し、終了またはコマンドが失敗した際にSecureString値を処分します:try { copilot } finally { if ($requestParameters) { $requestParameters.Headers = $null } Remove-Item Env:COPILOT_PROVIDER_API_KEY, Env:COPILOT_PROVIDER_BEARER_TOKEN, Env:COPILOT_PROVIDER_API_KEY_COMMAND -ErrorAction SilentlyContinue if ($secureEndpointCredential) { $secureEndpointCredential.Dispose() } }trusted-directoryのプロンプトを確認してください。 ディレクトリの内容を管理し、信頼が保たれると期待する場合のみ、今後のセッションでディレクトリを信頼してください。
GitHub Copilot CLI から入力を求められたら、
/loginを入力し、指示に従って GitHub への認証を行ってください。 GitHubの認証は、推論エンドポイントに認証するAPIキーとは別です。このテストプロンプトを入力してください:
Reply with exactly: Local inference test succeededWindows Serverエンドポイントで設定されたモデルは、プロバイダー、認証、モデル互換性エラーなしに
Local inference test succeededを返します。 CLI GitHub Copilot終了した後、PowerShellがfinallyブロックを実行します。 PowerShellはメモリから不変平文$endpointCredential文字列を確実に消去できないため、コマンドが完了したらPowerShellセッションを閉じてプロセスメモリを解放してください。
GitHub Copilot CLIのWindows Server推論エンドポイントへの接続のトラブルシューティング
| 問題 | 確認すべきこと |
|---|---|
| モデルのリクエストがエンドポイントに届きません | エンドポイントのベースURL、DNS解決、ポート、ネットワークルート、サービスステータス、TLS証明書の信頼を確認しましょう。 ベースURLには、エンドポイントオペレーターが提供するAPIプレフィックス(例えば /v1)を含めるべきです。 |
モデルのリクエストは 401 または 403 を返します |
資格が有効かどうか確認してください。 API鍵認証の場合は、承認されたシークレットストアコマンドで COPILOT_PROVIDER_API_KEY_COMMAND を好む。
COPILOT_PROVIDER_API_KEYは短期間のバックアップとしてのみ使ってください。 ベアラートークン認証の場合、エンドポイント演算子が指定する通り COPILOT_PROVIDER_BEARER_TOKENを設定します。 |
| GitHub Copilot CLIは異なるプロバイダーやモデルを使用しています | プロバイダーの種類、ベースURL、モデル、選択した認証変数を、 copilot開始する同じPowerShellセッションで設定します。 エンドポイントが返す正確なモデルIDを使いましょう。 また、 $HOME\.copilot\providers.jsonを確認してください。そのファイルの提供者宣言やモデル宣言が COPILOT_PROVIDER_* 変数より優先されます。 |
| GitHub Copilot CLIがモデルを見つけられません | 再度 $BaseUrl/models クエリを行い、 COPILOT_MODEL 値とエンドポイントが返す id 値(大文字や句読点を含む)を比較します。 |
| プロンプトは、エンドポイントがリクエストを受け入れた後に失敗します | モデルとエンドポイントがストリーミングとツールや関数呼び出しの両方をサポートしているか確認してください。 エンドポイントログからサポートされていないリクエストフィールド、ツールスキーマ、コンテキスト制限、応答形式がないか確認してください。 |