主に自分用メモです。
前提
- 1Passwordを使用していること
- 1Password CLI (
op) は設定済み
GitのコミットにGPG鍵で署名できるようにする
まずはコミットに全てGPG鍵で署名できるようにします。
インストール
gpgをインストールする
$ brew install gpg
GPG鍵の生成
GPG鍵を生成します。GitHubにGPG公開鍵を登録する場合はメールアドレスはGitHubで使用しているものにします。
$ gpg --full-generate-key
パスフレーズは1Passwordに登録しておきます(今回は GPG Passphrase という名前で登録しました)。
生成したGPG鍵を確認します。
$ gpg --list-secret-keys --keyid-format=long --with-keygrip
[keyboxd]
---------
sec ed25519/0BDFB4ABAD9F9016 2025-05-03 [SC] [expires: 2026-05-03]
3596D05DC0F13FE5810AC1650BDFB4ABAD9F9016
Keygrip = 091937796BDCEEFB9E83ACEB34B3C979A673F0E8
uid [ultimate] k1LoW <k1lowxb@gmail.com>
ssb cv25519/E251E71C36550FA0 2025-05-03 [E] [expires: 2026-05-03]
Keygrip = ED10131ED9958573A3F5AC16415EFEB5C87A70AF
$
Key ID 0BDFB4ABAD9F9016 ( ed25519/0BDFB4ABAD9F9016 の後半 )とKeygrip 091937796BDCEEFB9E83ACEB34B3C979A673F0E8 を後で使用します。
Gitの署名の設定とコミット時の自動署名
生成したGPG鍵でコミット時に自動で署名するようにします
$ git config --global user.signingkey 0BDFB4ABAD9F9016 # Key ID でGPG鍵を指定 $ git config --global commit.gpgsign true # コミット時に自動で署名する
パスフレーズの入力を1Password経由にする
gpg-preset-passphrase の設定をする
gpg-preset-passphrase を使ってパスフレーズの入力を1日(86400秒)に1回にします。パスフレーズのキャッシュですね。
$ cat << EOF >> ~/.gnupg/gpg-agent.conf allow-preset-passphrase default-cache-ttl 86400 max-cache-ttl 86400 EOF $ gpg-connect-agent reloadagent /bye # gpg-agentのリロード
1Passwordから秘密参照をコピーする
1Passwordからパスフレーズの秘密参照をコピーします。 op://Vault/Name/field みたいなやつです。

1Password CLI経由でパスフレーズの入力をする関数を作成する
Keygrip( 091937796BDCEEFB9E83ACEB34B3C979A673F0E8 )と秘密参照( op://Personal/GPG passphrase/password )を使って1Password CLI経由でパスフレーズの入力をする関数を作成します
function preset_git_sign_passphrase () { gpg-connect-agent /bye &> /dev/null eval $(op signin) env GPG_PASSPHRASE="op://Personal/GPG passphrase/password" op run --no-masking -- printenv GPG_PASSPHRASE | /opt/homebrew/opt/gnupg/libexec/gpg-preset-passphrase --preset 091937796BDCEEFB9E83ACEB34B3C979A673F0E8 }
これを .zshrc などに登録しておいて preset_git_sign_passphrase を実行することで1日パスフレーズをキャッシュします。
おまけ: GitHubへGPG公開鍵の登録
Key IDを指定してexportした公開鍵をGitHubに登録すれば、GitHub側でコミットの署名検証をしてくれます(コミットログに Verified のアレ)。
$gpg --armor --export 0BDFB4ABAD9F9016 -----BEGIN PGP PUBLIC KEY BLOCK----- [...]
参考
Using 1password, GPG and git for seamless commits signing - Baptiste Maingret’s Homepage