はじめに
業務で利用するネットワーク、特にプロキシサーバーを経由する環境において、特定のツールが期待通りに動作しない問題に直面することがあります。
Webブラウザからは問題なくAzure DevOpsのWebポータルにアクセスできるにもかかわらず、Visual Studio Codeやコマンドラインからgit clone
を実行しようとすると、以下のようなエラーメッセージが表示され、処理が失敗しました。
本稿では、このエラーが発生する原因を解説し、具体的な解決策を提示します。
エラーの根本原因:WebブラウザとGitクライアントの構成差異
この問題の根本原因は、WebブラウザとGitクライアントとで、ネットワークへの接続に利用されるプロキシ設定が異なる点にあります。
一般的なWebブラウザ(Microsoft Edge, Google Chromeなど)は、OSに設定されたプロキシ情報を自動的に参照し、通信を行います。そのため、ユーザーはプロキシの存在を意識することなくWebサイトを閲覧できます。
一方で、git
コマンドを実行するGitクライアントは、OSのプロキシ設定を継承しない独立したアプリケーションとして動作します。そのため、Gitクライアント自体にプロキシサーバー経由で通信を行うよう明示的に設定しなければ、宛先サーバーへの接続を確立できず、タイムアウトエラーが発生します。
対処法:Gitクライアントへのプロキシ設定
この問題を解決するには、Gitのグローバル構成に対し、使用するプロキシサーバーの情報を設定します。
以下のコマンドをターミナル(コマンドプロンプト、PowerShell等)で実行してください。
git config --global https.proxy "http://[ユーザーID]:[パスワード]@[プロキシホスト名]:[ポート番号]"
このコマンドは、Gitのhttps.proxy
設定に、指定したプロキシサーバーのアドレスと認証情報を記録します。--global
オプションを付与することで、システム上のカレントユーザーが実行するすべてのGit操作にこの設定が適用されます。
補足事項:認証情報にドメイン名が含まれる場合
プロキシサーバーの認証において、ユーザーIDにドメイン名(例: DOMAIN\user.name
)の指定が必要な場合、特別な設定が必要です。
コマンドラインにおいてバックスラッシュ\
はエスケープ文字として解釈される可能性があるため、URLエンコーディング規約に従い、\
を%5C
に置換して指定する必要があります。
ドメイン名を含む場合のコマンド例:
git config --global https.proxy "http://[ドメイン名]%5C[ユーザーID]:[パスワード]@[プロキシホスト名]:[ポート番号]"
例えば、以下の情報で設定を行う場合を考えます。
- ドメイン名:
japan
- ユーザーID:
yamada
- パスワード:
pass123
- プロキシホスト名:
proxy.yourcorp.com
- ポート番号:
8080
この場合、実際に実行するコマンドは以下の通りです。
git config --global https.proxy "http://japan%5Cyamada:pass123@proxy.yourcorp.com:8080"
設定の確認
上記の設定を完了させた後、失敗したgit clone
コマンドを再度実行します。
git clone https://dev.azure.com/your-org/your-project/_git/your-repo
正しく設定が適用されていれば、Gitクライアントはプロキシサーバー経由でAzure DevOps Reposとの通信を確立し、リポジトリのクローンが正常に開始されます。
まとめ
プロキシ環境下で発生するGitの接続エラーは、多くの場合、Gitクライアント固有のプロキシ設定が欠落していることに起因します。
本件の要点
- WebブラウザとGitクライアントは、それぞれ独立したネットワーク構成を持つ。
- プロキシ環境では、
git config --global https.proxy
コマンドによる明示的な設定が必要。 - 認証情報のドメイン名に含まれるバックスラッシュ
\
は、%5C
へのURLエンコードが必須。
同様の問題に直面した際の、原因特定と解決の一助となれば幸いです。