一人前エンジニア道場

フロントエンド開発 / 約25分

AIが書いたコンポーネントをレビューする

なぜこれを学ぶか

AIに「ボタンコンポーネント作って」と頼むと、一見動くコードが返ってきます。しかし本番で使える品質かは、あなたが判断しなければなりません。

AI生成コードによくある問題: アクセシビリティの欠如、不要な再レンダリング、エラー処理の欠如、ハードコードされた値 です。

例えば <div onClick={...}> は動きますが、キーボード操作できず、スクリーンリーダーにも認識されません。<button> を使うべきです。

再レンダリング問題では、インラインのオブジェクトや関数が毎回新しい参照を作り、子コンポーネントの memo を無効化するパターンが典型です。

レビューのコツは「動くか」ではなく「壊れる条件を列挙する」こと。ネットワークが遅い時は? 空データの時は? 日本語と英語が混ざった長いテキストは?

重要ポイント

  • div onClick → button を使う(a11y)
  • インラインオブジェクトは毎回新しい参照を作る
  • レビューは「壊れる条件の列挙」から

コードレビュー演習

AIに「ユーザー一覧を表示するコンポーネント」を書かせたところ、以下のコードが返ってきました。本番投入前にあなたが指摘すべき最も重大な問題はどれ?

function UserList() {
  const [users, setUsers] = useState([])

  useEffect(() => {
    fetch('/api/users')
      .then(res => res.json())
      .then(data => setUsers(data))
  }, [])

  return (
    <div>
      {users.map(u => (
        <div onClick={() => alert(u.name)}>
          {u.name}
        </div>
      ))}
    </div>
  )
}

このコードの最も重大な問題は?

ヒントを見る

「動くか」ではなく「壊れる条件」を列挙してみましょう。APIが失敗したら? ネットワークが遅かったら? 結果が0件だったら? — 画面はユーザーに何を伝えるでしょうか。

コーディング演習実際に書く

XSS対策の基礎であるHTMLエスケープ関数を書いてください。文字列中の & < > " をそれぞれ &amp; &lt; &gt; &quot; に置換して返します。重要: & は最初に置換しないと、後で置換した &lt; 等の & が二重エスケープされます。

function escapeHtml(str)

スキルセルフチェック

このレッスンの内容をどの程度理解できましたか?