Keybaseに登録した鍵を使ってWSLを使わずにWindowsでgitの署名付きcommitをする

\:information_source: この記事は別サイトで執筆した[Keybaseに登録した鍵を使ってWSLを使わずにWindowsでgitの署名付きcommitをする – ひつじぶどう](https://blog.rumraisin.tokyo/?p=174)の内容を加筆・修正した上で転載しています。

# はじめに
どうも‪✋(´･ᴗ･\` )‬

言いたいことは掲題の通りです。
~~WSL, 悪くはないと思うんですがフォントの設定があんまりうまくいかなかったり個人的にはあまり便利には使えていないので,~~ できればPowerShellだけで済ませたい人向けの記事です。
※[オリジナルの記事](https://blog.rumraisin.tokyo/?p=174)執筆時点での感想です。今は良さげな気がします。

[Keybase の鍵で GitHub のコミットに Verified バッジをつける – Qiita](https://qiita.com/7ma7X/items/bcb0246b42d12195c6d0)
基本的にはここで書かれている内容をWindowsでやりましょうというお話です。
macOS向けの記事ではあるものの, なんかまぁ適当に読み替えればいけるかなと思ったけどそうではない感じだったので忘れないようにまとめておこうみたいなﾓﾁﾍﾞで書きました。

鍵の管理にはKeybaseを使っています。

# 手順
## Keybaseのインストール
Keybaseを使って鍵の管理をしたいので, インストールしていなければインストールしておきます。
公式サイトからインストーラーをダウンロードしてインストールしてください。

[The App – Install Windows | Keybase Docs](https://keybase.io/docs/the_app/install_windows)

## Gpg4winのインストール・設定
Windowsでgpgを使うには”Gpg4win”をインストールします。
gpgはWindows向けのバイナリは公式には配布されていませんが, The Gpg4win Initiativeが開発しているWindows向けバイナリを使用します。

インストールにはChocolateyを使いましたが別にGUIインストーラーを使っても良いとは思います。
PowerShellを「管理者として実行」して

```PowerShell
PS> choco install gpg4win
```

でインストール。

[Keybase の鍵で GitHub のコミットに Verified バッジをつける – Qiita](https://qiita.com/7ma7X/items/bcb0246b42d12195c6d0) には”pinentry”という, 秘密鍵のパスフレーズを入力する時に使用するソフトのインストールも一緒にすることになっていますが, Gpg4winにはpinentryが同梱されているので特段のインストール操作は不要です。

下記のコマンドを実行して, gpg-agent.conf にpinentryの場所を教えてあげます。
(`pinentry-basic` の場所が不明だったので, `Get-Command pinentry-basic.exe | Select-Object Name, Source` を実行して探しました。)

```PowerShell
PS> Write-Output "pinentry-program `"C:\Program Files (x86)\GnuPG\bin\pinentry-basic.exe`"" > $env:APPDATA\gnupg\gpg-agent.conf
PS> gpgconf --kill gpg-agent
```

## GPGへのKeybaseの鍵の登録
これは [Keybase の鍵で GitHub のコミットに Verified バッジをつける – Qiita](https://qiita.com/7ma7X/items/bcb0246b42d12195c6d0) に書かれていることと同じことをすればOKです。

```PowerShell
PS> keybase pgp export | gpg --import
PS> keybase pgp export --secret | gpg --allow-secret-key --import
```

上記のコマンドを実行するとまず秘密鍵に設定するパスフレーズを訊かれますので, 適宜入力してください。
<img width="330" alt="秘密鍵設定.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319289/a1cda8a4-50ba-d7e4-d4be-c4e0942ee4ec.png">

こんな感じの表示が出ればOKです。

```
gpg: 鍵****************:"Ray Nanamiya <****@**********>"変更なし

gpg: 鍵4F7AF2B0AF315E05: 秘密鍵をインポートしました
gpg:           処理数の合計: 1
gpg:               変更なし: 1
gpg:       秘密鍵の読み込み: 1
gpg:     秘密鍵のインポート: 1
```

## github.comに公開鍵情報を登録する
公開鍵をコピーするために, [Keybase](https://keybase.io/)の自身のプロフィールページに行き, ここをクリックします。
<img width="876" alt="Keybase.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319289/d67e6499-671d-dda6-047f-ed689f43871a.png">

ここに表示されている文字列をコピーします。
<img width="450" alt="公開鍵コピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319289/147bdc41-36ef-d703-6211-680538a8ab5f.png">

Githubの自身のプロフィールページにアクセスし, 画面右上のSettingsをクリックします。
<img width="165" alt="GIthubSettings.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319289/183099ba-4f7e-e95d-13cb-c4fdf2d7c063.png">

「New GPG Key」をクリックしてコピーしたGPGキーを登録します。
<img width="582" alt="AddNewGpgKey.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319289/bb6269a1-99ad-d5da-9579-f79d04bb3070.png">

## gitに鍵情報等を登録する
これまでの手順で鍵のインポートが終わったので, gitに鍵の情報と鍵を扱うアプリケーションの登録をします。

まずは鍵情報を確認します。

```PowerShell
PS> gpg --list-secret-keys

C:/Users/user_name/AppData/Roaming/gnupg/pubring.kbx
```
```
sec   rsa4096 2019-09-29 [SC] [有効期限: 2035-09-25]
      E474*************************************
uid           [  不明  ] Ray Nanamiya <****@**********>
ssb   rsa4096 2019-09-29 [E] [有効期限: 2035-09-25]
この”E474″から始まるキーをgitに登録します。
```

```PowerShell
PS> git config --global user.signingkey E474*************************************
```

次に下記のコマンドでgpg.exeのパスをgitに登録します。

```PowerShell
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
```

gpg.exeの場所がわからない時は `Get-Command gpg | Select-Object Name, Source` あたりを打って確認してください。

以上で手順は完了です。
GPG鍵を使った署名をしたcommitをするには `git commit -S -m "...` のように `-S` オプションを付加します。