Visual Studio CodeのSettings Syncの「コンソールのログインエラー ([ヘルプ] > [開発者ツールの切り替え]) 」を解決する

## 環境
- Visual Studio Code: Version 1.42.1
- OS: macOS Catalina Version 10.15.3
- Settings Sync: Version 3.4.3

記事内で説明しているショートカットは、Mac以外の方は自分のOSのものに読み替えてください。
画面のスクショと説明が、英語と日本語のメニュー名ごちゃまぜかもしれませんが、あしからず。

## 問題
会社のPCのバッテリーがおかしくなり、新しいPCになったのでVSCodeのセットアップをしていたら、Settings Syncの設定ダウンロードで毎回同じエラーが出て同期ができませんでした。
もちろん、Gist IDとAccess Tokenは正しい状態です。

```
// 日本語
Sync: コンソールのログインエラー ([ヘルプ] > [開発者ツールの切り替え])

// 英語
Sync: Error Logged In Console (Help menu > Toggle Developer Tools).
```

 ![vsc-sync-error1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/a59d1641-97e3-fa8a-8068-65c3c288ef6e.png)


この記事では、この原因（のおそらく一部）と解決方法について記載します。


## 結論
### 問題の原因
GitHub Gistの `extensions.json` に記載されている拡張に、VSCodeのMARKETPLACEから無くなったもの（非公開or削除）が含まれており、それをインストールしようとして失敗しまうため。

### 解決方法
`extensions.json` から、以下のいずれかの方法で該当の拡張のコードを消す。

1. Settings Syncで同期している他のPCで該当の拡張をアンイストールして、設定をアップロードする
2. GitHub Gistの `extensions.json` を直接編集する


## 説明
さきほどの画像だと、`vscode-code-outline` がMARKETPLACEから無くなっているのに、それをインストールしようとして、拡張が見つからずにエラーになっています。
毎回同じ場所でエラーになっていれば、その拡張が原因の可能性が高いです。

私の場合、MARKETPLACEから無くなった `sublime-babel-vscode` と `vscode-code-outline` が前のPCでインストールされたままで、それらを新しいPCでインストールしようとしていました。

ということで、解決するためにはこれらをインストールしないようにすればよいです。

解決方法はおそらく↑に書いたように

1. Settings Syncで同期している他のPCで該当の拡張をアンイストールして、設定をアップロードする
2. GitHub Gistの `extensions.json` を直接編集する

のいずれかです。

簡単なのは前者で、他のPCで該当の拡張をアンインストールするだけでOKでしょう（これで解決できるかは試していません）。

ただ、私は会社の前のPCが使えない状態かつ、家に帰ってプライベートのPCが操作できるのを待つのはいやだったので、後者のGitHub Gistを直接編集して消す方法を取りました。

### GitHub Gistを編集
GitHub Gistの編集の手順を説明します。

#### GitHub Gistを開く
※以下の説明ではVSCodeから開いていますが、もちろん、普通にブラウザ操作で開いてもOK

`shift+cmd+p` でコマンドパレットを開き、`sync` と打って表示される `Advanced Options` を選択。

![vsc-sync-error2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/b98b1859-25cf-e96f-5bee-983ced06ae8f.png)


`Sync: Open Settings` を選択。

![vsc-sync-error3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/822c087f-d220-6592-0389-5cf8f3658f53.png)


`Gist ID` 右下の `VIEW` を選択して、Settings Syncで使っているGitHub Gistを開く。

![vsc-sync-error4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/b64df1cd-42ae-1bcc-5bff-ad46582c36d3.png)


#### GitHub Gistを編集
`Edit` を選択。

![vsc-sync-error5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/49ab067d-e57f-83cc-7ecb-cd5475828950.png)


`extensions.json` にフォーカスを当て、`cmd+F` で該当の拡張を検索。

![vsc-sync-error6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/c1c5ae68-7b2a-cde3-357c-e25d7b8e17fa.png)


オブジェクト一式を削除。
該当の拡張のオブジェクトをすべて削除してください。

![vsc-sync-error7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/859280f8-03fc-b048-c5b3-f816a541196a.png)


さらに `cloudSettings` も編集します。
`extensions.json` しか編集しないと、新しいPCでなんらかの設定を更新してGistにアップロードする前に、古いPCで設定を更新してアップロードしてしまうと、さきほど消した `extensions.json` の拡張のコードが復活してしまいます。
これは、設定の最新アップロード日時が、古いPCで設定が同期された日時以下のため、古いPCの設定が最新と認識されてしまい、消したコードが残ったままになるからです。
そのため、タイムスタンプを更新しておきます。

`cloudSettings` の `lastUpload` を現在日時にでもしておきましょう。

![vsc-sync-error8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/dfec9181-61d5-25ce-2ff7-dbece1f550d7.png)


画面最下部の `Update secret gist` を選択。

![vsc-sync-error9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/e0873f7c-7f3e-3c63-7aee-db23509c1fd2.png)


以上です。

`Revisions` で差分を見ると、コードが消えていることが確認できます。

![vsc-sync-error10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130946/275eba3f-b3f4-a991-6873-8e264c64d4d0.png)

これでエラーが起きていたPCで設定をダウンロードすると、この記事のエラーは起きないはずです！
他のエラーが出たら頑張って解決してください笑

## 余談
私は日本語のエラーと英語のエラーで検索しても、解決方法が見つけられませんでした。
Settings Syncのソースコードの `common.error.message` でこのエラーの文章が定義されており、`ERROR_MESSAGE` という変数に入れているのはわかりましたが、具体的にどういうエラーで起きるかはわからず。。。

結局、エラーが毎回同じ箇所で発生していることから推測して、この記事の内容にたどり着きました。

- [common.error.messageが出るコード](https://github.com/shanalikhan/code-settings-sync/search?q=common.error.message&unscoped_q=common.error.message)
- [ERROR_MESSAGEが出るコード](https://github.com/shanalikhan/code-settings-sync/search?q=ERROR_MESSAGE&unscoped_q=ERROR_MESSAGE)