LESSON 20分

AIの得意・不得意を知ろう

ストーリー

「昨日、後輩の山田が面白いことを言ってた」

中島先輩がコーヒーを片手に話し始めた。

「"ChatGPTがあればプログラマーいらなくなりますよね?"って」

「...それは言い過ぎじゃないですか?」

「もちろんそうだ。でも、AIにできることとできないことの境界線を正確に理解している人は、まだ少ない。今日はその境界線を学ぼう」


AIが得意なこと

1. パターン認識と再現

AIは大量のデータから学んだパターンを再現することが得意です。

得意な例:
  - 定型的なCRUD APIコードの生成
  - デザインパターンの適用
  - ボイラープレートコードの生成
  - 正規表現の作成
  - SQLクエリの生成

2. 知識の検索と要約

学習データに含まれる知識を素早く引き出せます。

プロンプト例:
「TypeScriptのジェネリクスについて、初心者向けに3つの例で説明してください」

→ 学習済みの知識から、わかりやすい例を選んで構成できる

3. 言語の変換

プログラミング言語間の変換、自然言語間の翻訳が得意です。

プロンプト例:
「以下のPythonコードをTypeScriptに変換してください」

def calculate_total(items: list[dict]) -> float:
    return sum(item['price'] * item['quantity'] for item in items)

→ AIの回答:
function calculateTotal(items: Array<{price: number; quantity: number}>): number {
    return items.reduce((sum, item) => sum + item.price * item.quantity, 0);
}

4. コードの説明・文書化

既存コードの意味を説明したり、ドキュメントを生成したりが得意です。

プロンプト例:
「以下のコードが何をしているか、初心者にもわかるように説明してください」

5. テストケースの網羅

境界値やエッジケースを含むテストケースの提案が得意です。

プロンプト例:
「以下の関数に対するテストケースを網羅的に列挙してください」

function divide(a: number, b: number): number {
    return a / b;
}

→ AIの回答:
テストケース:
1. 正常系: divide(10, 2) → 5
2. 小数結果: divide(10, 3) → 3.333...
3. 負の数: divide(-10, 2) → -5
4. ゼロ除算: divide(10, 0) → Infinity
5. 両方ゼロ: divide(0, 0) → NaN
6. 大きな数: divide(Number.MAX_SAFE_INTEGER, 1)
7. 小さな数: divide(0.1, 0.3)(浮動小数点精度)

AIが不得意なこと

1. 最新の情報

AIの学習データには期限(カットオフ日)があります。

不得意な例:
  ❌ 「昨日リリースされたNext.js 16の新機能は?」
  ❌ 「現在のNode.jsの最新LTSバージョンは?」
  ❌ 「このライブラリの最新バージョンの破壊的変更は?」

対策:
  → Web検索機能付きのAIを使う(ChatGPTのBrowsing)
  → 公式ドキュメントを直接確認する
  → AIの回答に対して「いつの情報か」を意識する

2. 数学的な正確性

LLMは統計的なパターンマッチングなので、正確な計算は不得意です。

不得意な例:
  ❌ 複雑な数値計算
  ❌ 暗号学的な計算
  ❌ 正確な日数計算

実験:
  質問: 「2024年3月15日から2025年1月8日まで何日ですか?」
  → AIは「おおよそ」の回答を出すが、正確でないことがある

対策:
  → 計算は実際のプログラムで実行する
  → AIには「計算のロジック」を書かせ、実行は別途行う

3. プロジェクト全体の設計判断

AIは部分的なコード生成は得意ですが、プロジェクト全体を通した設計判断は苦手です。

不得意な例:
  ❌ ビジネス要件に基づくアーキテクチャ選定
  ❌ チームのスキルセットを考慮した技術選定
  ❌ 長期的な保守性を考慮した設計判断
  ❌ トレードオフの判断(パフォーマンス vs 可読性 等)

対策:
  → AIに選択肢とトレードオフを列挙させる
  → 最終判断は人間が行う

4. 自社固有のコンテキスト

AIは公開されていない情報を知りません。

不得意な例:
  ❌ 自社のコーディング規約に合ったコード
  ❌ 社内システムのAPI仕様
  ❌ チーム固有のワークフロー
  ❌ 非公開のビジネスロジック

対策:
  → プロンプトにコーディング規約を含める
  → 関連コードをコンテキストとして提供する
  → カスタムGPTsやシステムプロンプトで文脈を設定

5. セキュリティの保証

AIが生成したコードのセキュリティは保証されません。

不得意な例:
  ❌ セキュリティホールのないコードの保証
  ❌ 入力バリデーションの完全な実装
  ❌ 認証・認可の適切な実装

実際の事例:
  AIが生成したコード:
    app.get('/user/:id', (req, res) => {
      const user = db.query(`SELECT * FROM users WHERE id = ${req.params.id}`);
      res.json(user);
    });

  問題: SQLインジェクション脆弱性がある

対策:
  → セキュリティレビューは必ず人間が行う
  → OWASPのガイドラインに照らし合わせる
  → 静的解析ツールを併用する

得意・不得意の早見表

カテゴリ得意不得意
コード生成定型コード、パターン適用複雑なビジネスロジック
デバッグエラーメッセージの分析再現が難しいバグ
ドキュメント説明文、コメント生成社内用語を含む文書
テストテストケース列挙結合テスト設計
設計パターンの提案トレードオフ判断
リサーチ概念の説明、比較最新情報
セキュリティ一般的な脆弱性の指摘完全な安全性保証

AIとの正しい付き合い方

「AI + 人間」のハイブリッドが最強

理想的な分担:

  AIが担当:                    人間が担当:
  ├── 定型コードの生成          ├── 要件定義
  ├── テストケースの列挙        ├── アーキテクチャ設計
  ├── エラーの分析             ├── セキュリティレビュー
  ├── ドキュメントの下書き      ├── ビジネスロジックの判断
  └── リファクタリング案の提示  └── 最終的な品質保証

まとめ

ポイント内容
AIの得意分野パターン再現、知識検索、言語変換、文書化
AIの不得意分野最新情報、正確な計算、設計判断、セキュリティ保証
正しい使い方AIと人間の強みを組み合わせる
鉄則AIの出力は必ず検証する

チェックリスト

  • AIが得意なタスクを5つ以上挙げられる
  • AIが不得意なタスクを5つ以上挙げられる
  • ハルシネーション対策を理解した
  • AIと人間の適切な役割分担を理解した

次のステップへ

AIの得意・不得意がわかったところで、次は非常に重要なテーマ「AI利用の倫理とリスク管理」を学びます。

AIを業務で使うには、技術的なスキルだけでなく、倫理的・法的な配慮も必要です。


推定読了時間: 20分