バイブコーディングで静的サイトを育てて気づいた失敗パターン3選

はじめに

以前「バイブコーディングで静的サイトを作って気づいたこと」という記事を書きました。「作れることと保守できることは別の話」という内容で、Zennにも投稿しています。

あれを書いた後も開発を続けていて、もう少し踏み込んだところでハマりました。今回はその話です。

「うまくいった話」の続きなので、失敗談になります。3つあります。

失敗パターン①:Claudeがだんだん記憶をなくす

長いセッションを続けていると、Claudeが前に決めたことを忘れ始めます。

具体的にはこういう症状が出ます。

修正したはずのミスが再発する

直したと確認したコードが、次の作業でまた同じ状態に戻っている。

以前確認したファイルパスやクラス名を間違える

セッション序盤で決めたルールを、後半で参照するときに誤って読み取る。

「このルールはこうでしたっけ?」と聞き直してくる

すでに決定済みの事項を再確認してくる。会話の前半の情報が薄れているサイン。

最初は「なんか今日の精度おかしいな」と感じる程度です。でもよく考えると、1時間以上同じ会話を続けていて、直前の作業しか覚えていない状態になっていました。

理由は単純で、AIには「コンテキストウィンドウ」という会話の記憶の上限があります。会話が長くなると、序盤の内容は自動的に圧縮されていく。最初に決めたルールや判断が、知らないうちに薄まっていく。

対策は2つです。1つ目は、1つの作業で会話を区切る習慣をつけること。「今日は全部終わらせよう」と長引かせるほど状態が不安定になります。

2つ目は、CLAUDE.md を「記憶の補強ファイル」として育てること。毎回の会話の冒頭でClaudeが読むので、セッションが変わっても重要なルールは引き継がれます。コンテキストが失われても、ファイルが補完してくれる仕組みです。

Claudeのせいにしていたミスが、実は「会話の長さ」の問題だったと気づいてから、作業の区切り方を変えました。

失敗パターン②:ルールファイルは育てないと腐る

最初にCLAUDE.mdを作ったとき、「ルールを一度書いておけば大丈夫」と思っていました。でも実際は、ファイルやページが増えるにつれて、仕様書の方がだんだん現実と食い違ってきます。

このサイトではCLAUDE.mdはあくまで入口で、具体的なルールはテーマごとに別ファイルに分けています。ページのレイアウト規約、デザイン方針、SEO対策、カテゴリー定義…と複数のMDファイルが存在しています。問題はこのファイル群全体で起きます。

あるタイミングで全体を読み直したら、こんな問題が出てきました。

CSSのパス名が古いファイル名のまま誤記されていた

途中でファイルを整理してパスが変わったのに、ルールファイルの記述が更新されていなかった。

コメントの意味が逆になっていた

「やってはいけない」という意図で書いたコメントが、読むと「やること」に読めてしまう文章になっていた。

同じルールが複数のファイルに分散して矛盾していた

片方を更新したときにもう片方が古いまま残り、2つのファイルで内容が矛盾する状態になっていた。

ルールファイルだけでなく、実際のHTMLページにも影響が出ていました。リニューアル前の旧方式で作られたページが数ページそのまま残っていて、新方式のページと混在していた。ルールが古いままだったので、Claudeも古い方式を参照して作り続けていました。

どれも「書いた時点では正しかった」ものです。でもサイトが育つにつれて、その後の変更が追いつかなくなっていた。

構造的な原因は「ルールファイルが増えるほど、全体を把握しにくくなること」です。細かくファイルに分けるのは正しい方向ですが、管理コストも一緒に増えます。気づかないうちに同じルールが複数の場所でバラバラに管理されて、少しずつズレていく。

AIはルールファイルを忠実に読んで動くので、ファイルに間違いがあればその通りに間違えます。「Claudeがおかしな動きをする」と思ったら、実はルールファイルの方がおかしかった、というケースが何度もありました。

対策は「節目での読み直し」です。毎回やる必要はないし、ページを追加するたびに見直すのも現実的ではありません。

自分の場合、こういうタイミングで入れました。

30ページ前後

ルールファイル全体を通し読みして、現状との食い違いを修正。

50ページ前後

SEO対策の見直しとあわせてルールも再確認。

開発18日目

ルールMDファイルだけを対象に「矛盾していないか」の専用チェックを実施。コードは一切見ずにルールファイルだけを読んで矛盾を探すもので、「コメントの意味が逆になっていた」「2つのファイルで内容が矛盾していた」問題がここで見つかりました。

ページ数でも経過日数でも、区切りを決めてしまえばいい。「なんか最近Claudeの動きがおかしい」と感じたときも見直しのサインです。

失敗パターン③:デモとサンプルコードが静かにズレる

このサイトの事例ページには「デモ」と「サンプルソース」の2つがあります。デモは実際に動くもの、サンプルソースはコピペ用のコードです。

AIは複数の箇所を独立して生成するので、この2つが知らないうちに乖離します。

発覚のきっかけは、自分でサンプルコードをコピペして使おうとしたときでした。デモは動く。でもコードをコピーして貼り付けると動かない。

よくあったのがJSONデータの読み込みパスのズレです。ルールでは data/data.json という場所にデータファイルを置くことになっていて、サンプルソースもそのパスで書かれていました。でも実際のデモは違うパスの、別のファイル名のJSONを読み込んでいた。デモの中だけで完結する動きになっていて、サンプルコードとは別物になっていました。

ページを眺めているだけでは気づきません。実際に使おうとして初めてわかる。

これの厄介なところは、事例ページが増えるほど確認が追いつかなくなることです。

対策として check-sample.js というスクリプトを作りました。サンプルコードをファイルに書き出して、実際のデモのソースと diff 比較するものです。一気に全ページをチェックできるので、ズレているページをまとめて発見できます。

解決方法がコードになったのは、この問題だけです。自動化できない問題は手順で解決してきましたが、これは「目視で追いきれなくなった量の問題」だったので、スクリプトで補いました。

まとめ

3つ並べてみると、共通点があります。どれも「AIに任せきりにしていた部分」で起きました。

会話の管理をAIに任せていた

→ コンテキスト喪失。1つの作業で会話を区切る、CLAUDE.mdで補強する。

仕様書のメンテをAIに任せていた

→ ルールファイルが腐る。節目で人間が読み直す。

コードの整合性チェックをAIに任せていた

→ デモとサンプルのズレ。スクリプトで機械的に検出する。

バイブコーディングは「作る速度」を上げてくれますが、「確認・管理・整合」は人間側の仕事として残ります。

うまくいっている今は「どこを自分がやるかを最初から決めている」状態です。AIに全部やらせようとするほど、後で手戻りが増えます。任せる範囲を絞って、止まって確認する場所を設計に組み込む。

最初の記事で「作れることと保守できることは別の話」と書きました。この3つはその続きで、「保守するために自分がやるべきことを決めた話」です。

最後まで読んでいただきありがとうございました。