だれも聞いていないと思って歌え

dance as if no one’s watching, sing as if no one’s listening, and live everyday as if it were your last.

Windows で git commit に署名する

普段 Mac を使っているが久々に Windows で開発することになり、コミットに署名をしたいので調べた。 GPGキーを作成するのに必要なアプリケーションもそれをインストール方法も色々あるようだが、 winget でパッケージ管理できるらしいので homebrew を使うような感覚でこれを使ってみる。

winget とは

winget コマンド ライン ツールを使用すると、Windows 10 および Windows 11 コンピューター上でアプリケーションを検出、インストール、アップグレード、削除、および構成することができます。 このツールは、Windows パッケージ マネージャー サービスに対するクライアント インターフェイスです。
https://learn.microsoft.com/ja-jp/windows/package-manager/winget/

winget と Gpg4win をインストールする

winget search でまずは検索してみる

winget search gnupg
名前                                                          ID            バージョン ソース
-----------------------------------------------------------------------------------------------
GpgFrontend - OpenPGP/GnuPG crypto, sign and key management … 9NH716MQK2B5  Unknown    msstore
GNU Privacy Guard                                             GnuPG.GnuPG   2.4.5      winget
Gpg4win                                                       GnuPG.Gpg4win 4.3.1      winget

複数あるようだが、GitHub Docsで Gpg4win について言及されていたのでそれをインストールする。

winget install Gpg4win
gpg -h

ヘルプが表示されない場合は shell を開きなおして再度 gpg -h を実行してヘルプが表示されることを確認する。

キーの作成

docs.github.com

GitHub Docsの通りに進めていく

gpg --full-generate-key

目的のキー、目的のキーサイズ、キーの有効期限を聞かれるが Enter を押してすべて規定値にする。 ユーザーIDとメールアドレスの入力を求められるので、GitHubアカウントに登録した検証済みメールアドレスを入力する。最後に、パスフレーズを聞かれるので入力して、完了。

GPGキーのリストを表示する。

gpg --list-secret-keys --keyid-format=long

使用したキーによって表示は変わるが、この場合は ed25519/ の後ろをコピーしてGPGキーを表示する。

[keyboxd]
---------
sec   ed25519/XXXXXXXXXXXXXXXX 2024-03-25 [SC]
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid                 [  究極  ] Your Name <your@email.address>
ssb   cv25519/XXXXXXXXXXXXXXXX 2024-03-25 [E]
gpg --armor --export XXXXXXXXXXXXXXXX

-----BEGIN PGP PUBLIC KEY BLOCK----- で始まり、-----END PGP PUBLIC KEY BLOCK----- で終わる GPG キーをコピーします。

GitHubアカウントにGPGキーを追加する。

git に署名設定を追加する

docs.github.com

すべてのコミットに署名するように設定を追加する

git config --global commit.gpgsign true
git config --global user.signingkey <your key>
git config --global commit.gpgsign true
Get-Command gpg | fl
git config --global gpg.program " C:\Users\your name\AppData\Local\Programs\GnuPG\bin\gpg.exe"
git commit

最後に

困った時に参考にさせてもらいました。

zenn.dev