vibe codingはDDDの夢を見るかもしれない

# Vibe Coding と DDD (ドメイン駆動設計) の相性に関する考察

## 1. はじめに

Vibe Codingという言葉を最近よく聞くようになりました。AIに自然言語でコードを書いてもらうという手法です。それとは別にDDDは少し前から注目されている設計手法で、ドメインの理解と言語化を重視します。

僕自身、claude codeでコードを各中で、DDDの考え方とvibe codingの親和性が高いではと考えたので、考えをまとめたいと思います。

## 2. Vibe Coding の概要

### Vibe Coding とは何か

Vibe Codingは簡単に言うと「AIに自然言語でコードを書いてもらう開発手法」です。GitHubのCopilotやChatGPTなどのAIツールに対して、人間が思いついた要件や仕様を自然言語で伝え、AIがそれを解釈してコードを生成します。

従来のプログラミングでは人間がすべてのコードを書く必要がありましたが、Vibe Codingではアイデアを言語化することが中心になります。

### Vibe Coding の主な特徴

Vibe Codingの最大の特徴は、コードを書く前の「思考の言語化」が重要になることです。従来のコーディングでは「どう実装するか」が焦点でしたが、Vibe Codingでは「何を実装したいのか」をいかに明確に説明できるかがカギになります。

また、AIとの対話的な開発が基本なので、要件の微調整や改善が素早く行えるのも大きな利点です。実装→確認→修正のサイクルがとても速くなります。

### Vibe Coding の強みと課題

Vibe Codingの強みは何といっても開発速度の向上です。特に定型的なコード生成の部分でAIの助けを借りることで、人間はより創造的な部分や設計に集中できます。

一方で課題もあります。AIが生成するコードの品質は入力の質に大きく依存します。つまり「人間がどれだけ明確に要件や意図を伝えられるか」がボトルネックになります。

### ボトルネックとしての人間要因

ここが重要なポイントなんですが、Vibe Codingの限界はAIではなく人間の側にあることが多いです。AIにどれだけ高性能なモデルを使っても、人間の指示が曖昧だったり、ドメイン知識が不足していたりすると、生成されるコードの質は下がります。つまり人間の入力や動作がボトルネックになります。

その質やスピードを上げるのに役立つのがDDDなのではないかと感じています


## 3. DDD (ドメイン駆動設計) の基本

### DDD の基本原則と目的

![ddd-context-domain-svg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179800/5f8c3160-5659-4c24-a841-2322f75315cf.png)

DDDは単なる設計パターンではなく、ソフトウェア開発の哲学と言えます。現実の課題から複雑なビジネスドメインを理解し、それをソフトウェアに反映させることが主な目的です。

DDDの本質は「ビジネスの専門家とソフトウェア開発者が同じ言語で会話できるようにする」ことにあります。これが、vibe codingと相性がいいと思った理由です。

### ユビキタス言語の重要性

DDDの中核概念の一つが「ユビキタス言語」です。これはプロジェクト内で統一された用語や概念を使うことで、誤解を減らし、コミュニケーションを円滑にする考え方です。

例えば、あるプロジェクトで「ユーザー」と「顧客」と「メンバー」が混在していると混乱しますよね。DDDでは、こういった言葉の定義を明確にし、一貫して使うことを推奨しています。

これはVibe Codingでも同様です。AIに指示を出す際に、一貫した言葉を使うことで、生成されるコードの品質が大きく向上します。

### コンテキストの分割

もう一つの重要な概念が「コンテキストの分割」です。これは大きなドメインを意味のある単位に分割するための考え方です。

たとえば、ECサイトなら「商品管理」「注文処理」「顧客情報」などが別々のコンテキストになりえます。それぞれのコンテキスト内では言葉の意味や関係性が明確になり、複雑さが軽減されます。

Vibe Codingでこの考え方を取り入れると、AIへの指示も「このコンテキスト内での処理」として明確に伝えられるようになります。システム全体を一度に考えるのではなく、分割された範囲ごとに考えることで、指示も理解しやすくなリます。

