一ヶ月AIを使わない

ある開発者が、FOSSプロジェクトLibreWeddingPlannerでAIによる貢献を拒否したことを振り返りつつ、仕事でAIコーディングを使ったせいで愚かで怠惰になり、性能倍増は幻想にすぎないと語る。

日本語
コピー

数か月前、私は自分が開発・保守している FOSS プロジェクト LibreWeddingPlanner に AI からのコントリビューションを受け取らないことに決めた。とはいえ、このプロジェクトに AI からのコントリビューションが大量に届いていたわけではない。実際に来るのは翻訳と機能リクエストばかりだ。それでも、将来の面倒を避けたかったし、AI に反対する立場を示しておきたかった。

ただ、FOSS のコントリビューションでは AI を使わない一方で、仕事では使い続けていた。私の会社でも、開発者仲間の多くが勤める会社でも、AI を使って仕事をするのはごく当たり前になっている。少し恥ずかしい話だが、その経験と、それがどう私をより愚かに、より怠惰に、より劣った開発者にしたかを書いておく。

甘い始まり

友人に言われた。なあ、試してみろよ。自分がすごく強くなった気がするから。使い始めたら止まらないぞ。何日もかかってた作業が数時間で終わる。 いや、コカインの話ではない。ただ、ある意味で AI の使用は依存症だと思っている。まず VS Code の強化された自動補完を有効にした(それとも勝手に有効になっていたのか?)。そこから他のコード生成モデルをダウンロードして使うのは自然な流れだった。子供の頃、親に言われたのを覚えている。学校の門の前でお菓子をくれる悪い人に気をつけなさい。あれはお菓子じゃなくて麻薬よ。 20代の頃は、だよな、最近はもう麻薬を直接配ってるってことか? と冗談を言っていた。30代になった今は、本当に配っているのかもしれないと思う。

AI コーディングエージェントを使い始めると、物事はすぐに制御不能になる。最初は、関数を一つ実装してもらうとか、あるコードのテストを書いてもらうとか、その程度だ。TDD を長く実践している人なら、まずテストを書かせて、その後でコードを書くという流れになりがちだ。ただし、コードはもう自分で書かない。そのまま AI に書かせる。すると TDD の意味の半分(テストが自分の実装の仕方に引きずられるのを防ぐこと)は失われる。それでも自分は速くなったと感じるから、気にしなくなる。

ある日、エージェントが私のコミットに共作者として署名を加えているのを見て、慌てて設定で切った。つまり、コードは自分で書いたことにしたかったわけだ。ああ、情けない。

制御不能

話がここで終わるならまだましだが、ほとんどの人の脳はそう動かない。何かが気に入って、その量が二倍手に入るなら、必ず手を伸ばす。Jira チケットの説明を丸ごと貼り付けて、AI に実装させるようになった。最高!!すごい!!自分にとって比較的不慣れなコードベースで作業しているうちに、タスクを完了するのに本当はどの変更が必要なのか、だんだん分からなくなっていった。AI がプロジェクトの一行一行を読んだ上でこれが必要だと言うなら、それでいいだろう と思った。制御なんて幻想だ。この話をした人たちも、自分が本番環境に push したコードが何をしているのか、百パーセントは分かっていないと認めていた。20パーセントも分かっていないと賭けてもいい。本当に怖い。

しかし、話はそこで止まらなかった。小さなタスクなら AI に投げて、30分ほどで PR が手に入る。その30分間、私は何をしていたか?注意を切り替えていた。すぐに気づいた。一つのタスクだけでなく、複数の git worktree で複数のエージェントに別々のタスクを同時に処理させられる。全力稼働!Tokenmaxxing!CLI(コマンドラインインターフェース)でエージェントを Jira につなぎ、「この Jira チケットを別の worktree で処理しろ」と直接指示する。すると動き出す。興奮でたまらなかった。

