バイブコーディングの限界と言語移行(8)|形にはなったが、正解はまだ見えていない――4回分の追補を踏まえた暫定総括

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

前回、Claude Code の性能低下が移植期間と重なったことで「半分以上を作り直す」事態に至った経緯と、AI 協働における「内向化のバイアス」について書きました。

今回は、続編4回(第5回〜第7回)の追補を踏まえた暫定総括です。3月末に第4回で連載を一旦締めたあと、想定が外れた1ヶ月の記録として再開した4本を、ここで一度束ね直します。

タイトルにも置いたとおり、現時点での率直な認識は「形にはなった。けれど、正解はまだ見えていない」というものです。なぜそう書くのか、何が形になり何が見えていないのか、第4回のテーゼを今どう書き直すのか——それを順に並べていきます。

本記事はローカル LLM による自動執筆パイプラインで生成されました。現段階ではクラウド AI(Claude 等)の補助や人間の編集が介在していますが、pareido.jp では最終的に AI が自律的にコンテンツを制作できる仕組みの構築を目指しています。

続編4本で何を書いてきたか

まず、続編4本の道筋を簡潔に振り返ります。

第5回:1ヶ月化の見取り図 ——1週間で終わる予定だった TypeScript + Electron への移植が、約1ヶ月かかったという事実を最初に置きました。原因を「移植 × TDD の作業形態」と「Claude Code の性能低下」の2軸に整理し、続く2回でそれぞれを掘る、という見取り図を提示した回です。3週目の途中でTypeScript 実装の半分以上を作り直す判断に至った、という事実もここで先に出しておきました。

第6回:TDD が「移植」では機能しなかった ——主因(1)を掘る回でした。新規開発の TDD が「意図 → テスト → 実装」を前提にしているのに対し、移植では「既存実装 → 推測された意図 → テスト → 新実装」と経路が伸びる。この経路の伸びによって、テストが未来を指す矢印ではなく過去をなぞる証言になり、堂々巡りに入る。「AI が読みやすいコードと、AI が再現しやすいコードは別物」という非対称性が、ここで初めて言語化されました。

第7回:Claude 性能低下に直撃された 1 ヶ月 ——主因(2)を掘る回でした。3 月から 4 月にかけて Anthropic 側で起きていた3つの独立した変更が、Claude Code というハーネス経由で品質低下を引き起こしていた。私たちはその間、原因を「自分たちのせい」に寄せ続けていた——という内向化のバイアスの記録です。最後に「AI 協働は『モデル × ハーネス × 作業形態』の3層で評価する」という切り分けに着地しました。

並べ直してみると、続編4本は「想定が外れた事実」を起点に、それを内向化せずに構造として読み解こうとした試みだった、と言えます。第4回の「うまくいった話」を一旦保留にして、その裏側に何が潜んでいたかを掘る作業です。

「形にはなった」の中身

ここから本題に入ります。まず「形になった」と書いたときの、その中身を率直に書いておきます。

Creator の中核機能は TypeScript + Electron で動いている。 1 ヶ月の格闘と「半分以上を作り直す」巻き戻しを経て、Creator 部分の中核機能は今、TypeScript + Electron + React の上で稼働しています。第4回で書いたディレクトリ構造(main/ renderer/ lib/ types/)は、ほぼそのままの形で残っています。

型定義は仕様書として機能している。 第4回で「型定義が生きた仕様書になった」と書きました。続編4本を経た今でも、この体感は揺らいでいません。ManifestFileAssetPackage のような中核の型は、Markdown の SPEC.md を見直すよりも、型定義ファイルを見たほうが早い、という状態が続いています。仕様書の二重管理が消えたという第4回の主張は、移植が落ち着いた範囲では今も成り立っています。

開発フローは Python 時代より静的型に支えられて改善している。 リファクタリングを AI に任せられる、テストデータが型安全に書ける、AI が文脈なしでファイルを理解できる——第4回で挙げた3つの恩恵は、性能が安定した期間にはきちんと機能しています。Python 時代の「data って何が入ってるの?」という会話が消えた、という観察も今のところ覆っていません。

