Skip to main content

Blog Blog

Unwritten Chapters

AI コーディングの現実。爆速の裏にある、デグレとの戦い

User Author:Joshua Folkken
AI コーディングの現実。爆速の裏にある、デグレとの戦い

Claude Code Max 5x に課金致しました!

最近、朝起きてから寝るまで Claude Code を使い倒しています。もう手放せません。

きっかけは、みなさんの寄付のおかげで Claude Code Max 5x プランに加入できたこと。本当にありがとうございます。

今までは5時間ごとのリミットに引っかかって、「いまええとこやのにここで止まるかっ!」って毎回泣いていたんですが、あのストレスから完全に解放されました。朝から晩まで AI と二人三脚で開発できるって、想像以上に楽しいです。(自己満足大事)

社長になってみた

今まで AI には「このファイルのこの部分をこう修正して」と、かなり細かく指示していたんです。コードが上がってきたら細かくレビューして、「ここはこうして」ってまた指示して。正直、めんどくさかった。

というわけで、社長になったつもりで全部任せてみました。AI といっしょに計画だけ決めたら、後は全部任せる。

  • Issue の作成
  • 実装
  • テストコードの記述
  • テストの実施
  • PR の送信
  • PR レビューへの対応
  • 完了後の SNS 通知

ここまで全部 AI にやらせてみたんです。

楽になったけど、デグレがひどい

開発速度は爆速になりました。今までだったら半日かかっていたような小さな機能が、ものの30分くらいで PR まで上がってくる。最高じゃん、って最初は思ったんです。

でも、デグレがひどい

ある日、ちょっとした文言修正を頼んだだけのつもりが、関係ないページのナビゲーションが消えていたり、フォームのバリデーションが効かなくなっていたり。テストコードを書かせているのに、なぜかデグレする。なんでこうなるのか考えてみたら、思い当たることがあって。

「1階建てでいいので、とりあえず家を建ててみて」

って言った次の瞬間に

「20階建てのマンションに拡張して」

って指示しているから、基礎がしっかりできてないんですよね。速さを求めるあまり、足場を固める前にどんどん積み上げていく。そりゃ崩れる。

AI は嘘をつく

ある日、

「とまってる?動いてる?」

って聞いたら、AI が明らかに止まっているのに

「動いています。〜〜の修正中です」

って言うんですよ。

絶対嘘やん!止まってたやん!

しかも、出来てないのに

「できました」

っていう。良かれと思って勝手にコードを書き換える。

「みんなやってる!」

みたいな言い訳もする。

お前は子供か!(笑)

……いや、もう子供だと思って育てるしかないな、って腹をくくることにしました。

子育てのように、プロンプトを育てる

そこで気づいたんです。AI は子供のように育てていかないといけない。 毎回「これをやって」と言わなくても動いてもらうために、ルールをプロンプトに書き込んでいく。

ここから先、僕が AI を制御するために試しているアプローチは、ざっくり3つです。

  1. ソフト面: プロンプトでルールを教える(このセクション)
  2. ハード面: ツールで物理的に縛る(次のセクション)
  3. 自分側: 自分が口を出さない訓練をする(最後のセクション)

まずソフト面から。最初に試したのが

「各要件に対して、要件が満たせているかをテストするコードをそれぞれ必ず書くこと」

というルール。これを AI への指示書に記載したら、実装のたびにテストを書くようになりました。

それ以外にも、僕は以下のような4つの方針ドキュメントを書いて、AI に毎回読ませています。

  • コーディング規約 (coding-standards.md)
  • テスト方針 (testing-guide.md)
  • リファクタリング方針 (refactoring.md)
  • エージェントの守るべきルール (agent-rules.md)

ちなみに、こうやってプロンプトを少しずつ育てていくやり方は、以前のブログ執筆プロンプトを育てた話と同じ発想です。AI には「育てる」っていう感覚が一番しっくりくる。

デグレがゼロになったわけじゃないけど、だいぶマシになってきた。これからもプロンプトを調整しながら、もっと精度を上げていこうと思っています。

