AI活用開発演習 / 約25分
AIでコードを書く実践
なぜこれを学ぶか
「AIにコードを書かせる」サイクルは「要件の言語化 → プロンプト設計 → コード生成 → 動作確認 → 改善」の繰り返しです。このレッスンでは、AIが生成した「バグありコード」のレビューと修正を通じて、このサイクルの「確認」フェーズを重点的に訓練します。
AI活用開発の5ステップサイクル: ①要件言語化 — 「何が欲しいか」を具体的に書き出す(曖昧さをゼロにする)。②プロンプト設計 — 4要素(役割・コンテキスト・指示・制約)を揃える。③コード生成 — AIに投げて出力を得る。④動作確認 — テストを実行し、エッジケースを試す。⑤改善 — バグが出たら原因を伝えて再生成・手修正。
AIコードレビューの観点: ❶動作の正確さ — 指示した要件を満たしているか。❷エッジケース — 空配列・null・0・境界値で壊れないか。❸セキュリティ — SQLインジェクション・XSSなどの脆弱性がないか(L3で詳しく学ぶ)。❹可読性 — 変数名・コメントが分かりやすいか。❺既存コードとの整合性 — チームのコーディング規約・命名規則に合っているか。
よくある「AIコードの落とし穴」パターン: ▶ エラーハンドリングが省略されている(try-catchなし)▶ 非同期処理でawaitを忘れている ▶ 入力値の検証(バリデーション)がない ▶ ハードコードされた値(URLや設定値を直書き)▶ 古い書き方(deprecated APIの使用)
「コードが動いた≠完成」: AIが書いたコードは「ハッピーパス(正常系)」だけ動くことが多いです。「空配列を渡したら?」「nullが来たら?」「リクエストが失敗したら?」を試してこそ、本番コードと言えます。
重要ポイント
- AIコード活用は「要件言語化→プロンプト→生成→確認→改善」の5ステップサイクル
- AIはハッピーパスしか考えないことが多い。エッジケースのテストは自分でやる
- エラーハンドリング・バリデーション・非同期のawait漏れに注意
- 「動いた」はスタート。テスト済みになってはじめて「完成」
コードレビュー演習
以下はAIが生成した「ユーザーの年齢確認関数」のコードです。 プロンプト指示は「ユーザーオブジェクトを受け取り、18歳以上ならtrueを返すisAdult関数を書いて」でした。 このAI出力コードのレビューをしてください。
/* === AIが生成したコード(疑似出力)=== */
function isAdult(user) {
return user.age >= 18
}
/* === AIが生成したテストコード(疑似出力)=== */
// テスト1: 20歳ならtrue
console.log(isAdult({ age: 20 })) // → true ✅
// テスト2: 15歳ならfalse
console.log(isAdult({ age: 15 })) // → false ✅
/* === あなたが追加検証したエッジケース === */
console.log(isAdult(null)) // → TypeError: Cannot read properties of null
console.log(isAdult({})) // → false (undefined >= 18 は false になる)
console.log(isAdult({ age: '20' })) // → true (文字列との比較が意図しない挙動を生む可能性)このAI出力のコードに存在する最も重大な問題はどれ?
ヒントを見る
AIが書いたテストは「動く入力」だけです。実際の呼び出し元からはどんな値が来るか分かりません。
コーディング演習実際に書く
上のAI出力コードをレビューした結果、null・ageなし・ageが数値でない場合のエッジケースが未対応でした。 以下の要件を満たすよう isAdult 関数を修正してください。 要件: - userがnullまたはundefinedの場合はfalseを返す - user.ageが存在しない(undefined)場合はfalseを返す - user.ageが数値でない場合はfalseを返す - user.ageが18以上の場合はtrueを返す - それ以外(18未満)はfalseを返す
スキルセルフチェック
このレッスンの内容をどの程度理解できましたか?