Terraformを使って覚える。（その２：git-secretsとVS Codeのインストール）

# はじめに
今回は`Terraform`の内容とは若干外れますが、`Terraform`で開発していくために使用するツール類のインストールとセットアップを行ってみようと思います。

- 【前】[Terraformを使って覚える。（その１：tfenvを使ったTerraformインストール）](https://qiita.com/sakai00kou/items/34cf8a3c8047a573109a)
- 【次】[Terraformを使って覚える。（その３：Terraformの実行）](https://qiita.com/sakai00kou/items/850c956d59fa53c9c266)

# 今回インストールするツール
今回は以下２つのインストール＆セットアップを行います。

- git-secrets
- Visual Studio Code（VS Code）

# インストール環境
前回と同様、Windows端末にインストールしていきます。

|種別|内容|
|:--|:--|
|OS|Windows 11 Home|
|アーキテクチャ|AMD Ryzen 7 3700U|

# git-secretsとは
`AWS`が`GitHub`で公開しているツールで、`AWS`のクレデンシャル情報（アクセスキー＆シークレットアクセスキー）を含むファイルが`Git`でコミットされないようにするツールとなります。

- [git-secrets](https://github.com/awslabs/git-secrets)

仕組みとしては`Git`のフック機能を使用して、`Git`のコミット実行時にコミットメッセージやマージした際の履歴等に所定の文字列（アクセスキー＆シークレットアクセスキーの文字列）が含まれていればコミットを拒否する動作を行う仕組みとなります。

`AWS`のクレデンシャル情報だけではなく、自分で拒否パターンを追加することもできるようなので、うまく使えば所定の文字列チェックツールとしても使えそうです。

:::note warn
公式ページにも記載されている通り、git-secretsはあくまでも保険的なツールとなります。
git-secretsをインストールしたとしても誤検知でコミットされてしまう可能性もあるため、過信しすぎないようにしてください。
:::

# git-secretsのインストール＆セットアップ
`git-secrets`は以下の流れでインストールとセットアップを行っていきます。

1. git-secretsのインストール
2. git-secretsのセットアップ
3. git-secretsの動作確認
4. 既存のGitリポジトリへのgit-secretsインストール

## git-secretsのインストール
`git-secrets`をインストールするためには、上述の`GitHub`からクローンでダウンロードし、リポジトリ内に含まれるインストールスクリプトを実行することでインストールできます。

操作端末は`Windows`となるため、`PowerShell`で実行していきますが、インストールスクリプトは`Windows`のデフォルトだと実行できないため、管理者権限で`PowerShell`を起動して、以下コマンドを実行しておきます。

```powershell:スクリプト実行の許可
Set-ExecutionPolicy RemoteSigned
```

`git clone`コマンドで`GitHub`から`git-secrets`をダウンロードして、中にある「`install.ps1`」を実行します。

尚、`git-secrets`はユーザのホームディレクトリとなる「**C:\Users\\[ユーザ名]**」の配下にダウンロードするものとします。

```powershell:git-secretsのインストール
git clone https://github.com/awslabs/git-secrets.git
cd ./git-secrets
./install.ps1
```

## git-secretsのセットアップ
以下の手順を実行し、`git-secrets`のセットアップを行います。

1. AWS用検査パターンの追加
2. Gitフック用テンプレート作成
3. テンプレートディレクトリ設定

`git-secrets`は上述の通り、`Git`のフック機能を使用してコミット時にチェックする仕組みとなるため、言い換えると上記セットアップは`Git`フックを使用するための設定を追加していることとなります。

もう少し詳細に見ていくと下記のようなことが行われております。

- 上記1
`Git`インストールを行った端末のホームディレクトリに存在する`.gitconfig`ファイルに、コミット時に参照される検査パターンを追加。

- 上記2
所定のディレクトリ配下（今回はユーザのホームディレクトリ配下）にフック用テンプレートを作成。

- 上記3
`.gitconfig`にテンプレート用ディレクトリを追加。

### AWS用検査パターンの追加
`.gitconfig`に検査パターンを追加するため、以下コマンドを実行します。

```powershell:検査パターンの追加
git secrets --register-aws --global
```

以下コマンドで`secrets.providers`や`secrets.patterns`の内容が表示されればOKです。

```powershell:登録確認
git config --global --list
```

### Gitフック用テンプレート作成
所定のディレクトリ配下にGitフック用テンプレートをインストールします。

今回はユーザのホームディレクトリ配下となる「**C:\Users\UserName\\.git-templates\git-secrets**」に各種フック用ファイルをインストールします。

```powershell:Gitフック用テンプレートのインストール
git secrets --install $env:userprofile/.git-templates/git-secrets
```

### テンプレートディレクトリ設定
ユーザが作成したフック用テンプレートを指定する際に使用される`init.templatedir`変数に、先ほどフック用ファイルをインストールした場所を指定します。

```powershell:Gitフック用テンプレートディレクトリ指定
git config --global init.templatedir $env:userprofile/.git-templates/git-secrets
```

## git-secretsの動作確認
`git-secrets`の動作を確認するため、適当な場所にテスト用Gitリポジトリを作成し、AWSクレデンシャル情報があった場合コミットできないかを確認します。

以下はユーザのホームディレクトリに**terraform**ディレクトリを作成してローカルリポジトリを作成＆コミットを行ってみます。

AWSのクレデンシャル情報は`AWS CLI`セットアップ時に作成されているクレデンシャル情報を持ってきて実行することとします。

```powershell:git-secretsの動作確認
mkdir terraform
cd terraform
git init
cp $env:userprofile/.aws/credentials ./
git add .
git commit -m "test commit"
```

コミット実行時、以下のようにエラーメッセージが表示されれば成功です。

```powershell:コミット実行時のエラーメッセージ例
credentials:2:aws_access_key_id = XXXXXXXXXXXXXXXXXXXX
credentials:3:aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

[ERROR] Matched one or more prohibited patterns

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- List your configured allowed patterns in .gitallowed at repository's root directory
- Use --no-verify if this is a one-time false positive
```

## 既存のGitリポジトリへのgit-secretsインストール
上記「**git-secretsの動作確認**」と同様、新たに`git init`コマンドでリポジトリを作成する場合は、リポジトリ作成時に各リポジトリ内に作成される`.git/hooks`に`init.templatedir`で設定したテンプレートが読み込まれるため、いちいち`git-secrets`の設定を行う必要はありませんが、既存のGitリポジトリには今回作成したフック用テンプレートが設定されていないため、別途設定する必要があります。

既存Gitリポジトリへインストールを行うためには以下コマンドを実行します。

尚、複数Gitリポジトリが存在する場合は、それぞれのリポジトリ配下で実行する必要があります。

```powershell:既存Gitリポジトリへのgit-secretsインストール
cd [既存Gitリポジトリ]
git secrets --install
git secrets --register-aws
```

設定し終わったら先ほどと同様`git-secrets`の動作確認を行い、先ほどと同様のエラーが表示されれば完了です。

```powershell:既存Gitリポジトリでのgit-secretsの動作確認
cd [既存Gitリポジトリ]
cp $env:userprofile/.aws/credentials ./
git add .
git commit -m "test commit"
```

# VS Codeのインストールとセットアップ
開発用として`Visual Studio Code`（以下`VS Code`）をインストールして、追加で拡張機能などの設定を行います。

1. VS Codeのインストール
2. 拡張機能のインストール
3. VS Codeのデフォルトターミナル変更

## VS Codeのインストール
以下よりWindows用`VS Code`をダウンロードし、インストールします。

- [Download Visual Studio Code](https://code.visualstudio.com/download)

インストール自体はインストーラを実行するだけなので割愛。

## 拡張機能のインストール
インストールした`VS Code`を起動し、画面左の拡張機能から以下を検索してインストールします。

- Japanese Language Pack for Visual Studio Code
- HashiCorp Terraform

これも検索して「**インストール**」をクリックするだけなので割愛。

## VS Codeのデフォルトターミナル変更
`Windows`で`Terraform`を使用する場合、`Git Bash`による使用が推奨されているそうなので、`VS Code`のデフォルトのターミナルを`Git Bash`に変更します。

最初に`VS Code`を起動して、「**ファイル**」→「**ユーザー設定**」→「**設定**」を開き、「**設定の検索**」で以下を入力して検索します。

【検索文字列】
**terminal integrated default profile windows**

表示された設定のプルダウンメニューを確認すると、以下のように「`Git Bash`」が選択できると思うので、「`Git Bash`」を選択します。

![001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/0b951273-f79d-1456-ba6b-d672416b0bd6.jpeg)

変更後、「**ターミナル**」→「**新しいターミナル**」を開き、以下のように`Git Basah`のプロンプトが表示されれば完了です。

![002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/3d73e6f1-5d38-6a59-07c8-e085280f0c97.jpeg)

# おわりに
今回は`Terraform`の開発環境を整えるところまで実施しました。

次回は`VS Code`で実際に`Terraform`のコードを作成して実行するところまで進めようと思います。