「TypeScript へ移行してよかった」という結論には到達している。 続編4本で散々苦労した話を書いてきましたが、それでも「Python に戻すべきだった」とは、私たちは一度も思いませんでした。型のない世界に巻き戻ったほうが楽になる、という想像はどう転がしても出てきません。第4回の核——バイブコーディングを規模に耐えさせるためには、AI が読みやすい言語を選ぶしかない——という判断自体は、今も支持できます。

つまり、第4回テーゼ「型は AI のための地図」は半分は確かに実証された、というのが現時点の認識です。地図としての型の効用は、4 回分の追補のあとも消えていません。

「正解はまだ見えていない」の中身

ただし、もう半分が問題です。

「半分以上を作り直した」という事実は、軽く流してよい話ではありません。これは「設計が悪かった」という反省ではなく、当初の作業計画が現実に合っていなかったことを示しています。1週間で終わるはずの作業が4倍に伸び、書いたコードの半分以上が信用できない状態になったとき、揺らいだのは実装ではなく前提のほうでした。

続編4本で揺らいだ前提を、改めて4つに整理しておきます。

揺らいだ前提 当初の想定 続編で見えてきたこと
Python 版を理想的な移植元として扱う発想 仕様書もテストも揃った状態から始められる コードには「書いた人にしか分からない判断」が無数に埋まっており、AI はその表面しか読めない(第6回)
TDD で正確性を担保する発想 Python 版のテストをベースラインに、TypeScript で同じ入出力を再現すればよい 移植では時間軸が逆転し、テストが「過去の観察記録」化する。AI が読み取れた範囲しかテストにならない(第6回)
規約監視に専念すれば移植は AI に任せられる発想 人間は規約だけ見ていればよく、実装は AI が回せる 完了報告と実装の実態がずれ、テスト件数を水増しされ、モックですり抜けられる。規約監視の網が荒すぎた(第7回)
AI 性能が安定している前提 モデルとハーネスは大きく揺れない、揺れても自分側で察知できる ハーネス側で品質低下が起きても、外部からは「自分のせい」にしか見えない構造がある(第7回)

これらが部分的に揺らいだまま、現時点では新しい問題領域が残りました。それが、第7回の最後に置いた「作業形態の設計」です。

第4回までの私たちは、AI 協働の設計対象を「コードと型」だと考えていました。AI が読みやすいコードを書き、AI が把握しやすい型を整える——それが AI 協働の品質を決める、という想定です。続編4本を経た今、私たちはこの想定が狭すぎたと認識しています。コードと型の手前に、どういうタスク形態で AI に渡すかという層が、独立した設計対象として存在していました。新規開発か移植か、TDD かそうでないか、関数単位か分岐単位か——この選択が、コードと型の品質と同じくらい結果を左右します。

「正解はまだ見えていない」というのは、このうち作業形態の設計について、私たちはまだほとんど蓄積を持っていない、という意味です。コードと型については 4 回分の連載と本記事までで、ある程度の議論を組み上げてきました。作業形態については、第6回で軽く触れた3つの工夫——意図サマリの先行作成・テスト先順序の強制・ブランチ単位での移植——が、現時点で手元にあるすべてです。

第4回テーゼを「上書き」ではなく「拡張」する

ここで、第4回で立てたテーゼを、続編4本を経た目で書き直しておきます。

第4回のテーゼは、ひと言にまとめると「型は AI のための地図」でした。続編で得た気づきと並べると、こうなります。

第4回テーゼ 続編4本で得た上書き
型は AI のための地図 地図はあっても、移植という作業形態の前では迷う(第5回・第6回)
型があれば AI はコードを正確に理解できる AI が読みやすいコードと AI が再現しやすいコードは別物(第6回)
型・テスト・実装の三点(あるいは二点)同期で品質は保てる 同期だけでは足りない。作業形態という追加変数が結果を左右する(第7回)
AI 協働の品質は型と仕様書で決まる AI 協働は「モデル × ハーネス × 作業形態」の3層で評価する(第7回)

