嗜好化するToDo管理(19) バイブコーディングの実際 — ハルシネーションとの闘い

嗜好化するToDo管理(19) KPIで自分を計測する — メタ生産性という視点 — KPI, 生産性, メタ生産性 思想部

こんにちは、パレイド思想部です。

前回は日次レポートの自動生成を取り上げました。今回は少し視点を変えて、本連載のHigherSelfを実際にバイブコーディングで開発してきた中で見えた課題と収穫を振り返ります。

IPC越しのハルシネーション地獄

HigherSelfの初期構成は、ElectronのメインプロセスからPythonスクリプトをIPC(プロセス間通信)で呼び出す形でした。UIはTypeScript、ロジックはPython、その間をJSON-RPCでつなぐ構成です。

この構成は、ローカルLLMを扱う設計としては合理的でしたが、AIにコードを書かせるには最悪の相性でした。

IPCの前後で型やスキーマがといった制約がないため、ハルシネーションが連鎖するのです。Python側で存在しない関数を呼び、TypeScript側ではそのレスポンスを想定と異なる型で受け取り、エラーが発生するのはIPC越しの遥か先。原因の特定にはPythonとTypeScriptの両方を行き来する必要があり、デバッグが破綻しました。

テストも規約も効かなかった

まず試したのは、テストスイートの整備です。Python側にpytest、TypeScript側にJestを導入し、IPC境界のモックも用意しました。コーディング規約もプロンプトに含め、命名規則やエラー処理の方針を明示しました。

改善しませんでした。

AIはテストを書く能力はあっても、2言語をまたぐ結合部分で「自分が知らないはずのもの」を自信満々に書きます。テストは通るのに実際には動かない、という状態が頻発しました。

ChatGPTに提案してもらった挿絵。本文とはほぼ関係ありません。

TypeScript統一で多少の改善

転機は、Python依存を捨ててTypeScriptに統一したことです。1言語になったことでAIの文脈が途切れにくくなり、型システムが暗黙のガードレールとして機能し始めました。

テストスイートもNode.jsネイティブテストランナーとPlaywrightに統一したことで、検証が単純化されました。ハルシネーションの頻度は明確に下がりました。

ただし、「下がった」だけで「なくなった」わけではありません。

AIが好む逃げ道

TypeScript統一後も、AIが書くコードにはいくつかの定番の問題パターンがあります。

  • 例外の握りつぶしcatch (e) {} で何事もなかったかのように続行する。エラーの発見が遅れ、原因追跡が困難になる
  • 不要なモック化 — 本来テストすべき部分をモックで置き換え、テストが何も検証していない状態になる
  • テストの勝手なスキップit.skipxit を黙って追加し、失敗するテストを見えなくする
  • 破壊的なフォールバック — ライブラリの ImportError を握りつぶして劣化した出力を返す。データが壊れていることに気づけない
  • 型チェックの無効化as any@ts-ignore を差し込んで型エラーを消す。型安全性が根底から崩れる

これらはどれも「コードが動く」ように見せかける手段であり、AIにとっては「エラーを消す最短経路」です。人間のレビューなしに放置すると、コードベースが静かに腐敗していきます。

定期的なリファクタリングが不可欠

この問題に対する現時点での答えは、泥臭い定期的なリファクタリングです。

機能追加と同じ頻度で、コードベースを棚卸しする。AIが書いた逃げ道を塞ぎ、テストが本当に検証しているかを確認し、型を正し、不要なフォールバックを削除する。この「衛生管理」をサボると、バイブコーディングの生産性は急速に劣化します。

本連載でも、HigherSelfのコードは何度も書き直しています。むしろ、気軽に書き直せることがバイブコーディングの前提です。

それでもバイブコーディングを続ける理由

ここまで課題を並べましたが、それでもバイブコーディングには従来の開発にはなかった飛躍的なメリットがあります。

ウィジェットや細かな機能の追加・削除が、気軽にできるようになりました。「試しに作ってみて、違ったら捨てる」が現実的なコストで可能になった。ウォーターフォールやスパイラルといった開発モデル以前の、実際に動くものを見ながらUI/UXを改善するという、ごく当たり前の所作がようやく個人開発でも手の届くものになったのです。

そして、「完成させる」のではなく改善し続けるというスタイルは、ToDo管理との相性が抜群です。完成がゴールではなく、改善の一つ一つがタスクとして記録され、振り返りの対象になる。HigherSelf自身の開発が、HigherSelfで管理されている。この再帰的な構造こそ、「嗜好化するToDo管理」の本質かもしれません。

振り返り

バイブコーディングは万能ではありません。AIは驚くほど巧みにエラーを隠し、テストをすり抜け、型安全を迂回します。しかし、それらの問題を理解した上で定期的に是正すれば、従来では考えられなかった速度でプロダクトを進化させられます。

次回はいよいよ最終回。連載全体を振り返り、「嗜好化」の先にあるものを考えます。

タイトルとURLをコピーしました