AI協働
7 分
AIの思考パターンの癖:なぜスケーラビリティに気づきにくいのか
NEWSとTIPS実装時の経験から学ぶ、AIがスケーラビリティの問題を見逃しやすい理由と、より良い設計を引き出すための対策を解説します。
AI開発スケーラビリティ設計パターンClaudeChatGPT
NEWSとTIPSコーナーの実装時、興味深い現象が起きました。AIは最初、すべての記事を1つのJSONファイルに格納する設計を選択したのです。これは「動く実装」としては正しいですが、コンテンツが増え続ける前提を考慮していませんでした。
この経験から、AIの思考パターンの特徴と、より良い設計を引き出す方法について考察します。
なぜAIはスケーラビリティを見逃すのか
1. コンテキストの限界
AIは与えられたタスクを「今すぐ動かす」ことに集中する傾向があります。
json
// AIが最初に提案した構造
{
"articles": [
{ "id": 1, "title": "記事1", "content": "..." },
{ "id": 2, "title": "記事2", "content": "..." },
// 100件、1000件と増えたら...?
]
}
この設計は10件程度なら問題ありませんが、記事が増えるたびにファイルサイズが肥大化し、以下の問題が発生します:
- メモリ使用量の増加: 一覧表示のためだけに全記事を読み込む
- パフォーマンス低下: JSONファイルが大きくなるほど解析時間が増加
- 開発効率の低下: 複数人で編集時にコンフリクトが頻発
2. 最適化の優先順位
AIは「シンプルで理解しやすい」実装を優先します:
javascript
// AIが考える「シンプル」な実装
const articles = await fetch('/data/news.json').then(r => r.json());
const latest = articles.slice(0, 10);
確かにシンプルですが、1000件の記事があったら?
3. 実装時の思考の違い
人間の開発者は「将来どうなるか」を自然に考えますが、AIは「今のタスクを解決する」ことに集中します。
人間の思考: 「ニュース記事は毎日追加されるから、いずれ数百件になるな...」
AIの思考: 「記事を表示する機能を実装します。JSONファイルに配列として保存すれば簡単です」
より良い設計を引き出すための対策
1. 明示的な制約を与える
markdown
# ❌ 曖昧な指示
「ニュース機能を実装してください」
# ✅ 明確な制約
「ニュース機能を実装してください。
- 記事は時間とともに増え続けます(目標: 1000件以上)
- ページネーションで10件ずつ表示
- 記事の追加・編集が頻繁に行われます
- 複数人での同時編集を考慮してください」
2. 設計レビューを要求する
実装前に設計案を提示してもらい、スケーラビリティをチェック:
markdown
「実装前に以下を含む設計案を提示してください:
1. データ構造
2. ファイル構成
3. 100件、1000件規模でのパフォーマンス考察
4. 運用時の課題と対策」
3. ベストプラクティスを参照させる
markdown
「以下のベストプラクティスに従って実装してください:
- 大量のコンテンツは個別ファイルに分割
- インデックスと詳細データを分離
- 必要なデータのみを読み込む設計」
正しい実装例
ファイル構造
/public/data/news/
├── index.json # メタデータのみ(軽量)
└── articles/ # 個別記事ファイル
├── 2025-06-16-001.json
├── 2025-06-16-002.json
└── ...
インデックスファイル(軽量)
json
// index.json - メタデータのみ
{
"articles": [
{
"id": "2025-06-16-001",
"date": "2025-06-16",
"title": "記事タイトル",
"excerpt": "概要文"
// contentは含まない
}
]
}
個別記事ファイル
json
// articles/2025-06-16-001.json
{
"id": "2025-06-16-001",
"title": "記事タイトル",
"content": "本文の内容...",
"author": "著者名",
"tags": ["AI", "開発"]
}
実装コード
typescript
// 一覧表示(軽量なインデックスのみ読み込み)
export async function getNewsList(): Promise<NewsIndex> {
const res = await fetch('/data/news/index.json');
return res.json();
}
// 詳細表示(必要な記事のみ読み込み)
export async function getNewsDetail(id: string): Promise<NewsArticle> {
const res = await fetch(`/data/news/articles/${id}.json`);
return res.json();
}
// ページネーション対応
export async function getNewsPage(page: number, limit: number = 10) {
const index = await getNewsList();
const start = (page - 1) * limit;
const end = start + limit;
return {
articles: index.articles.slice(start, end),
totalPages: Math.ceil(index.articles.length / limit),
currentPage: page
};
}
メリットの比較
単一ファイル方式
- ✅ 実装が簡単 - ❌ スケーラビリティの問題 - ❌ メモリ使用量が増大 - ❌ 編集時のコンフリクト分割ファイル方式
- ✅ 高いスケーラビリティ - ✅ 効率的なメモリ使用 - ✅ 並行編集が容易 - ✅ CDNキャッシュの最適化 - ❌ 初期実装がやや複雑AIとの協働のコツ
1. 「なぜ」を説明する
markdown
「記事を個別ファイルに分割してください。
理由:将来的に1000件以上の記事を扱う予定で、
単一ファイルではパフォーマンスが低下するため」
2. 具体的な数値を示す
markdown
「このシステムは以下の規模を想定してください:
- 記事数: 1000件以上
- 月間追加数: 30-50件
- 同時編集者: 3-5名」
3. トレードオフを議論する
markdown
「実装の複雑さとスケーラビリティのトレードオフについて、
あなたの意見を聞かせてください」
まとめ
AIは優れたコーディングパートナーですが、長期的な視点やスケーラビリティについては人間が補完する必要があります。
- 重要なポイント:
- AIは「今動く」実装を優先する傾向がある
- スケーラビリティは明示的に要求する必要がある
- 設計段階でのレビューが重要
- 具体的な制約と数値を提示する
AIの特性を理解し、適切にガイドすることで、より良い設計と実装を実現できます。この経験を活かして、次のプロジェクトではより良い協働ができるでしょう。