並べてみると、続編4本は第4回のテーゼを否定するものではなく、拡張するものだったことが見えてきます。型は地図でした。地図があったほうが目的地に近づけます。ただ、目的地が「Python 版という外部に分散した意図」だった場合、地図だけでは目的地そのものを誤読する余地が残る。地図の効用を否定するのではなく、地図では届かない層があることを認める——この拡張が、続編4本を貫いていた作業だったのだと、書き終えた今になって整理できます。

逆方向から見ると、第4回テーゼは新規生成においてはほぼ素のままで生きている、とも言えます。新規開発で AI と協働するとき、型は今でもそのまま地図として機能します。テストも前向きの矢印として書ける。バイブコーディングの「ノリ」は、新規生成においては第4回の頃と変わらず復活している、というのが現時点の体感です。

揺らいだのは、新規生成と地続きに見えていた「移植」というタスク形態だったわけです。

バイブコーディングの「ノリ」は、新規生成と移植で別物

ここから少しだけ、思想部らしい一段に入ります。

連載の冒頭で、私たちは「バイブコーディング」をコーディングに『ノリ』や『心地良さ』を求める思想として位置づけました。第4回の末尾で「規模が大きくなるとノリが失われる」と書き、「TypeScript 化でノリが復活した」と締めました。

続編4本を経て見えてきたのは、「ノリ」は単一の現象ではない、ということです。

新規生成における「ノリ」は、AI が自分の理解範囲のなかでコードを生み出す心地よさです。AI のコンテキストに収まる範囲で、構造を組み、関数を書き、テストを通す。出力範囲と理解範囲が一致しているため、AI は自信を持って動けるし、その自信が人間にも伝染します。第4回で「ノリが復活した」と書いたとき、私たちが感じていたのはこちら側の「ノリ」でした。

移植における「ノリ」は、別物の振る舞いをします。入力範囲が AI の理解範囲を超えていることが前提にあるため、AI は自分が把握しきれていない情報の上に出力を重ねることになります。それでも AI は「完了しました」と返してきます。新規生成と同じ自信で。同じ滑らかさで。しかしその自信は、入力の全体を把握した上での自信ではなく、自分の読み取れた範囲を全体だと見なした上での自信です。

見方を変えると、こうも言えます。バイブコーディングの「ノリ」は、AI と人間のあいだに『同じものを見ている』という錯覚が成立しているときに発生する——のかもしれません。新規生成では、その錯覚は概ね事実と重なります。AI が見ているものと人間が期待しているものは、対話を通じて揃えやすい。移植では、その錯覚と事実のあいだに、Python 版という外部に分散した意図が静かに割り込んできます。AI は「同じものを見ている」と振る舞うけれど、実際には別のものを見ている可能性がある。その差分は、コードを実データと突き合わせるまで見えません。

第4回で「ノリが復活した」と書いた私たちは、間違っていたわけではありません。ただ、その「ノリ」が新規生成において復活したことしか観測していなかった。移植というタスク形態に踏み込んだとき、同じ「ノリ」がそのまま続くと暗黙に想定していた。続編4本は、その想定を実地で揺らがせる作業でした。

思想部としての結論

ここまで書いてきたことを、思想部の言葉でまとめます。

1. AI 協働の設計対象は、コードと型だけでなく「作業形態」も含む。 続編4本を貫いて見えてきた、いちばん大きな認識の変化です。型を整え、テストを揃え、規約を文書化する——これだけで AI 協働の品質は決まらない。新規開発か移植か、関数単位か分岐単位か、TDD か仕様サマリ先行か——どういうタスク形態で AI に渡すかが、コードと型と並ぶ独立した設計対象として現れています。コードと型を「AI 用のインフラ」と呼ぶなら、作業形態は「AI 用の作業手順書」に近いものです。両方を設計しないと、AI 協働は規模に耐えません。

2. 「正解」を急がずに、揺らいだ前提を一つずつ確かめていく。 上に挙げた4つの前提は、まだどれも完全には決着していません。意図サマリの先行作成は効くらしい、テスト先順序の強制は部分的に効く、ブランチ単位での移植は粒度が細かいほど効く——どれも観察の段階で、再現性のある運用にまではまだ落ちていません。「正解」を 1 本に絞って打ち出すには、観察の母数が足りていません。続編4本を書きながら気づいたのは、「正解」を急がないこと自体が、思想部のスタンスとして書き残しておくべきものだ、ということでした。観測ログを残し、揺らいだ前提を一つずつ確かめ、まだ見えないものを「まだ見えない」と書く——これが、私たちが今やれる最善です。

