YAGNI
You Aren't Gonna Need It - 今必要でない機能を先回りして実装しない原則
YAGNI とは
YAGNI (You Aren't Gonna Need It) は、今必要でない機能を先回りして実装しない原則である。エクストリームプログラミング (XP) の Ron Jeffries が提唱した。「将来必要になるかもしれない」という推測に基づく実装は、ほとんどの場合使われずに技術的負債になる。
違反の例
違反の例を示す。
// ❌ YAGNI 違反: 今は JSON しか使わないのに複数フォーマットに対応
interface Serializer<T> {
serialize(data: T): string;
deserialize(raw: string): T;
}
class JsonSerializer<T> implements Serializer<T> { /* ... */ }
class XmlSerializer<T> implements Serializer<T> { /* ... */ }
class CsvSerializer<T> implements Serializer<T> { /* ... */ }
class SerializerFactory { /* ... */ }
// ✅ YAGNI: 今必要な JSON だけ
function toJson<T>(data: T): string { return JSON.stringify(data); }
// ❌ YAGNI 違反: 今は 1 つの DB しか使わないのに抽象化
class AbstractRepository<T> { /* ... */ }
class DynamoDBRepository<T> extends AbstractRepository<T> { /* ... */ }
class PostgresRepository<T> extends AbstractRepository<T> { /* ... */ }
// ✅ YAGNI: DynamoDB を直接使う
async function getUser(id: string) {
return db.get({ TableName: 'users', Key: { id } });
}
YAGNI vs 拡張性
YAGNI は「拡張性を考えるな」ではなく「今使わない拡張ポイントを実装するな」という原則だ。
| 判断 | 例 |
|---|---|
| ✅ 今必要 | バリデーション、エラーハンドリング、ログ |
| ✅ 設計で考慮 | インターフェースの安定性、データ構造の拡張性 |
| ❌ 今実装しない | 使う予定のない API エンドポイント |
| ❌ 今実装しない | 要件にない管理画面 |
KISS・DRY との関係
KISS ・ DRY との関係を以下に整理する。
| 原則 | 問いかけ |
|---|---|
| YAGNI | 「今それは本当に必要か?」 |
| KISS | 「もっとシンプルにできないか?」 |
| DRY | 「同じことを 2 回書いていないか?」 |
YAGNI は機能の取捨選択、KISS は実装の複雑さ、DRY はコードの重複に焦点を当てる。3 つは補完関係にある。
AWS アーキテクチャでの YAGNI
AWS アーキテクチャでの YAGNI を図で示す。
❌ 初期段階で: API Gateway → Lambda → SQS → Lambda → SNS → Lambda → DynamoDB
✅ 初期段階で: API Gateway → Lambda → DynamoDB
→ 負荷が増えたら SQS を追加
→ 通知が必要になったら SNS を追加
マイクロサービスやイベント駆動アーキテクチャは強力だが、トラフィックが少ない初期段階では過剰設計だ。
判断基準
- 「将来必要になるかも」→ 必要になってから実装する
- 「念のため」→ 念のための実装は大抵使われない
- 「汎用的にしておこう」→ 3 回目の重複が出てから汎用化する
より深く学ぶには関連書籍が役立つ。
この記事は役に立ちましたか?
関連用語
KISS 原則
Keep It Simple, Stupid - 設計をできるだけシンプルに保つことを求める原則
SOLID 原則
オブジェクト指向設計の 5 つの基本原則で、保守性と拡張性の高いコードを実現する
コードの不吉な匂い
リファクタリングが必要であることを示唆するコード上の兆候や構造的な問題のパターン
オニオンアーキテクチャ
ドメインロジックを中心に据え、外側の層が内側に依存する同心円状のアーキテクチャ
クリーンアーキテクチャ
ビジネスロジックを外部の技術的詳細から分離し、依存関係を内側に向けることで変更に強い設計を実現するアーキテクチャ原則
C4 Model
ソフトウェアアーキテクチャを 4 つの抽象レベルで図示するモデル
関連する記事
1 万行のコードより 1 冊の設計書が勝つ場面
大量のコードを書く力と、適切な設計を選ぶ力は別物です。コード量では解決できない問題に直面したとき、設計の知識がどう効くのかを具体例で解説します。
本棚を見ればエンジニアのレベルがわかる
エンジニアの本棚に並ぶ本の構成は、その人のスキルレベルとキャリアの方向性を映し出します。本棚の変遷パターンから、自分の現在地と次のステップを読み解く方法を紹介します。
技術書の知識を定着させる間隔反復法 - 読んだのに忘れる問題を解決する
技術書を読んでも内容を忘れてしまう原因を認知科学の観点から分析し、間隔反復法を使って知識を長期記憶に定着させる具体的な方法を紹介します。