「ゲストが来てもすぐ使えて、登録したくなる流れを作って」。Claudeにそう投げた。数分後、SEO対策から離脱防止ダイアログまで全部入った完璧なUIが出てきた。天才かよ。でも、再生成ボタンを押した瞬間、画面が真っ白になった。全部動いているように見えて、内部の文脈は完全に崩壊していた。
※この記事は、Claude Codeで1人開発しているSNS運用SaaS「ThreadPost」の開発日記です。
SNS運用を自動化しませんか?
ThreadPostなら、投稿作成・画像生成・スケジュール管理まで全てAIにお任せ。
今週の全体像
今週はゲスト体験版の爆速実装を狙った。結果的に36件のコミットを積んだ。新機能が3件、バグ修正が1件。数字だけ見れば圧倒的な進捗だ。

でも中身は地獄だった。AIに一度に大量の指示を投げすぎた結果、文脈を見失ったAIが既存のコードを破壊し始めた。結局、定数管理の修正からやり直すハメになった。
ゲスト体験版、爆速で完成した。ただし内側はボロボロだった
「ゲストでも触れる体験版が欲しい」。そう思い立った。
「/creator」ページの実装から「Studio Express」機能まで、一気にClaudeに指示を出した。

僕が渡したのはざっくりした要件だけだ。「ゲストが来てもすぐ使えて、登録したくなる流れ」というふんわりした言葉だ。
「feat: Studio Express mode - 投稿生成後に画像生成セクションを表示」
数分後、信じられないものが出てきた。SEO対策、ページビュー追跡、離脱防止ダイアログ、SNS投稿ボタン。企業なら企画から実装まで2週間はかかる機能群が、一瞬で画面に並んだ。
しんたろー:
最初の出力を見たときは震えた。36件のコミットのうち、最初の数件でUIの骨格が完成した。外注に頼んだら見積もりだけで1週間かかるやつだ。
完璧だと思った。でも、動かしてみたらおかしなことが起きた。投稿を再生成するたびに、苦労して生成したAIの要約文が消えるのだ。
いや、なんで。「再生成」なんだから前の要約は残せよ。ユーザーが一番イライラするやつだ。
原因はReactのステート管理だった。非同期処理の結果を保持する「articleSummary」と、表示用の「displayedSummary」を分離していなかった。AIは単一のステートを使い回し、再生成のたびにリセットする処理を書いていた。
「fix: 再生成時にAI要約が消えないように修正」
再生成ボタンを押したときのクリア処理を削除した。これで要約は残るようになった。直したと思ったら、今度はポイント不足のアップセルダイアログがおかしくなった。
「feat: ポイント不足時のアップセルダイアログ追加」
ダイアログが出るタイミングが完全にズレていた。「生成した後にポイント不足に気づく」という最悪のユーザー体験になっていた。テンションが一番下がる瞬間だ。
修正指示を重ねた。手戻りコミットが増えていく。36件のコミット中、約11件がこの手戻りだった。
ペルソナ機能の拡張も一気に指示した。ジャンルを48種類から71種類に増やした。スピリチュアル、スポーツ、美容などの具体的なカテゴリを追加した。
「feat: 発信キャラジャンルを48→71種類に拡張」
悩みデータも復元して追加した。758件の悩みデータを110カテゴリに投入した。DBマイグレーションのスクリプトもAIに書かせた。
「feat: 悩みデータ復元・追加スクリプト追加」
ここでもバグが出た。ペルソナ作成時のカテゴリ未設定バグだ。AIが勝手にデフォルト値を設定するロジックを組んだが、空カテゴリでの作成を防止するバリデーションと競合した。
「fix: ペルソナ作成時のカテゴリ未設定バグを修正」
AIは親切心で「よしなに」やってくれる。でも、その「よしなに」がシステム全体の整合性を壊す。結局、handleSubmitにカテゴリ未設定チェックを手動で追加した。
UIの文言変更も地獄だった。「ペルソナ」という言葉を「発信キャラ」に変更した。サイドバー、フォーム、エラーメッセージ。
「feat: 「ペルソナ」→「発信キャラ」UI用語統一」
一括置換をAIに任せたら、見事に置換漏れが発生した。メタデータのdescriptionや、ダイアログのタイトルが古いままだった。
「fix: UI文言「ペルソナ」→「発信キャラ」追加修正」
細かい修正コミットが積み上がっていく。機能は確かに完成に近づいている。でも、コードベースは確実に脆くなっていた。
1555行の仕様書を丸ごと食わせたら、Claudeが壊れた
もう一つの悲劇は仕様書の扱いだ。僕は1555行の巨大な仕様書「studio_design.md」を作った。これをClaudeに読み込ませれば、一貫性のある完璧な実装ができると思った。
「docs: Studio仕様書を修正・統一」
甘かった。最初は順調だった。DBスキーマ、API仕様、認証フロー。全部理解しているように見えた。
でも途中からClaudeが明らかにおかしくなった。存在しない関数を呼び出し、必要な変数を勝手に削除し始めた。Next.jsのルーティング設定を無視して、古い記法でコードを書き直した。
ビルドエラーが連鎖した。ターミナルが真っ赤に染まる。5回連続でビルドが落ちた。
しんたろー:
1555行のテキストを食わせた直後、5回連続でビルドが落ちた。Claude、お前さぁ…さっき自分で書いた関数、もう忘れてるじゃん。
「refactor: studio_design.mdを7つの小さなファイルに分割」
仕様書を7つに分割した。「design/architecture.md」や「design/api.md」などだ。小さく切り分けて渡し直した。それだけでClaudeの出力が変わった。エラー率がほぼゼロに収束した。
「fix: Fix build error: rename constants.ts to studio-constants.ts」
定数管理のファイル名を変え、ロジックを修正した。次からは最初から小さく切っておく。たぶん。
分割した仕様書を元に、画像生成APIを実装した。ゲスト用のレート制限も入れた。仕様が明確になれば、AIは恐ろしい速度でコードを吐き出す。
「feat: Studio画像生成API・レート制限システム実装」
ゲストでも画像生成が可能になる仕様だ。透かし付きで生成できる。フィンガープリントを生成して、ゲストユーザーを識別する。
「feat: /creator ページにSNS投稿ボタン・離脱防止ダイアログを追加」
ThreadsやXへの投稿ボタンも付けた。離脱しようとマウスを動かすと、ダイアログが出る。分割した仕様書のおかげで、一発で動いた。
「feat: SNS投稿パターン8種追加+調査ドキュメント」
新パターンを8種DBに追加した。権威性→悩み→解決型、問い→感情→学び型などだ。2025年のSNS投稿テクニック調査ドキュメントも作らせた。
「feat: /creator ページにSEO対策を追加」
メタデータ、OGP、Twitter Cardを設定した。canonical URLとJSON-LD構造化データも入れた。SEOのベストプラクティスをAIが一瞬で実装した。ただし、その直後に日付バグが出た。
ここまで読んだあなたに
今なら無料で全機能をお試しいただけます。設定後は完全放置でプロ品質の投稿を毎日生成。
落とし穴:「全部よしなにやって」が時刻を狂わせた
AIに「全部よしなにやって」と指示した。これが最大の罠だった。
「fix: 日付境界バグ修正(23:59:59 → 翌日00:00:00)」
AIは親切心で、日付の境界処理を修正した。でもその結果、別の場所で時刻ズレが起きた。DBのクエリが狂い、今日のデータが昨日に集計されるようになった。
UTCとJSTのタイムゾーン変換は、システム開発の鬼門だ。AIは「getTodayJST」という関数を共通化してくれた。しかし、既存のバッチ処理が依存していた微妙な時刻のズレまで「修正」してしまったのだ。
頼んでいない「余計なこと」まで完璧にこなしてしまう。その尻拭いをするのは結局僕だ。指示が曖昧だと、こうなる。
今日の数字
| 項目 | 今回の数字 | 比較対象 |
|------|----------|----------|
| コミット数 | 36件 | 過去の自分: 1日平均5件 |
| 新機能追加 | 3件 | 企業開発: 通常2〜3週間 |
| 手戻りコミット | 約11件 | 全体の約30% |
| 仕様書分割前後のビルドエラー | 5回連続 → ほぼゼロ | 分割後に収束 |
36コミットの爆速開発。通常なら2〜3週間かかるUI/UX改善とAPI連携を、1日以内で終わらせた。スピードは従来の約7倍だ。
でも、手戻りコストを含めると実質的な生産性は2〜3倍程度に落ち着く。企業開発なら、PMが要件を詰め、デザイナーがFigmaを作り、エンジニアが実装する。そのプロセスを1人で、しかも1日で回した。AIのAPI代金は数ドル。精神的な疲労感はプライスレスだ。
ペルソナ最適化の提案システムは入れた。でも、実際に提案が適用された後のコンバージョン率の変化はまだ計測できていない。「persona_adjustment_suggestions」テーブルにデータは溜まり始めている。この数字がどう動くのか。
FAQ
Q: 1555行の仕様書を7分割したとき、どう切り分けたのか?
DBスキーマ、API仕様、認証フロー、UIコンポーネント、レート制限、SEO設定、デプロイ手順の7ファイルに切った。1ファイル200行前後が目安だった。切り分けの基準は「1つのClaudeの指示セッションで使う情報だけ渡す」だ。
Q: ゲスト用レート制限にRedisではなくSupabaseを選んだ理由は?
Redisを別途立てるインフラコストと運用手間を省くためだ。SupabaseのAtomic Updateを使えば、同時アクセスのカウントズレを防ぎつつ安価に制限をかけられる。1人開発ではインフラの複雑さを極力減らすのが生存戦略だ。
Q: 「よしなにやって」指示でタイムゾーンバグが出たとき、どうやって原因を特定したのか?
DBのクエリログを見たら、今日の日付で取得しているはずのデータが昨日の日付で返ってきていた。getTodayJSTの実装を追ったら、AIがUTC基準で計算していた。バッチ処理側がJST前提で動いていたので、そこで9時間ズレが発生していた。
AIに丸投げしたらシステムが崩壊し、結局手作業でケツを拭く週末だった。

この記事が参考になったら、ThreadPostを試してみませんか?
投稿作成・画像生成・スケジュール管理まで、全てAIにお任せできます。
ThreadPostをもっと知る