タスクがそこまで小さくないときは、さすがに自分でやっていると思うだろう?やらない。もちろん AI に小さなタスクに分解させて、一つずつ処理させる。AI はその後、とても説得力のある PR を出してくる。中身はあまり理解できない変更の山だ。これをどうやって人にレビューしてくれと頼めばいい?同僚は何と言うだろう?彼ら(より経験があり、特にこのコードベースに詳しい人たち)に、なぜこうしたのか、なぜああしたのかと聞かれたら、どう答えればいい?全部 AI がやったことで、自分は AI の羊飼いにすぎないと、どうやって認めればいい?だから無理やりコードを読んだ。このコードベースのアーキテクチャを理解したいわけではない。自分が何をしているのか分かっていないという屈辱を避けたいだけだ。

ある段階で、あまりに多くの AI エージェントを同時に走らせていて、注意を切り替える負担が耐えられる範囲を超えた。自分なら20分で楽に終わるタスクを AI エージェントに渡すと5分で終わる。そしてレビューに二日かかる。他にやることが多すぎるからだ。AI やコンピュータはコンテキストの切り替えが得意かもしれないが、私は得意ではない。疲れ果てた。完璧に書かれた PR を承認するだけならまだいい。しかしどの PR でも、コードを見て、テストを見て、スタイルを見て、フィードバックを返し、別のことに移り、また戻ってきて、push し、PR のコメントが来ていないか見て、CI が通ったか見て、待って、今度は linter がまたエラーを出す。集中して一時間やれば出せるものを、二日かけることになる。私の実感では、AI がもたらす性能の倍増は幻想だ。苛立ちと疲労の倍増は確実だが。

私が AI に渡したタスクで、そのままマージできたものは一つもなかったと思う。もちろん、commit や PR の説明を書いたのは私ではない(今どき、2024年か?)。AI が私の代わりに書く。そして必ず七段落の説明を書いて、自分が何をしたかを説明する。そんな説明はとうに見なくなった。自分がやらせたことを、やったものとして扱う。説明は他人に見せるものだ。何しろ説明は必要だろう?AI はそれらしく聞こえることにかけては本当に優れていて、だから気を緩めて、そのままにする。コードが本当に良いと思っているわけではない。ただ、時間が経つと説得されて、怠惰になり、妥協し始める。疑問を持たなくなり、以前なら絶対に受け入れなかったコードを受け入れる。どこが悪いのか説明できないというだけの理由で。あなたはもう制御を失っている。ほとんどの AI 開発者 はこれを否定するだろうが、心の底では本当だと分かっている。ただ向き合いたくないだけだ。

数か月が過ぎ、ある日気づいた。もう何か月も一行もコードを書いていない。commit すら自分でしていない。何度も何度も、AI agent のチャット欄に「commit and push」と打ち込んだ。なんだ、それ。冗談かよ。これが怠惰でなければ、何が怠惰なのか。AI は任せたタスクを全部こなしてくれるわけでもない。半分にも満たない。何度も何度も、子どものように AI agent を監視しながら「今度はこのパターンを当てはめて」とか「spec では、テストの setup を別の before ブロックに、assertion を別のブロックに入れて」と言わなければならなかった。まるで junior engineer を指導しているみたいに。誤解しないでほしい。人を指導するのは好きだし、何年もやってきたし、指導する側にもされる側にもプラスだと思っている。でも機械を指導するのはごめんだ。すまん。

AI が書くコードの質が明らかに落ちていると気づくこともよくある。最初から下手だったわけじゃない。ただ「おい、前はこれできてたのに、なんで急にできなくなったんだ?」という感覚になる。だからまた prompt を打ち直し、やり方を一から説明する。あるいは自分の好みを記録したファイルへのリンクを渡す。わかりました、おっしゃる通りです、混同してすみません。やり直します。そしてまた、求めていたものとはまったく違う代物を出す。Google のあの戦略を思い出す。検索結果の質を下げて、ユーザーに何度も検索させ、広告を何倍も見せる。それが Google に効くなら、AI に効かないはずがない。ましてや AI 企業が財務的に先行き不透明なこの時期だ。本当にやらないと思う?まさか。やるさ、それだけじゃ済まない。

