stoneでVSCodeのプロキシ認証情報の入力を自動化する

# Windows版VS Codeでプロキシのパスワード入力を自動化する

認証プロキシ配下でVS Codeを利用していると、 `Extensions` を開いたときとかに、以下のようなダイアログが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/793536d7-1ce5-b7bc-f7a3-f4b6bdd7830d.png)

毎回ユーザー名とパスワードを入力するのはしんどいので、自動入力できないか調査したところ、紆余曲折ありましたが、自動入力できることがわかったので、紹介します。

結果だけ知りたい方は、「解決編」まで読み飛ばしてください。



# 調査編：VS Code標準機能だけでは無理っぽい

[VS Codeの公式ページ](https://code.visualstudio.com/updates/v1_15#_proxy-server-authentication)を読んでみると、どうやらVS Codeのネットワーク機能はChromiumのネットワーク機能を利用しているようです。

[Chromiumの公式ページ](https://www.chromium.org/developers/design-documents/http-authentication)を読んでみましたが、自動入力には対応していなさそうでした。



## settings.jsonをためしてみたけどダメだった

`settings.json` に以下のように追加してみましたが、とくに変化はありませんでした。

```json
{
    "http.proxy": "http://（ユーザー名）:（パスワード）@（ホスト）:（ポート）",
    "http.proxyStrictSSL": false
}
```

上記の指定方法だと、`（ホスト）:（ポート）` は効きますが、 `（ユーザー名）:（パスワード）` の方は効いていないみたいです。



## `--proxy-server` をためしてみたけどダメだった

VS Codeの起動オプションに、以下のように `--proxy-server` を追加してみましたが、ダメでした。

`"C:\Program Files\Microsoft VS Code\Code.exe" --proxy-server=http://（ユーザー名）:（パスワード）@（ホスト）:（ポート）`

やはり、 `（ホスト）:（ポート）` は効きますが、 `（ユーザー名）:（パスワード）` の方は効いていないみたいです。



## `--proxy-auth` をためしてみたけどダメだった

VS Codeの起動オプションに、以下のように `--proxy-auth` を追加してみましたが、ダメでした。

`"C:\Program Files\Microsoft VS Code\Code.exe" --proxy-server=http://（ホスト）:（ポート） --proxy-auth=（ユーザー名）:（パスワード）`

やはり、 `（ホスト）:（ポート）` は効きますが、 `（ユーザー名）:（パスワード）` の方は効いていないみたいです。



# 解決編：stone使えばできた

VS Code標準の機能ではダメそうだということで、他の方法を調べてみたところ、[stone](http://www.gcd.org/sengoku/stone/Welcome.ja.html)というものを知りました。

PC内に常駐する新しいProxyサーバー（以後stoneサーバーと呼びます。）を構築し、VS Codeのすべての通信をstoneサーバーを介して行うことで、stoneサーバーでプロキシの認証情報を付加するという手法のようです。



## stoneをインストールする

stoneの導入については、以下の記事がわかりやすかったので、こちらをご参照ください。

ただし、実施するのはこの記事の `サービス化と起動` までです。今回、IEは関係ないので、 `ブラウザの設定` 以降はやらなくて大丈夫です。

（というか、やってしまうとVS Code以外のツールにも影響してしまうので、やらない方が安全です。）

[Qiita / stoneであの煩わしいプロキシ認証を自動化する](https://qiita.com/maitake9116/items/96c8dcbbe7e1481f9543)

上記の記事の手順通りにやると、 `http://localhost:3200` というURLでstoneサーバーが起動します。



## VS Codeの `--proxy-server` にstoneサーバーを設定する

VS Codeの通信がstoneサーバーを経由するように設定します。

コマンドプロンプトで以下のコマンドを実行してみてください。

```
"C:\Program Files\Microsoft VS Code\Code.exe" --proxy-server=http://localhost:3200
```

VS Codeが起動すると思います。

起動しなかった場合、VS Codeのインストール先が違うのかもしれません。例えば、Chocolateyでインストールした場合は、以下のパスになるそうです。

```
%LOCALAPPDATA%\Programs\Microsoft VS Code\Code.exe --proxy-server=http://localhost:3200
```

適宜、ご自身のPC環境に合わせてパスを変更してみてください。

コマンドでVS Codeが起動できたら、`Extensions` を開いてみましょう。

**プロキシのユーザー名とパスワードが聞かれなかったと思います！**

あとは上記のコマンドを以下のようにショートカットにしてしまえば、毎回コマンドを打たなくて大丈夫になります！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/52387175-4dbb-b9bd-bb9a-a18484c600bd.png)

以上、おつかれさまでした。



# 参考サイト

- [Visual Studio Code / Proxy server authentication](https://code.visualstudio.com/updates/v1_15#_proxy-server-authentication)
- [The Chromium Projects / HTTP authentication](https://www.chromium.org/developers/design-documents/http-authentication)
- [Simple Repeater / stone version 2.3e](http://www.gcd.org/sengoku/stone/Welcome.ja.html)
- [nocorica / stoneを使ってプロキシ認証を自動化する](http://blog.nocorica.jp/2013/11/stone-proxy-auto-auth/)
- [Qiita / Visual Studio Code に Proxy を設定する方法](https://qiita.com/cointoss1973/items/b3c84daeed90fd183501)
- [Qiita / stoneであの煩わしいプロキシ認証を自動化する](https://qiita.com/maitake9116/items/96c8dcbbe7e1481f9543)
- [Qiita / Selenium Chrome Proxy の設定](https://qiita.com/skimhiro/items/de501f45607d6a09cde5)