git blameに私の名前が出るが、私は書いていない

先日、あるバグの調査をしていた。

怪しい箇所を特定し、いつものようにgit blameを叩く。

この行を書いたのは、誰か。

出てきた名前は、私だった。

ここまでは、よくある話である。

30年やっていれば、過去の自分に裏切られることには慣れている。

問題は、その先だった。

その行を書いた記憶が、まったくないのである。

コミットの日付を見て、思い出した。

あの日、この機能はAIに書かせたのだ。

私はプロンプトを書き、出てきたコードを確認して、コミットした。

つまりgit blameに刻まれた「私」は、書いた人ではない。

採用した人である。

この小さな違和感が、考えるほど深い話だったので、今日はそれを書いてみたい。

git blameは「歴史書」だった

そもそもgit blameとは、何のためにあるのか。

犯人捜しの道具ではない。

本来は、歴史書である。

この行は、いつ、誰が、どのコミットで書いたのか。

それが分かれば、「なぜこう書いたのか」を、書いた本人に聞きに行ける。

「この条件分岐、なんでこうなってるんですか」

「ああ、それはね。あのとき本番でこういう障害があって……」

この「ああ、それはね」こそが、blameの本当の価値だった。

コードには「何をしているか」しか書いていない。

「なぜ」は、書いた人の頭の中にある。

blameは、その頭の中への案内板だったのである。

「書いたときの気持ち」を、誰も持っていない

AIとの開発は、この案内板を壊しつつある。

blameを辿って、私に聞きに来た人がいたとしよう。

「この実装、なんでこの方式なんですか」

私は答えられるだろうか。

プロンプトに書いた要件と、レビューで確認したポイントなら、思い出せる。

でも、この方式を選んだ理由は、実はAIの中にあった判断である。

私はそれを「悪くない」と思って通した。

通した理由は説明できるが、選んだ理由は、厳密には私のものではない。

つまりAI時代のコードには、「書いたときの気持ち」を持っている人が、どこにもいないのである。

AI自身も、覚えていない。

あのときの会話のコンテキストは、セッションが終われば消えている。

歴史書に名前は残るのに、歴史の当事者がいない。

妙な時代になったものである。

それでも、責任の所在は明確である

では、AIが書いたコードのバグは、誰の責任なのか。

ここは、迷う余地がないと思っている。

採用した人間の責任である。

つまり、私だ。

AIは提案しただけである。

それを読み、判断し、自分の名前でコミットしたのは私である。

出版の世界で言えば、私は著者ではなく、編集長になったのだ。

雑誌の記事を書いたのがライターでも、誌面の責任は編集長が取る。

「ライターが書いたので私は知りません」という編集長は、存在を許されない。

コミットボタンは、いまや署名である。

「私はこのコードを理解し、これでよいと判断しました」という署名。

だから、理解していないコードをコミットしてはいけない。

当たり前のことだが、AIの出力が優秀になるほど、この当たり前は誘惑にさらされる。

読まずに通しても、だいたい動いてしまうからである。

だいたい動くものを読まずに通し続けた先に何があるかは、いずれ障害対応の夜に教えてもらうことになる。

「なぜ」を、コードの外に残す

この問題への、私なりの実務的な対応は一つである。

コミットメッセージに、「なぜ」を書くようになった。

昔のコミットメッセージは、「何をしたか」の記録だった。

「〇〇機能を追加」

それで十分だった。

詳細は、書いた本人の頭の中にあったから。

いまは、頭の中に何もない。

だから、AIに何を要求したのか。

出てきた案のうち、なぜこれを採用したのか。

何を確認して通したのか。

その要点を、コミットに残す。

面倒に聞こえるが、実は面倒ではない。

要約も、AIにやらせればいいのである。

このあたり、AIが空けた穴をAIで塞いでいる感じがあって、我ながらおかしい。

以前、引き継ぎ調査は考古学だという記事を書いた。

コードには「何」しか残らず、「なぜ」を推理するのが考古学だ、と。

AI時代は、放っておくと、この考古学の難易度が上がる。

遺跡を作った当事者すら、最初からいないのだから。

だからこそ、せめて石碑くらいは、自分の手で建てておきたいのである。

人間の行は、希少になっていく

最近のプロジェクトで、ふと統計を眺めて気づいたことがある。

リポジトリの中で、人間が直接書いた行の割合が、どんどん減っている。

私のコードも、いまや大半がAI経由である。

この傾向は、もう戻らないだろう。

近い将来、git blameで人間の名前が「直接書いた行」を指すことは、希少になる。

blameに残る人間の名前は、全部「採用した人」の意味になる。

それでいいのだと思う。

ただ、30年後の誰かが——それは人間かもしれないし、AIかもしれないが——私のリポジトリを発掘したとき、少しだけ混乱するかもしれない。

この時代の「author」は、書いた人なのか、選んだ人なのか、と。

未来の考古学者のために、ここに記録しておく。

2027年、私たちはコードを書くのをやめ始めた。

その代わり、コードを選び、コードに責任を持つようになった。

authorの意味は変わった。

でも、blameの重みは、一行も変わっていない。