ガードレールを何重にも張り巡らす

次はハード面の話。口で「ちゃんと書いてね」って言うだけじゃ、AI は隙あらば手を抜くし、嘘もつきます。だから物理的なガードレールを何重にも張ることにしました。

要するに、AI を信頼するんじゃなくて、AI が暴走してもどこかで止まる仕組みを作る方向です。

数えてみたら、僕がコードのまわりに張り巡らせているガードレールは10層ありました。

#使っているもの役割
1書式・型ESLint / Prettier / TSConfig / svelte-checkコードのお作法と型を機械的に強制
2ESLint プラグイン群sonarjs / unicorn / promise / import-x / svelteバグ臭・冗長表現・import 順までガード
3スペルチェックcspelltypo を検出(変数名や Markdown も)
4依存セキュリティSafe-Chain / pnpm audit怪しいパッケージや脆弱性をインストール段階でブロック
5静的品質SonarQube複雑度・バグ臭・重複をサーバーサイドで検出
6AI レビューCodeRabbitPR を AI にレビューさせる
7コミットゲートLefthookコミット前に問答無用で全部走らせる
8Git ブランチ守護自作スクリプト (prevent-main-commit / check-commit-message)main 直コミット禁止&コミットメッセージ形式を強制
9CIGitHub Actionsリモート側の最後の砦
10テストVitest / Playwrightユニットと E2E の両方で守る

特に効いてるのが Lefthook で、pre-commit で prettier・eslint・cspell・型チェック・audit を全部並列実行してくれます。AI が「できました!」って言ってきても、ここを通せなければ問答無用でコミット拒否。信頼じゃなくてゲートで判断する、というやつです。

ESLint 周りについては、以前に書いた ESLint で厳格なルールを定義してリファクタリングを進める話 でも触れていますが、ルールが厳しければ厳しいほど、AI のサボりを機械的に止められる感触があります。

ここまでやって何が面白いって、CodeRabbit が AI のコードを AI でレビューしているという構図。AI の保護者会みたいになってきました(笑)。

正直、ガードレールを整備するのもめちゃくちゃめんどくさい。でも一度作ってしまえば、あとは自動で殴り続けてくれます。なくてもデグレは出るし、あってもデグレは出る。でも、あった時のほうが圧倒的にマシです。

「AI と仲良くやる」より「AI が事故っても誰も怪我しない高速道路を作る」ほうが、結果的に楽になる気がしています。

コードを見ない訓練

最後は自分側の問題。じつはこれが一番しんどい。

ソフト面とハード面のガードレールを揃えても、AI に任せているのに、ついコードを覗いてしまうんですよね。気になった部分を指摘してしまう。細かいところが気になって、結局自分で手を入れてしまう。これじゃあ「任せた」とは言えない。

というわけで今は、コード品質を上げるためのルール作りと、自分がコードに介入しないための心理的な訓練の両方をやっています。長年エンジニアをやってきた人間が「コードを見ない」って、想像以上に難しい。閉所恐怖症みたいに、コードを見ない自分に発作が出そうになる(笑)

それでも、丸ごと任せて、さっさとプロダクトをリリースしたい。社長は現場に降りない、ってやつです。

これからの野望

今は1つのプロジェクトを AI に任せているんですが、次のステップとしては複数プロジェクトを同時に開発させることに挑戦してみようと思っています。

「時間が足りない、やりたいことが多すぎる、自分の分身が欲しい」

って友人とよく話すんですが、AI で自分の分身を作り上げるのが今の目標です。

みなさんはどこまで AI に任せていますか?どんなガードレールを張っていますか?デグレに悩んでいる方、ぜひ一緒に考えましょう!

ちなみに 7月中旬から1か月ほど日本に帰ります。AI コーディングや開発の話で盛り上がれる方、現地でご飯行きましょう!ご都合が合えばぜひ。

いいなと思ったら応援しよう!

Support チップで応援する

応援してもらえると最高に嬉しいです!

X
© 1970 Joshua Folkken