CodexとGPG署名

普段のGit作業では、コミットにGPG署名を付けるようにしている。
深い理由はない。
GitHubのコミット履歴にVerifiedがあると嬉しいからだ。

git config --global commit.gpgsign true

この設定自体は良いのだが、CodexにGit作業を任せる時に少し困ることがあった。
コミットを作成する段階でGPGのパスフレーズ入力が必要になり、そこで署名に失敗する。
最初は署名キャンセルでコミットしていたが、気持ち悪さを感じたので対策することにした。

pinentry-qtを使う

GPGのパスフレーズ入力にはpinentryが使われる。
CLIで入力するものもあれば、GUIで入力ダイアログを出すものもある。

CodexにGitコマンドを実行させる時、ターミナル上の入力待ちをうまく扱えない場面がある。
そのためGUIの入力ダイアログを出せるpinentry-qtを指定することにした。

Ubuntuであれば、まずpinentry-qtを入れる。

sudo apt install pinentry-qt

その後、~/.gnupg/gpg-agent.confpinentry-programを設定する。

vim ~/.gnupg/gpg-agent.conf

中身は以下のようにする。

pinentry-program /usr/bin/pinentry-qt

設定を反映するため、GPG Agentを再読み込みする。

gpg-connect-agent reloadagent /bye

うまく反映されない場合は、Agentを一度killしてもよい。

gpgconf --kill gpg-agent

この状態でCodexにコミットを作らせると、GPGのパスフレーズ入力がGUIで表示される。
結果として、commit.gpgsignfalseにせず、署名付きコミットを維持したまま作業できる。

補足

WSL環境の場合、GUIを表示できる状態になっている必要がある。
Windows 11のWSLgを使っている場合は、そのまま動くことが多いと思う。

また、GPGの設定は環境差が大きい。
既にgpg-agent.confに別のpinentry-programを書いている場合は、既存設定を上書きする前に確認した方がよい。

以前、VSCodeでGPG署名付きコミットを行うために、Windows側のPinentryを呼び出す設定を書いた。

VSCodeでGPG署名付きコミットを可能にする

今回はCodexからGit作業する時の話なので、Linux側でpinentry-qtを使う方針にしている。