## 4. Vibe Coding と DDD の親和性

### 言語化の重要性という共通点

Vibe CodingとDDDの最大の共通点は「言語化の重要性」にあると思います。

Vibe Codingでは、AIにコードを生成してもらうために、人間が要件や意図を自然言語で表現する必要があります。ここでの表現力が出力の質を左右します。

DDDも同様に、ドメインの理解と表現を重視します。ユビキタス言語の構築過程は、まさに「ビジネスロジックの言語化」と言えるでしょう。

この言語化のプロセスが両者で共通しているため、DDDの技術をVibe Codingに応用すると非常に効果的なんです。

### コード構造の最適化

DDDを実践すると、自然と小さなファイルサイズのコードになる傾向があります。これは機能ごとに明確に分離された「エンティティ」「バリューオブジェクト」「サービス」などの要素に分けるからです。

小さなファイルは理解しやすく、AIにとっても「このファイルは何をするものか」を把握しやすくなります。Vibe Codingでコード生成を依頼する際も、明確な責務を持つ小さなコンポーネントごとに指示を出せるので、精度が向上します。

また、DDDによる命名規則（ドメイン用語を取り入れた命名など）は、コードの可読性を高めるだけでなく、AIへの指示の際にも一貫性をもたらします。

### 問題の分析とドメイン分解の方法論

DDDの強みの一つは、複雑な問題をドメインとコンテキストに分解する方法論を持っていることです。この分解能力は、Vibe Codingで大きな機能を実装する際に非常に役立ちます。

例えば、「ソーシャルメディアのタイムライン機能を実装して」と一度に指示するより、DDDの考え方で「投稿表示のドメイン」「「通知システムのドメイン」などに分解して指示する方が、AIは理解しやすく、質の高いコードを生成できます。

これは人間の認知負荷も減らすことになり、Vibe Codingの最大のボトルネックである「人間の指示の質とスピード」の向上につながります。

## 5. 課題と対策

### 学習曲線の問題

DDDもVibe Codingも、どちらも学習コストがそれなりにかかります。特にDDDは概念が抽象的で、初学者には難しく感じられがちです。

対策としては、小さなプロジェクトから始めるのがおすすめです。チーム全体でいきなり導入するのではなく、まずは小さな機能や一部のモジュールで試してみるのがいいでしょう。


### ツールとの統合の課題

現状のAIツールは、DDDの概念を完全に理解しているわけではありません。そのため、AIに対してDDDの文脈を説明する追加のプロンプトが必要になることがあります。

例えば「このコードはDDDのエンティティとして実装してください。以下の不変条件を持ちます...」のような形で、インストラクションなどに事前に仕込む必要があります。

これは面倒に感じるかもしれませんが、一度テンプレートを作ってしまえば、以降は再利用できるので効率的になります。

## 6. 将来性と展望

### AI と設計手法の進化

AIツールは日々進化しています。claude codeのように既存コードをリバースエンジニアリングしてコードを生成するものや、mcpのように外部のツールへアクセスする方法もあります。自分はpostgres-mcpを使ってDBからドメインへの変換処理などを生成していました。


### 新たなハイブリッドアプローチの可能性

最終的には、AIと人間の役割分担が再定義されると思います。人間はドメインの理解と表現、全体アーキテクチャの設計に集中し、AIは実装詳細を担当するという形です。

このハイブリッドアプローチでは、DDDの考え方が中核になるでしょう。人間がドメインモデルを設計し、それをAIに伝えることで、より高品質なソフトウェアが効率的に開発できるようになります。

## 7. まとめ

### 主要なメリットの再確認

Vibe CodingとDDDの組み合わせの主なメリットは以下の3点です。

1. 言語化プロセスの強化 - DDDの手法がVibe Codingに必要な「要件の明確化」を助ける
2. コード構造の最適化 - 小さく責務の明確なコンポーネントがAIとの協働に適している
3. 人間のボトルネック解消 - ドメイン理解と表現能力の向上がAIの出力品質を高める


それではよきvibe codingライフを