WindowsでGitコミットする際にPGP署名をできるようにしたい。
はじめに
2020年に入り、私はWindowsでgit操作をする場面が激増しました。 macOSでGitコミットする際にPGPで署名していましたので、同様のことをWindowsでも実施できるようにしました。
そもそも、PGPで署名をする動機は署名をするとGitHubが下図の赤枠のように
Verifiedと表示され私自身がなんとなく嬉しいからです。

そこで、この記事ではいくつかあるWindows向けGitクライアントのうち、利用者が多いであろうSourceTreeで Gitコミット時にPGP署名をする方法についてご紹介します。
筆者の環境は以下の通りです。
- Windows 10 Pro v1909 (リリースノート)
- SourceTree v3.3.9 (リリースノート)
- Gpg4win v3.1.13 (リリースノート)
それでは、Gitコミット時にPGP署名をするための設定をしていきます。
SourceTreeをインストールする
まず、SourceTreeを入手してインストールします。
Windows版SourceTreeは以下の場所にインストールされます。
|
|
SourceTreeはGitを内臓しており、オプション画面で使用するGitのパスを明記しています。

下記のパスのGitを使っていることがわかります。
|
|
上位フォルダに関心を寄せて以下のフォルダに移ります。
|
|
こちらのフォルダを見ると、 git-bash.exe や mingw32 フォルダを確認できます。

GPGはバンドルされているのでしょうか。MINGW32があるので /usr/bin/gpg にある可能性があります。
確認のためエクスプローラーで検索をかけた結果が下図です。

上図の検索結果からGPGが /usr/bin/gpg にあることがわかります。
SourceTreeのGit BashとGPGのバージョンを確認する
ご存知の通り、SourceTreeのツールバーにある ターミナル アイコンをクリックするとGit Bashを起動できます。

これはSourceTreeのオプション画面で Git Bashをデフォルトターミナルとして使用 が設定として有効になっているからです。

そのGit Bashは下記の場所にあります。
|
|
Git BashでGPGのバージョンを確認します。
|
|
以下でGPGのリリースノートを確認できます。
どうやら、GPGの最新バージョンは2.2.23で、先月にCVEの対応を入れたようです。
GnuPG version 2.2.23 has been released today. This version fixes a critical security bug in 2.2.21 and 2.2.22 (CVE-2020-25125).
Please follow the instructions from the announcement mail and update affected installations. See also our bug entry #5050.
GPG v2.2.20をそのまま使うのは少々不安が残りますので、Gpg4winを使います。
Gpg4winをインストールする
Gpg4winを下記で入手してインストールします。
インストール時にPGPキーの生成やインポートのGUIを提供する Kleopatra を選択します。 GPA はお好みで。

Gpg4winは以下にGPGをインストールします。
|
|
PGPキーは Kleopatra でインポートできるのですが、お手元にPGPキーがない場合は次節のエクスポート方法を参考にしてください。
PGPキーをエクスポートする
まずはmacOSで使っているPGPキー (秘密鍵と公開鍵) をエクスポートしましょう。 すでにファイルとしてキーをお持ちの場合はそちらをお使いいただければ結構です。
エクスポートは下記のコマンドで可能です。
|
|
PGPキーをKleopatraでインポートする
Kleopatraを起動してインポートボタンをクリックしてインポートしたいPGPキーを選択します。

インポートしたPGPキーは以下で管理されます。
|
|
SourceTreeのGit BashでGpg4winのGPGを使う設定にする
それでは、SourceTreeの Git Bash でGpg4winのGPGのバージョンを確認します。
|
|
Git BashでGitの設定値を変更します。
|
|
SourceTreeでコミット時にPGP署名をする
コミットします。PGPキーにパスフレーズを設定している場合、コミット処理中に入力を求められます。

GitHubで結果をみてみます。

上図の赤枠部分を見るとPGP署名されていることがわかります。
まとめ
この記事ではGitコミット時にPGP署名をする方法、PGPキーのエクスポートとインポートについてご紹介しました。