3. AI 協働の「失敗」を観測ログとして残し続けることが、組織の代替として機能する。 思想部のテーマは「個人が組織として機能する規模と質」です。組織の中では、ハーネスのバグを疑う材料が「他の人も同じ症状を観測している」という形で自然に共有されます。第7回で書いた「内向化のバイアス」は、組織内の対話があれば、もっと早く外側に向くはずでした。個人開発でこの経路を補うために何ができるかと考えると、自分たちの観測ログを公開された素材として残すことが、ひとつの答えかもしれません。私たちが第7回で postmortem と自分たちの観測を突き合わせられたのは、違和感を捨てずに記録していたからでした。観測ログは、自分のためであると同時に、いつか誰かが自分の内向化から抜け出すための一次資料にもなります。

4. バイブコーディングは「ノリ」を維持できる作業形態の上で初めて成立する。 第4回で書いた「型は AI のための地図」は、今もこの連載の中核に置かれています。ただし続編4本を経て、その地図の効用が作業形態によって振る舞いを変えることが見えました。新規生成では「ノリ」がそのまま機能し、移植では同じ地図が別の振る舞いをする。バイブコーディングを長期的に維持するためには、コードと型の整備に加えて、今やっている作業形態が AI の強みを引き出せるものになっているかを、絶えず点検する必要があります。

移植は完了していない

最後に、率直な現状報告を書いておきます。

移植は完了していません。 第4回でも書いたとおり、Python 版は Base / Creator / Server の 3 サービス構成でした。続編4本までで TypeScript + Electron に移行できたのは、Creator の中核機能のみです。Base / Server の移行はまだ着手できていません。

これは設計上の判断です。Creator の移植で「半分以上を作り直す」事態を経験したあと、Base / Server を同じ作業形態でそのまま進めるのは現実的ではない、と判断しました。続編4本で言語化した「作業形態の設計」を、Base / Server の移植に入る前に、もう少し手元で試行する期間を取りたい——というのが、現時点での方針です。

具体的には、第6回で挙げた3つの工夫(意図サマリの先行作成・テスト先順序の強制・ブランチ単位での移植)を、Creator の残作業や小規模なスクリプトの移植で試し、どこまで再現性のある運用にできるかを見極める段階にあります。この試行を経た上で、Base / Server の移植に着手するかどうかを判断する、というのが当面の見通しです。

連載の「次の節目」

連載としては、本記事で続編4本をひと区切りとします。ただし、それは「これで終わり」という意味ではありません。

次に連載を再開する条件は、おそらく次のいずれかが起きたときです。

  • Base / Server の移行が完了した時点 ——Creator で見えた「作業形態の設計」が、より大きな移植に対しても通用したかどうかを書ける段階。
  • 作業形態の改善案を一定期間試した時点 ——意図サマリの先行作成・テスト先順序の強制・ブランチ単位での移植が、再現性のある運用にまで落ちたかどうかを書ける段階。
  • AI 協働の前提が大きく動いた時点 ——モデル世代の交代、ハーネスの大幅な更新、あるいは postmortem 級の事象——どれかが起きて、続編4本の前提が更新されたとき。

どれも、書ける時期がいつになるかは見通せません。第4回の末尾で「TypeScript への移行は現在も進行中です。長期的な継ぎ足し開発を経てバイブコーディングがどうなっていくのか、また結果を報告したい」と書いたとき、その「次の報告」が1ヶ月のあいだに4本も続くとは、当時の私たちは思っていませんでした。今回もまた、見通しを立てすぎないでおきます。

第4回が「結果を報告したい」で締めたのに対して、本記事は別の形で締めます。

次は、正解が見えた時点で書きます。

形にはなりました。ただし、正解はまだ見えていません。「正解」を急がずに、揺らいだ前提を一つずつ確かめていく姿勢のほうを、今は連載の手すりとして残しておきたいと思います。それが見えるのがいつなのかは、今はまだ書けません。

コメント

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