高度なデバッグ用プロンプト
システム全体の見直し(コードベース監査)
- _「1. API 呼び出しをコンポーネントから分離する: _
ProjectListコンポーネントが直接データをフェッチしています。提案: データ取得処理を専用のフックまたはコンテキストに移動し、コンポーネントを純粋な UI に保ちましょう。
- タスク処理ロジックの結合度を下げる: タスク完了トグルが state を更新すると同時に、直接 localStorage に書き込んでいます。これは単一の信頼できる情報源を持つようにリファクタリングすべきです。
- ユーティリティ関数を整理する:
App.tsxにあるユーティリティ関数は、utilsフォルダ(例: 日付フォーマット関数)に置いたほうがよいでしょう。 - …」*
壊れやすい更新に対する安全なアプローチ
パフォーマンス最適化チェック
- 「データ取得:
ProjectListコンポーネントは、レンダーのたびにデータを取得しています。これはキャッシュを使うか、フェッチ処理をより上位のコンテキストに移動することで、不要な繰り返しを防ぐよう改善できます。一度取得したプロジェクトを保持するために、state や context の使用を検討してください。 - 再レンダー:
TaskItemコンポーネントはメモ化されておらず、親の state が変わるたびに再レンダーされます。タスクが多い場合、これがインタラクションを遅くする原因になります。提案: 不要な再レンダーを防ぐために、TaskItemにReact.memoを使用してください。 - アセット: 2MB の画像(ロゴ)が見つかりました。かなり大きいので、圧縮するか、読み込みを速くするために解像度を下げてください。
- バンドルサイズ: すべてのページが 1 つのバンドルに含まれています。初期ロードを高速化するために、大きなモジュールには動的な
import()を使うなど、コード分割を検討してください。 - …」*
永続的なエラーへの対処
- AI に、これまで試したことを確認する。 「Try to Fix」を何度か実行したり、手動でプロンプトを送ったりしたあとだと、何が変更されたのかわからなくなることがあります。次のように聞いてみてください:_“What solutions have we tried so far for this error?”_。AI がこれまでの試行内容を列挙してくれるので、同じ修正を繰り返すのを避けられます。
- AI にエラーをわかりやすい言葉で説明させる。 “Explain in simple terms why this error occurs.” と聞いてみましょう。AI(とあなた)が本当にエラーを理解できているかどうかがわかります。ここで思い違いに気づけることもあります。
- 別のアプローチを検討する。 次のように聞いてみてください:_“Given this error keeps happening, can we try a different approach to achieve the goal?”_。AI が、問題のある箇所を回避できる別の実装戦略を提案してくれるかもしれません。
- 巻き戻してやり直す。 最悪の場合、いくつか前のステップまでロールバックすることもあります。Lovable では、古いバージョンに戻したり、過去のメッセージを編集して別のアプローチを試すことができます。そのうえで、小さな変更を積み重ねていきましょう。
デバッグフローのサンプル
「エラーの無限ループ」にハマったとき
Chat mode に切り替えます。
「このビルドエラーの根本原因は何ですか?」と尋ねます。
AI は、API 呼び出しでの型の不一致が原因だと説明します。
続けて「関連するコードと、期待される型を見せて」と依頼します。
AI は、その関数が ID の数値を期待しているのに、オブジェクトを受け取っていることを示します。
原因が分かったので、「関数にはオブジェクト全体ではなく数値の ID だけを渡すようにコードを調整して」とプロンプトします。
Default に切り替えてそのプロンプトを実行すると、ビルドは成功します。
もし成功しなければ、戻って「ほかに何が原因になりえますか?」などとさらに尋ねます。
「機能が正しく動作しない」場合
エラーは表示されないので、チャットで「メール通知が動作しません。タスクが期限切れになったときにメールが届くと思っていましたが、何も来ませんでした。どうやってデバッグすればいいですか?」と聞きます。
AI は、サーバー関数がトリガーされたかどうか、またメールサービスのレスポンスにエラーが含まれていないかを確認するよう提案します。
サーバーログ(おそらく Supabase など)を確認すると、パーミッションエラーが出ていることがわかります。
その内容を AI に見せて、「ログには『メール送信時に permission denied と出ています』と書かれています」と伝えます。
AI は、メールサービス用の APIキー が設定されていないか、サービス側でブロックされた可能性があると判断します。
その後、設定(Lovable の外側)で APIキー を修正するか、別の方法を使うように関数を調整するプロンプトを送ります。
「UI 要素が消えてしまった」
AI に「プロジェクト一覧セクションがまったく表示されなくなりました。最後の編集までは動いていました。」と伝えます。
AI は、そのコンポーネントがまだレンダーされているか、または return 文が抜けていないかを確認するかもしれません。
ProjectList が削除されてしまったことに気づくかもしれません。AI は、それを再インポートして含めるよう提案します。あるいは、親コンポーネント側の state の変更によって、意図せずリストがフィルタリングされてしまっている可能性もあります。AI は「データはまだフェッチされていますか? コンポーネントはそのデータを受け取れていますか? props を受け取れているか確認するために、render 内に console.log を追加してみましょう」といった可能性を順番に検証してくれます。
あなた(または AI がプロンプト経由で)それを実行してみても、何もログが出ないことがわかります ― つまりコンポーネントがマウントされていないということです。
<ProjectList> を復元してください(誤って削除されました)。」 とプロンプトを送ります。問題は解決です。根本原因分析、ロールバック、プログレッシブ エンハンスメント
根本原因と症状
ロールバックを賢く使う:
段階的な拡張(プログレッシブエンハンスメント):
- 失敗するテストケースを追加する。
- 問題を切り分けて依存関係を分析する。
- 修正を適用する前に、判明した内容を記録する。
作業しながらドキュメント化する:
README やログに保存できます。将来の自分や、プロジェクトの他のメンバーが何が起きたのか理解するのに役立ちます。
人の助けを求めるべきタイミングを見極める:
コミュニティ向けデバッグガイドブック
エラーの修正
エラーの修正
コード変更の方針
コード変更の方針
データベース連携
データベース連携
問題の徹底分析
問題の徹底分析
ソリューションの検証
ソリューションの検証
コードの一貫性
コードの一貫性
プログレッシブ・エンハンスメント
プログレッシブ・エンハンスメント
ドキュメントと説明
ドキュメントと説明
技術的負債の認識
技術的負債の認識
学習と適応
学習と適応
コンポーネントの重複作成を防ぐ
コンポーネントの重複作成を防ぐ
デッドコード除去
デッドコード除去
既存の機能を維持する
既存の機能を維持する
高度な問題解決アプローチ
高度な問題解決アプローチ
データベースクエリの検証
データベースクエリの検証
UI の一貫性とテーマ
UI の一貫性とテーマ
体系的なデバッグアプローチ
体系的なデバッグアプローチ
型安全性とデータバリデーション
型安全性とデータバリデーション
any 型の使用は避けましょう。データ変換を行う際は、パイプラインの各ステップで型安全性を検証してください。特に、数値カラムが文字列として渡されるケース、日付のパースが必要なケース、null になり得るフィールドの扱いなど、よくある型の不一致に注意を払ってください。データベースのカラムと TypeScript インターフェースの間で、一貫した命名規則を適用しましょう。複雑な型の関係や特別な取り扱いが必要な点は、必ずドキュメント化しておいてください。実際のデータの形(シェイプ)を使ってテストを行い、特に null / undefined の扱いなどのエッジケースを検証してください。エラーが発生した場合は、データ変換パイプラインをさかのぼり、型がどこで食い違っているかを正確に特定し、型安全性を維持できる修正を検討してください。データフロー管理
データフロー管理
パフォーマンスの最適化
パフォーマンスの最適化
エラー処理と耐障害性
エラー処理と耐障害性
try/catch ブロックを戦略的に配置します。アプリケーション全体がクラッシュするのではなく、特定のコンポーネント内に障害を閉じ込められるよう、エラーバウンダリの階層構造を作成します。コンポーネントが限定的なデータでも動作を続けられるような、グレースフルデグレーデーションパターンを設計します。問題を専門用語なしで説明する、明確でユーザーフレンドリーなエラーメッセージを提供します。リトライロジック、フォールバック、状態リセットなどを含むリカバリ機構を実装します。プライバシーに配慮しつつ、デバッグに十分なコンテキストを取得できる堅牢なエラーロギングを維持します。エラーシナリオを徹底的にテストし、リカバリ機構が期待どおりに動作することを確認します。解決策を提案する際は、症状を単に抑え込むのではなく根本原因に対処していること、そしてすべての関連する環境とエッジケースで機能することを必ず検証してください。コンポーネントアーキテクチャ
コンポーネントアーキテクチャ
context や状態管理を戦略的に用いることで、props の深い受け渡し(prop drilling)を最小限に抑えます。コンテナ(スマート)コンポーネントとプレゼンテーショナル(ダム)コンポーネントの間に、明確な境界を設けます。親子間や兄弟間のやりとりを含め、コンポーネント間のやりとりパターンを一貫して整えます。コンポーネントの問題をデバッグする際は、コンポーネントツリー全体、props のフロー、状態の所在、イベントハンドラーの接続を分析します。コンポーネントは単一責務と明確なインターフェースを持つように設計します。将来の保守を容易にするために、コンポーネント同士の関係性と依存関係をドキュメント化します。メモ化、遅延読み込み、コード分割などのパフォーマンス最適化を、効果が見込める箇所に導入します。コンポーネントの再利用性と特化度のバランスを保ち、重複と過度な抽象化の両方を避けましょう。API連携とネットワーク管理
API連携とネットワーク管理