Visual Studio Code と GitLab を連携させるための設定

# 概要

初期設定では Visual Studio Code (以下、vscode) で GitLab からの pull や push ができません。
何も考えずに pull を試してみると以下のエラー画面とともにエラーログが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278145/7674c37f-0e32-fa1b-54d6-5d18fe16fbff.png)

```
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

エラーログによると、アクセス権限の不足によってリモートリポジトリー(GitLab)への接続ができていないようです。

本記事では vscode から GitLab に連携できるようにするための手順をまとめておきます。

# 前提条件

* GitLab を運用している
* Git クライアント(TortoiseGitなど)からは pull や push ができている
* vscode を利用している
* vscode で GitLab からの pull や push がしたい

※運用中の GitLab は社内のイントラネットまたは gitlab.com のどちらでも問題ありません

# はじめに

vscode から pull や push を行うとアクセス権限の不足によってエラーが発生しますが、これは SSH 接続のための設定が行われていないためです。
以下の手順に従って SSH 接続の設定を行うことで GitLab へのアクセス権限が与えられるためエラーは解消されます。

# 設定手順

## (1) OpenSSH のダウンロード

[Win32-OpenSSH](https://github.com/PowerShell/Win32-OpenSSH/releases) から `OpenSSH-Win64.zip` (※) をダウンロードします。

※2020/08/19時点では v8.1.0.0p1-Beta を利用します

## (2) ZIPファイルの展開

`OpenSSH-Win64.zip` を展開して以下のフォルダー階層で配置します。

```
C:\Program Files\OpenSSH-Win64
```

※OpenSSH-Win64フォルダー直下に `ssh.exe` などのモジュール群が含まれている状態です

## (3) 環境変数の設定

Windowsのシステムの環境変数へ以下の値を設定します。

|変数|値|
|:---|:---|
|PATH|C:\Program Files\OpenSSH-Win64|
|GIT_SSH|C:\Program Files\OpenSSH-Win64\ssh.exe|

※PATHは既存の値に追記してください

## (4) Gitの設定

Gitのユーザー名とメールアドレスの設定を行います。
既に設定済みの場合はこの手順は不要です。

vscode のターミナル(またはコマンドプロンプト)で以下のコマンドを実行します。

```
git config --global user.name "ユーザー名"
git config --global user.email "メールアドレス"
```

必要に応じて以下のコマンドも実行しておきます。

|コマンド|説明|
|:---|:---|
|git config --global core.ignorecase false|ファイル名の大文字と小文字を区別する|
|git config --global core.quotepath false|日本語のファイル名の文字化けを防ぐ|
|git config --global core.safecrlf true|改行コードが混在している場合に変換しない|
|git config --global core.autocrlf false|コミットやチェックアウトで改行コードを変換しない|

### 参考情報

[最初のGitの構成](https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-%E6%9C%80%E5%88%9D%E3%81%AEGit%E3%81%AE%E6%A7%8B%E6%88%90)

## (5) SSHの公開鍵と秘密鍵のファイル生成

まずはWindowsのログオンユーザーのフォルダー直下に `.ssh` フォルダーを生成します。

```
C:\Users\(ログオンユーザー名)\.ssh
```

vscode のターミナル(またはコマンドプロンプト)で `.ssh` フォルダーをカレントフォルダーにします。

```
cd C:\Users\(ログオンユーザー名)\.ssh
```

以下のコマンドを実行して公開鍵と秘密鍵のファイルを生成します。

```
ssh-keygen -t rsa -f id_rsa_gitlab -b 4096 -C "メールアドレス"
```

公開鍵と秘密鍵のファイルに設定するパスワードの入力が要求されます。
必要に応じてパスワードを入力します。(未指定も可能)

```
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```

コマンドが正しく実行されると最終的に以下の2つのファイルが生成されます。

|ファイル名|説明|
|:---|:---|
|id_rsa_gitlab|秘密鍵ファイル|
|id_rsa_gitlab.pub|公開鍵ファイル|

## (6) configファイルの設定

`.ssh` フォルダーに `config` ファイルを作成して以下の内容を記述します。
既に `config` ファイルが存在する場合は追記してください。

```:config
Host (ホスト名)
 User (ログインユーザー名)
 Hostname (ホスト名またはIPアドレス)
 IdentityFile (秘密鍵ファイルのパス)
 IdentitiesOnly yes
```

### 記述例

```:config
Host gitlab.com
 User git
 Hostname gitlab.com
 IdentityFile ~/.ssh/id_rsa_gitlab
 IdentitiesOnly yes
```

## (7) GitLab の公開鍵の設定

GitLab にログインして `User Settings` > `SSH Keys` を表示します。
[手順(5)](#5-SSHの公開鍵と秘密鍵のファイル生成) で生成した公開鍵のファイル(id_rsa_gitlab.pub)の内容をKeyの入力エリアに貼り付けます。
貼り付けたら `Add key` ボタンを押下します。

※公開鍵のファイルの内容は `ssh-rsa` から始まる文字列になっています


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278145/9a7a71fb-49e2-dda0-f2b5-ae0fdf383bff.png)

## (8) SSH 接続テスト

vscode のターミナル(またはコマンドプロンプト)で以下のコマンドを実行します。

```
ssh -T gitlab.com
```

※vscode を起動したまま [手順(3)](#3-環境変数の設定) でシステムの環境変数を設定していた場合は vscode の再起動を行ってからコマンドを実行してください

SSH 接続テストに成功すると以下のメッセージが表示されます。

```
Welcome to GitLab, (ログインユーザー名)!
```

設定手順は以上です。
SSH 接続テストに成功している状態であれば vscode で GitLab からの pull や push ができるようになっています。