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分