プロキシ環境下でVisual Studio CodeのGitHub Copilot拡張を利用できるようにする

概要

プロキシが導入された環境でGitHub Copilotがうまく動作しないのでなぜ動かないのか調査しました。 今回は社内の環境なので詳細は伏せます。重要なところだけお伝えできればと思います。

やること

  • 証明書用の環境変数を設定
    • export NODE_EXTRA_CA_CERTS=~/SSL-TrsutCA.crt
  • httpプロキシの設定(httpプロキシ情報を保存した環境変数の設定)
    • .bashrcまたは.zshrcexport HTTP_PROXYを記録して保存
  • Visual Studio Codeのsettings.jsonを設定(以下を追記)
    "github.copilot.advanced": {
        "debug.useElectronFetcher": true
    }

証明書用の環境変数を設定

GitHub Copilotの証明書はNODE_EXTRA_CA_CERTS変数を参照するため、証明書のパスを設定します。今回は社内で配布された証明書を使います。

Copilot は、オペレーティング システムの信頼ストアから証明書を読み取ります。 また、標準の Node.js 環境変数 NODE_EXTRA_CA_CERTSで指定されたファイルから追加の証明書を読み取ります。 詳細については、「Node.js に関するドキュメント」を参照してください。

参考

export NODE_EXTRA_CA_CERTS=~/{証明書の名前}.crt

例:

export NODE_EXTRA_CA_CERTS=~/SSL.crt

httpプロキシの設定(httpプロキシ情報を保存した環境変数の設定)

GitHub Copilotはプロキシ情報を参照する際に環境変数を参照します。参照には優先度があるので注意が必要です。

GitHub Copilot では、基本的な HTTP プロキシ設定をサポートしています。 プロキシに対して認証が必要な場合、GitHub Copilot は Kerberos による基本認証または認証をサポートします。 プロキシ URL が開始 https://された場合、プロキシは現在サポートされていません。 選択したエディターで、GitHub Copilot の HTTP プロキシを構成できます。 エディターの手順を表示するには、この記事の上部にあるタブを使用します。 エディターでプロキシを直接構成しない場合、GitHub Copilot は、優先度が最も高いものから最も低いものまで、次のいずれかの環境変数にプロキシ URL が設定されているかどうかを確認します。 - HTTPS_PROXY - https_proxy - HTTP_PROXY - http_proxy

参考 - GitHub Copilot のプロキシ設定を構成する

Visual Studio Codeのsettings.jsonを設定

プロキシの設定をしても以下のようなエラーが表示されてうまくいかない場合があります。 以下のエラーはVisual Studio Code 1.87.2で観測されるエラーです。※なお、1.88.1でも観測されました。

2024-04-18 05:43:00.064 [error] [default] Error sending telemetry FetchError: tunneling socket could not be established, cause=connect ETIMEDOUT
    at fetch ({ユーザーフォルダ}/.vscode/extensions/github.copilot-1.180.0/node_modules/@adobe/helix-fetch/src/fetch/index.js:99:11)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at cachingFetch ({ユーザーフォルダ}/.vscode/extensions/github.copilot-1.180.0/node_modules/@adobe/helix-fetch/src/fetch/index.js:288:16)
    at ZU.fetch ({ユーザーフォルダ}/.vscode/extensions/github.copilot-1.180.0/lib/src/network/helix.ts:78:22) {
  type: 'system',
  _name: 'FetchError',
  code: 'ETIMEDOUT',
  errno: -60,
  erroredSysCall: 'connect'
}

helix-fetchというNode.jsモジュールのエラーであることがわかるため、useElectronFetcherをオンにします。 具体的には以下の設定をVisual Studio Codeのsettings.jsonでオンにします。

    "github.copilot.advanced": {
        "debug.useElectronFetcher": true
    }

これでセットアップは以上です。実際に動かしてみましょう。

トラブルシューティング

セットアップの過程で発生したエラーを記録しておきます。困った時に参照してください。

  • certificate has expired
  • tunneling socket could not be established, cause=Failed to establish a socket connection to proxies

エラー内容:certificate has expired

certificate has expiredというエラーですが、これはそもそも社内で新しい証明書が発行されているにもかかわらず、何もしなかったために起きました。 要するに証明書の更新が必要という感じです。

エラー内容:tunneling socket could not be established, cause=Failed to establish a socket connection to proxies

@adobe/helix-fetch/src/fetch/index.js:99:11というメッセージとともに表示された場合は前述のsettings.jsonによる設定を試みます。

おわり