コミットに署名する
「私はこれを記述した、そしてこの仕事の後ろには私が付いている」と。品質の証明として、あなたの署名が入っているべきなのです。[1]
はじめに
コミットに署名しましょう
ゴール
GitHub 上でコミットに Verified のバッジがついた状態を目指します。Verified をクリックすると、次のようにポップアップで署名の状態について確認できます。
前提
Git の初期設定ではコミットに署名はされません。それでもコミットは可能ですが、匿名のコミットになります。また署名には次のように段階があります。
- 名前とメールアドレスが設定されている
- コミットに署名されている
- ホスト上で有効な署名として認識されている
ローカルで署名できるようにする作業と、ホスト側で署名を有効化する作業がそれぞれ必要になります。ローカルは macOS を、ホスト側は GitHub を例に説明します。GitHub はドキュメントが充実しているのでリファレンスを示します。
署名できるようにする
ツールをインストールする
記事執筆時のバージョンです。
xz 問題
xz v5.6.0/5.6.1 にバックドアが仕込まれてしまい、 Homebrew 4.2.14 以前では該当バージョンがインストールされる可能性があります。いつからか調べていないですが、この記事執筆時点では 4.2.14 と記載しており、筆者の環境にも xz 5.6.1 がインストールされてしまっていました。
Homebrew 4.2.15 では xz をダウングレードして 5.4.6 がインストールされるようになっているため、安全です。詳しくは下記で議論されています。
Name | Version | Releases |
---|---|---|
Git | 2.44.0 | https://github.com/git/git/tags |
Homebrew | 4.2.15 | https://github.com/Homebrew/brew/releases |
Gnu Privacy Guard | 2.4.5 | https://github.com/gpg/gnupg/tags |
PINEntry | 1.3.0 | https://github.com/gpg/pinentry/tags |
Git をインストールする
macOS では最初から Git がインストール済みです。
Homebrew をインストールする
次のコマンドでインストールできます。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Gnu Privacy Guard & PINEntry をインストールする
Homebrew をインストールすると brew
コマンドが使えるようになるので、次のコマンドでインストールできます。
brew install gpg pinentry
SSH キーを生成する
GitHub との認証に利用する SSH キーを生成します。
ssh-keygen -t ed25519 -C "your_email@example.com"
名前を設定する
コミットに記録する名前を設定します。
git config --global user.name "Mona Lisa"
メールアドレスを設定する
コミットに記録するメールアドレスを設定します。
git config --global user.email "YOUR_EMAIL"
GPG キーを生成する
gpg --full-gen-key
key_id
は生成結果の sec
の暗号方式の /
以下の文字列です。
git config --global user.signingkey {key_id}
git config --global commit.gpgsign true
実際のコミットが GPG 署名されているか確認する
git log --show-signature -1
gpg: Good signature from ...
と表示されていればOK(... の部分には、鍵作成時に入力した名前とメールアドレスが表示されます)
未署名だと、 gpg:
の部分が表示されません。
ホスト側で署名を有効化する
SSH キーを追加する
ローカルで生成した SSH キーを GitHub に追加します。
メールアドレスを設定する
1つの GitHub アカウントに対して複数のメールアドレスを設定可能です。
参加している Organization からメールアドレスを発行されたら設定してリポジトリごとにメールアドレスを設定しましょう。
GPG キーを追加する
次のコマンドを実行し、ペーストボードにコピーされた内容を GitHub に GPG キーとして追加します。
gpg --armor --export {key_id} | pbcopy
署名を強制する
管理者であれば Rulesets でこの署名を強制することができます。あなたが管理者であれば、ルールの適用を検討してみてください。管理者でない場合は、管理者とルールの適用を相談してみてください。
おわりに
冒頭で引用した「達人プログラマー」からの言葉の続きを引用して終わります。当時この言葉にとても勇気づけられました。
あなたの名前をコード中に見い出すことによって、みんな、それがきっちりと記述、テスト、ドキュメント化されたものであることを確認できるのです。それが本当のプロの仕事です。それが本当のプロによって記述されたものなのです。[1:1]
参考記事
Discussion