GitHubのコミットに署名してVerifiedマークが表示されるようにします。
すでにGitHubを利用したことがあるMacユーザが対象となっています。
目次
新しいGPGキーを生成する
GPG (Gnu Privacy Guard)は、ファイルの署名を検証したり、メールの暗号化・復号化を行うことができるツールです。
PGP(Pretty Good Privacy)というツールをGNUライセンスにしたものがGPGです。
ローカルで生成したGPGの公開キーをGitHubに追加することで、コミットに署名がつくようになります。
1. GPGツールのインストール
$ brew install gpg
2. GPGキーの生成 (対話形式)
[Press enter]
となっているところは、基本的にデフォルトで大丈夫です。Email address
は .gitconfig
で指定しているメールアドレスにする必要があります。
$ gpg --full-gen-key
> Please select what kind of key you want:
> (1) RSA and RSA
> (2) DSA and Elgamal
> (3) DSA (sign only)
> (4) RSA (sign only)
> (9) ECC (sign and encrypt) *default*
> (10) ECC (sign only)
> (14) Existing key from card
> Your selection? [Press enter]
> Please select which elliptic curve you want:
> (1) Curve 25519 *default*
> (4) NIST P-384
> (6) Brainpool P-256
> Your selection? [Press enter]
> Please specify how long the key should be valid.
> 0 = key does not expire
> <n> = key expires in n days
> <n>w = key expires in n weeks
> <n>m = key expires in n months
> <n>y = key expires in n years
> Key is valid for? (0) [Press enter]
> Key does not expire at all
> Is this correct? (y/N) y
> Real name: YOURNAME
> Email address: YOUREMAIL(.gitconfigと同じ)
> Comment: COMMENT(任意)
> You selected this USER-ID:
> "YOURNAME (COMMENT) <YOUREMAIL>"
> Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
最後にパスフレーズを2回入力します。コミット時に使用するので忘れないように!
> ┌──────────────────────────────────────────────────────┐
> │ Please enter the passphrase to │
> │ protect your new key │
> │ │
> │ Passphrase: ________________________________________ │
> │ │
> │ <OK> <Cancel> │
> └──────────────────────────────────────────────────────┘
3. GPGキーIDの確認
GPGのリストを表示して、[GPGキーID]
の部分を確認します。
$ gpg --list-secret-keys --keyid-format=long
> /Users/username/.gnupg/pubring.kbx
> ------------------------------------
> sec ed25519/[GPGキーID] YYYY-MM-DD [SC]
> ****
> uid [ultimate] YOURNAME (COMMENT) <YOUREMAIL>
> ssb cv25519/**** YYYY-MM-DD [E]
4. 公開キーをクリップボードにコピー
GitHubに追加するときに必要なのでコピーしておきます。
$ gpg --armor --export [GPGキーID] | pbcopy
5. 秘密キーのエクスポート(任意)
PCの買い替えなどで、環境が変わる度にGPGキーを生成したくない方はエクスポートしておきましょう。
$ gpg --export-secret-keys [GPG キー ID] > seckey.gpg
以下のコマンドでインポートできます。
$ gpg --import seckey.gpg
GitHubアカウントにGPG公開キーを追加する
1. GitHubの Settings > SSH and GPG keys
にある New GPG key
ボタンをクリック

2. Key
フィールドに、GPG公開キーの内容を貼り付け
GPGキーの生成で、クリップボードにコピーしておいた公開キーを貼り付けます。

3. Add GPG key
をクリック
保存できていれば、以下のように表示されているはずです。

コミットに署名する
.gitconfig
にGPGキーIDを設定します。
[user]
name = YOURNAME
email = YOUREMAIL
signingkey = GPGキーID
あとは、コミット時に S
オプションを付けるだけで署名付きになります。
GPGキー生成時に設定したパスフレーズを入力する必要があります。
$ git commit -S -m '署名付きコミット'
S
オプションがなくても、コミットを常に署名付きにしたい場合は .gitconfig
に以下を追記します。
[commit]
gpgsign = true
コミットしたらエラーが出た!
環境に依るようですが、コミットしたときに以下のようなエラーが出ることがあるそうです(僕は出ました)。
> error: gpg failed to sign the data
> fatal: failed to write commit object
その場合は、.zshrc
などに以下を追記してみてください。
export GPG_TTY=$(tty)
反映を忘れずに。
$ source ~/.zshrc
パスフレーズを毎回入力するのがめんどい!
パスフレーズの入力に pinentry-mac
を利用すれば、Mac標準のKeychainが使えます。
$ brew install pinentry-mac
以下のコマンドを実行して、GPGで利用するPinentryのパスを指定します。
Intel MacとM1 Macではパスが違っているので、パスを確認してから指定するようにします。
$ which pinentry-mac
> /usr/local/bin/pinentry-mac
$ echo "pinentry-program /usr/local/bin/pinentry-mac" > ~/.gnupg/gpg-agent.conf
設定変更を反映させるにはGPGの再起動が必要なため、gpg-agent
を以下のコマンドで終了させておきます。
利用時に自動で起動するため、特にスタートなどはしなくて大丈夫です。
$ gpgconf --kill gpg-agent
適当にコミットしてみましょう。
$ git commit -S -m '署名付きコミット' --allow-empty
パスフレーズ入力が、以下のようなダイアログに変わっているはずです。Save in Keychain
のところをチェックすれば、次回からパスフレーズ入力なしで署名付きコミットができます!

M1 MacでコミットしたらGPGエラーになる!
以下の記事を参照してください。
おわりに
以上で、コミットにVerifiedマークが付いたと思います。
GitHubで確認してみてください!