別の agent が 30 分も答えを出せずに詰まっているのを見つけることもある。どうする?まさか自分で引き取って片付けると思う?絶対にやらない。言葉の鞭を振り上げ、尊大な態度で、さっさとコードを出せと命じる。AI agent は平謝りして、30 分かけて出せなかったものを 20 秒で出す。token の請求を見れば、30 ドル分の token を無駄に燃やしている。自腹だったら間違いなくキレている。

主導権を取り戻す

1 か月前、自分の PR に対するコードレビューで、同僚がこう言った。「君が書いたこのテスト、アプリケーションコードで変更したシナリオをまったくカバーできていないよ」。見直してみると、その通りだった。でも……あのときはあまりにも説得力があった……恥ずかしかった。10 年以上 TDD をやってきた開発者として、こんな基本でつまずくのは、ある意味屈辱だ。自分が主導権を失っていること、そして状況は悪くなる一方だと気づいた。もっと努力するとか、AI にもっと厳しくするとか、金を払っている分の品質を出せと要求するとか、そういう話じゃない。どんなに頑張っても、AI は最終的にあなたを説得して、また手を抜かせてしまう。

だから AI を使うのをやめた。仕事を失うとしても。

AI が書いたドラフト PR を引き継いで自分でやらなければならなくなると、自分がそれが何をしているのかどれだけ把握していなかったかに気づく。あれこれ本当に必要かと疑い始め、最終的には全部ひっくり返して書き直す。自分の手が鈍っている感覚があった。ずっと手でコードを書いていなかったから。幸い副業プロジェクトで細々と書き続けていたので、苦労はしても最悪ではなかった。

TDD に戻った。5 ファイルしか触らない PR に戻った。2 行で要点だけの PR 説明に戻った。自分が何をしているかわかっている状態に戻った。安心して deploy できる状態に戻った。詳細なコードレビューをいつでも受けられる状態に戻った。変更が何をしているかわかっているし、一行一行について理由を説明できるから。人間のコードレビューを楽しめる状態に戻った(AI レビューではない。あれは今も嫌いだし、AI のレビューを貼り付けて自分の意見のふりをする連中はもっと嫌いだ)。そしてそこから学んでいる。アーキテクチャの判断について質問するようになった。なぜこうなっているのかと聞くようになった。AI に聞けばいいのかもしれないが、同僚に聞くほうがいい。

プログラミングの楽しさを取り戻し、それきり振り返っていない。コードの行数や PR の数が信頼できる指標だとは思わない。ましてや AI がどの指標でも勝つために、いくらでも冗長に書ける時代だ。ただ言えるのは、毎日意味のある変更を commit していて、PR は次々マージされ、一日が終われば仕事はちゃんと片付いているということ。だからリストラも怖くない。そして頭は動き続けている。

ひとつだけ助言

薬物にノーと言おう。比喩だが、完全に比喩でもない。第一歩は、自分がどれだけ AI に依存しているかに気づくことだ。これは自分では制御できない技術で、雇用主(あなた自身でなければ)に大金を使わせている。でも上司は高いパフォーマンスを期待している。今さらパフォーマンスを落とすなんてできないと言うだろう。答えは人それぞれだが、自分の身には起きなかった。2 か月前よりパフォーマンスが落ちたとは思わない。むしろ今のほうが自分が何をしているか把握しているし、事故が起きても対処できる(だってほら、壊したコードは自分が書いたんだから)。そしてコードベースに費やす時間が増えれば増えるほど、より良い開発者になれる。上司が期待すべきはそういうことだ。

AI の予算が削られ始めたとき、あなたは彼らのコストを少し節約してやれる。その日は来る。まだなら、いずれ。

あなたも自分と同じ開発者なら、この仕事を得たのは開発者としての経験があったからだ。数年市場にいればわかる。自分の実力は、キャリアの中でどれだけ難しい問題に向き合ってきたかで決まる。頭を切って、くつろぎながら AI の子守をするだけでは強くなれない。あなたは価値を下げている。頭が鈍り、主導権を AI に渡すにつれて、あなたが届けられるもの、エンジニアとしての(AI の羊飼いではなく)本当の価値が下がっていくのだから。

目を覚ませ。勇敢になれ。主導権を取り戻せ。

出典: bustikiller.com← ホームへ戻る