Gitコマンドでプロキシを使う場面は、主に会社や学校などのネットワーク環境で発生します。
たとえば、社内ネットワークからGitHub、GitLab、Bitbucketなどの外部サービスへ接続する際、直接インターネットに出られず、プロキシサーバーを経由しなければならないケースがあります。
このような環境では、Gitに対してプロキシ設定を行わないと、リポジトリのクローン、プル、プッシュなどが失敗することがあります。
Gitでプロキシを設定する場合は、まず接続方式を確認することが重要です。
GitのリモートURLには、主にHTTPS形式とSSH形式があります。
HTTPS形式で接続している場合はGitのHTTP系設定を使い、SSH形式で接続している場合はSSH側の設定を使います。
Gitのプロキシ設定では、最初に現在のリモートURLがHTTPS形式かSSH形式かを確認します。
HTTPS形式のリモートURLは、URLが「https」から始まります。
この形式では、GitのHTTP系プロキシ設定が使われます。
一方、SSH形式のリモートURLは、ユーザー名やホスト名を含むSSH接続用の形式です。
この場合、GitのHTTPプロキシ設定だけでは効果がないことがあります。
つまり、同じGitコマンドでも、接続方式によって設定すべき場所が異なります。
Gitでは、HTTPS通信もHTTP系の設定として扱われます。
そのため、HTTPS形式のリモートURLに対してプロキシを使う場合でも、基本的にはGitのHTTPプロキシ設定を使います。
ここで注意したいのは、「HTTPS通信だからHTTPS専用の設定を使う」と単純に考えないことです。
Gitの設定体系では、HTTPS通信もHTTP関連の設定項目で管理されるため、基本的な説明ではHTTP系のプロキシ設定として整理するのが正確です。
SSH形式でGitを利用している場合、GitのHTTPプロキシ設定は通常そのままでは適用されません。
SSH接続でプロキシを通したい場合は、OpenSSHの設定ファイル側でプロキシ経由の接続を指定します。
企業ネットワークではSSH接続が制限されていることもあるため、プロキシ環境ではHTTPS形式のリモートURLを使うほうが設定しやすい場合があります。
ただし、社内ルールや利用しているGitサービスによってはSSH接続が推奨される場合もあります。
すべてのGitリポジトリで同じプロキシを使う場合は、ユーザー全体に適用されるグローバル設定を使います。
この設定を行うと、そのユーザーが実行するGitコマンド全般にプロキシ設定が適用されます。
たとえば、会社のネットワーク環境で常に同じプロキシを使う必要がある場合は、グローバル設定にしておくと便利です。
ただし、自宅や別のネットワークではプロキシが不要な場合、グローバル設定が原因でGit接続に失敗することがあります。
そのため、複数のネットワークを使い分ける人は、設定の適用範囲に注意が必要です。
特定のリポジトリだけでプロキシを使いたい場合は、そのリポジトリ単位で設定します。
この場合、設定は対象リポジトリ内のGit設定に保存されます。
ほかのリポジトリには影響しません。
たとえば、社内プロジェクトではプロキシを使い、個人開発のリポジトリではプロキシを使わない、といった使い分けができます。
Gitでは、特定のURLに対してだけプロキシを適用することもできます。
たとえば、GitHubへの接続だけプロキシを使い、社内Gitサーバーには直接接続する、といった設定が可能です。
この方法は、社内ネットワークと外部サービスを併用している環境で便利です。
特に、社内GitLabやオンプレミスのGitサーバーは直接接続し、GitHubやBitbucketなどの外部サービスだけプロキシ経由にしたい場合に向いています。
プロキシサーバーによっては、接続時にユーザー名とパスワードが必要になることがあります。
この場合、Gitのプロキシ設定に認証情報を含めることもできます。
ただし、パスワードを設定ファイルに直接保存する方法は注意が必要です。
設定ファイルにパスワードが平文で残る可能性があるため、セキュリティ上のリスクがあります。
実務では、プロキシのパスワードを直接Git設定に書く方法はできるだけ避けるべきです。
特に、会社PC、共有PC、CI/CD環境、ソースコード管理対象の設定ファイルでは、認証情報の取り扱いに注意が必要です。
可能であれば、ユーザー名だけを指定し、パスワードはOSの資格情報管理やGit Credential Managerなどに任せる方法が望ましいです。
また、社内SSO、NTLM認証、Kerberos認証などを使っている環境では、単純なユーザー名とパスワードの設定だけでは動作しない場合があります。
その場合は、社内のネットワーク管理者や情シス部門が推奨する方法に従う必要があります。
Gitの設定ファイルにプロキシ情報を保存したくない場合は、環境変数を使う方法があります。
環境変数を使うと、そのターミナルやコマンド実行環境だけで一時的にプロキシを指定できます。
たとえば、普段はプロキシを使わないものの、社内ネットワークに接続しているときだけプロキシを使いたい場合に便利です。
プロキシ設定が思った通りに動かない場合は、Gitの設定だけでなく、環境変数も確認する必要があります。
Gitでは、HTTPプロキシに関する設定をGit側で行うこともできますが、環境変数によってプロキシが指定されている場合、その影響を受けることがあります。
特に、ターミナル、OS、IDE、CI/CDツールなどで環境変数が設定されていると、Gitの設定を変更しても期待通りに挙動が変わらないことがあります。
プロキシのトラブルシューティングでは、Gitの設定ファイルと環境変数の両方を確認することが大切です。
すべての通信をプロキシ経由にすると、社内サーバーやローカル環境への接続で問題が起きることがあります。
そのような場合は、プロキシを使わない接続先を指定します。
たとえば、ローカルホスト、社内ドメイン、社内Gitサーバーなどは、プロキシを経由せず直接接続したほうがよい場合があります。
プロキシ除外の設定は、Git本体だけでなく、OS、シェル、HTTPライブラリ、利用しているGitクライアントなどの影響を受けることがあります。
そのため、同じ設定でもWindows、macOS、Linuxで挙動が異なる場合があります。
確実に制御したい場合は、GitのURL別設定を使って、外部サービスだけプロキシを適用する方法も検討するとよいでしょう。
SSH形式のリモートURLを使っている場合、GitのHTTPプロキシ設定を行っても通信に反映されないことがあります。
これは、SSH接続がHTTP通信とは別の仕組みで行われるためです。
SSH接続でプロキシを使う場合は、SSHクライアント側でプロキシ経由の接続を設定します。
SSH接続でプロキシを使う場合は、OpenSSHの設定ファイルでプロキシ経由の接続を指定します。
代表的には、ProxyCommandという仕組みを使います。
ProxyCommandを使うと、SSH接続を行う前に別のコマンドを経由して接続できます。
HTTPプロキシを経由してSSH接続したい場合には、この仕組みが使われます。
SSHでプロキシを通す際には、netcat、socat、connect-proxy、corkscrewなどのツールが使われることがあります。
ただし、これらのツールはOSや配布パッケージによって使えるオプションが異なります。
特にWindowsでは、標準でこれらのツールが入っていないことが多いため、Git for Windowsの環境や社内で推奨されているツールに合わせて設定する必要があります。
Gitには、gitプロトコル用のプロキシ設定もあります。
ただし、現在の一般的なGit運用では、HTTPSまたはSSHが主流です。
そのため、gitプロトコル用のプロキシ設定を使う機会は多くありません。
古い環境や特殊なネットワーク構成で使われることはありますが、通常はHTTPS接続のHTTPプロキシ設定、またはSSH接続のProxyCommandを確認すれば十分です。
初心者向けや実務向けの記事では、gitプロトコル用の設定を詳しく扱いすぎると、かえって混乱を招く可能性があります。
そのため、通常は「特殊なケースではgitプロトコル用の設定もある」程度の説明にとどめるのがよいでしょう。
プロキシ設定が正しく入っているか確認するには、Gitの設定一覧を確認します。
このとき、どの設定ファイルから読み込まれているかも確認できるようにすると、トラブルシューティングがしやすくなります。
Gitには、システム全体の設定、ユーザー単位の設定、リポジトリ単位の設定があります。
複数の場所に同じ種類の設定があると、どの設定が有効になっているのかわかりにくくなることがあります。
そのため、単に設定値を見るだけでなく、設定の読み込み元も確認するのがおすすめです。
Gitの設定に問題がないように見えても、環境変数で別のプロキシが指定されている場合があります。
特に、会社支給のPC、VPN接続環境、CI/CD、IDE内蔵ターミナルなどでは、ユーザーが意識していない環境変数が設定されていることがあります。
Gitのプロキシ設定を見直すときは、Git設定と環境変数の両方を確認しましょう。
プロキシが不要になった場合は、設定を削除します。
ユーザー全体に適用していた設定を解除すると、そのユーザーが使うGitコマンド全般からプロキシ設定が外れます。
自宅や別のネットワークでGit接続が失敗する場合、過去に設定したグローバルプロキシが原因になっていることがあります。
特定のリポジトリだけに設定していたプロキシは、そのリポジトリのGit設定から削除します。
グローバル設定を消しても、リポジトリ側にプロキシ設定が残っていると、そのリポジトリでは引き続きプロキシが使われる場合があります。
プロキシを完全に解除したい場合は、グローバル設定、ローカル設定、URL別設定、環境変数のすべてを確認することが重要です。
プロキシサーバーへの接続に失敗する場合は、プロキシのホスト名やポート番号が間違っている可能性があります。
また、VPNに接続していない、社内ネットワーク外にいる、ファイアウォールで遮断されている、といった原因も考えられます。
この場合は、Gitの設定だけでなく、ネットワークそのものがプロキシサーバーに到達できる状態かを確認する必要があります。
プロキシ認証が必要な環境では、認証情報が不足していると接続に失敗します。
ユーザー名やパスワードが間違っている場合のほか、パスワードに記号が含まれていて正しく解釈されていない場合もあります。
また、社内SSOやNTLM認証などを採用している環境では、単純な認証情報の指定では対応できないことがあります。
その場合は、会社が提供しているGit設定手順やプロキシ認証用ツールを確認するのが確実です。
企業ネットワークでは、セキュリティ製品やプロキシサーバーがHTTPS通信を検査していることがあります。
その場合、社内のルート証明書が正しく登録されていないと、GitでSSL証明書エラーが発生することがあります。
このとき、証明書検証を無効にする設定で一時的に回避できる場合もありますが、常用は避けるべきです。
証明書検証を無効にすると、通信相手が正しいか確認できなくなり、セキュリティリスクが高まります。
根本的な対処としては、社内のルート証明書をOSやGitが参照する証明書ストアに正しく登録することが望ましいです。
Gitで外部サービスに接続しようとして、ホスト名を解決できないエラーが出ることもあります。
この場合、DNS設定、VPN接続、社内ネットワーク設定に問題がある可能性があります。
ただし、社内環境によっては、外部ホスト名の解決や外部接続をプロキシ経由でのみ許可している場合もあります。
そのため、名前解決エラーが出た場合も、プロキシ設定が正しく反映されているか確認する必要があります。
企業ネットワークや学校のネットワークでは、HTTPS通信は許可されていても、SSH通信が制限されていることがあります。
そのため、プロキシが必要な環境では、HTTPS形式のリモートURLを使うほうが設定しやすいことが多いです。
HTTPS形式であれば、GitのHTTP系プロキシ設定で対応できる場合が多く、SSH用の追加設定やツールが不要になることがあります。
一方で、SSH接続が必ず不利というわけではありません。
社内の開発ルールでSSH接続が標準になっている場合や、SSH鍵による認証を前提としている場合は、SSH接続を使うほうが適していることもあります。
また、サービスによってはSSH接続をHTTPSポート経由で使う方法が用意されていることもあります。
どちらを使うべきかは、利用しているGitサービス、社内ネットワークの制限、認証方式、運用ルールによって判断するとよいでしょう。
最初に、現在のリモートURLがHTTPS形式かSSH形式かを確認します。
HTTPS形式であればGitのHTTP系プロキシ設定を確認し、SSH形式であればSSH側の設定を確認します。
この切り分けをしないまま設定を進めると、正しい場所に設定できていないために、プロキシが効かないという問題が起きやすくなります。
HTTPS形式のGitリモートを使っている場合は、まずGitのHTTPプロキシ設定を確認します。
全リポジトリに適用したい場合はユーザー全体の設定、特定のリポジトリだけに適用したい場合はリポジトリ単位の設定、特定のサービスだけに適用したい場合はURL別設定を使い分けます。
SSH形式のGitリモートを使っている場合は、OpenSSHの設定を確認します。
HTTPプロキシ経由でSSH接続するには、ProxyCommandなどを使う必要があります。
ただし、使用するコマンドやオプションは環境によって異なるため、社内で推奨されている設定例がある場合は、それに従うのが安全です。
プロキシに認証が必要な場合、パスワードをGit設定に直接保存しないよう注意します。
設定ファイルに認証情報を残すと、PCを共有している場合や設定ファイルを誤って共有した場合に、情報漏えいにつながるおそれがあります。
可能であれば、OSの資格情報管理、Git Credential Manager、社内認証基盤などを活用しましょう。
Gitでプロキシを設定する際は、まずHTTPS接続なのかSSH接続なのかを確認することが重要です。
HTTPS形式のリモートURLを使っている場合は、GitのHTTP系プロキシ設定を使います。
SSH形式のリモートURLを使っている場合は、GitのHTTPプロキシ設定ではなく、OpenSSH側の設定が必要になることがあります。
現在の一般的なGit運用では、HTTPS接続がよく使われます。
HTTPS形式のリモートURLに対しても、GitではHTTP系のプロキシ設定として扱うのが基本です。
そのため、記事や手順書では「HTTPSだからHTTPS専用設定」と説明するのではなく、「HTTPS通信もHTTP系設定で扱う」と整理すると、より正確でわかりやすくなります。
プロキシ設定がうまく効かない場合は、Gitの設定だけでなく、環境変数、リポジトリ単位の設定、URL別設定、SSH設定などを総合的に確認する必要があります。
特に、会社や学校のネットワークでは、ユーザーが意識していないプロキシ設定や認証方式が使われていることがあります。
Gitのプロキシ設定では、単に設定値を入れるだけでなく、接続方式、設定範囲、認証方式、証明書、環境変数まで含めて確認することが大切です。
以上、Gitコマンドで使用するプロキシの設定方法についてでした。
最後までお読みいただき、ありがとうございました。