バイブコーディングでもuseEffectを無駄に使わないように

に公開

AIと協働してReactアプリを開発する際、useEffect が頻繁に提案されることがあります。しかし、多くの場合で useEffect は不要であり、より良い代替手段が存在するケースが多くあります。

なぜAIはuseEffectを推奨するのか

即座に動作するコードを優先する傾向

AIは「とりあえず動く」コードを生成することを重視します。複雑な状態管理やイベントハンドリングに直面すると、手っ取り早い解決策として useEffect を提案しがちです。

const [data, setData] = useState(null);

useEffect(() => {
  fetchData().then(setData);
}, []);

標準的なサンプルパターンの再現

AIの学習データには useEffect を使った一般的なサンプルコードが多く含まれているため、似たようなパターンを生成する傾向があります。

既存コードベースの影響

既に useEffect を多用しているプロジェクトでは、AIは一貫性を保とうとして同様のパターンを提案します。

AIとの協働における実践的なアプローチ

具体的な指示を出す

「useEffectを使わずに、イベントハンドラベースでデータフェッチを実装してください」

代替手段を明示する

「React QueryまたはSWRを使用してサーバー状態を管理してください」

既存コードのuseEffectを減らす

プロジェクト全体で不要なuseEffectを整理することがAIが生成するコードの品質が向上します

コードレビューの観点を伝える

「このコードでuseEffectが本当に必要か検討し、より良い代替案があれば提案してください」
このようにレビューさせるのはバイブコーディングで有効ですが、既存コードにuseEffectが複数使用している場合や複雑になっているコードの場合、「やっぱり使った方がよかったです」「使わなくても大丈夫です」などループすることがあります。
このような場合には、指示を明示した方が良さそうです。

useEffectが本当に必要なケース

以下の場合はuseEffectの使用検討が必要です

  • DOM操作が必要な場合
  • 外部ライブラリとの統合
  • タイマーやインターバルの管理

まとめ
AIとの協働開発では、生成されたコードを盲目的に受け入れるのではなく、useEffect の使用理由を問い直すことが重要です。多くの場合、より直感的で保守性の高い代替手段が存在します。
AIに対して明確な指示を出し、Reactのベストプラクティスに沿った開発を心がけることで、より質の高いコードを生成できるでしょう。

Discussion