0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slack × AIエージェントの設計思想をClean ArchitectureとDDDで考える

Last updated at Posted at 2025-05-20

この記事では、Slackからの質問に応答するAIエージェントを構築する際に、設計思想(Clean Architecture × DDD)を整理・検討してみました。

📘 Slack MCP Agent - Architecture Guide

🎯 設計思想:Clean Architecture × DDD

本プロジェクトは Clean ArchitectureDomain-Driven Design (DDD) を基盤とし、変更容易性・再利用性・テスト容易性を実現します。

  • ビジネスロジックは外部依存から独立
  • ユースケースがドメインとインフラを仲介
  • I/Oは外部に押し出す
  • 各層の責務を厳格に分離

📊 アーキテクチャ図(Mermaid)


🗂 ディレクトリと責務

ディレクトリ 説明
app/domain/models/ ビジネスの核を成す Entity / ValueObject。状態と振る舞いを定義
app/domain/repositories/ Repository のインターフェース。インフラ層に依存しない抽象
app/usecases/ アプリケーションの振る舞い。外部の要求を実現する処理単位
app/infrastructure/ 外部との接続(DB, APIクライアント, Adapter, 設定など)
app/interfaces/ FastAPIによる Web / Slack のエンドポイントと依存注入層
app/agent/ LangChain / MCP による AI 構成。Prompt定義・Runner実装など
app/shared/ JWT, 認証、Slackヘルパーなどの共通処理
app/core/ 設定ファイル読込・スケジューラなど汎用サービス
app/database/ DB初期化など、1回限りの処理群(DDLなど)

🔁 各層の依存関係(矢印の方向)

UI (HTML/Slack)
  ↓
Interfaces (FastAPI Routes)
  ↓
Usecases (Application Services)
  ↓
Domain (Entity / Interface)
  ↑
Infrastructure (DB/API/Adapter)

依存の向きはすべて内側へ


🚀 モジュール追加時の拡張指針

例:X(例:Teams連携)を追加したい場合

対象 対応内容
domain/ 必要があれば ValueObject を定義(例:Message)
usecases/teams/ Teams 連携ユースケースを新設(例:teams_usecase.py)
infrastructure/apis/teams_client.py Teams API クライアントを新設
interfaces/routes/teams.py POSTエンドポイントやWebhookイベントを追加
shared/utils/teams_helper.py 共通フォーマット処理が必要ならヘルパーで切り出し

ポイント:

  • 常に「ビジネスロジック→ユースケース→インフラ→I/O」の責務分離を維持
  • インターフェースの実装(implements)はインフラ層に限定

✅ ベストプラクティスまとめ

  • ドメイン層は最も重要、かつ不変
  • ユースケース層は「何をするか」に集中
  • インフラ層は「どう実現するか」に限定
  • インターフェース層は「どこから来たか」の責務

📌 推奨資料


📝 まとめ

  • 本記事では、Slackからの質問に応答するAIエージェントの設計思想を、Clean ArchitectureとDDDに基づいて整理しました。
  • 各層の責務を明確に分離することで、拡張性・テスト容易性・保守性を高めることができます。
  • Mermaidを活用したアーキテクチャ図やディレクトリ構成の整理により、全体像が直感的に把握できるようにしました。

🔭 今後の展望・課題

  • ChatGPTだけでなく、ClaudeやGeminiなど複数のLLMへの切り替え対応
  • SaaS連携の追加(例:Notion, Confluence, Miroなど)に対応するユースケースの設計
  • WebSocketベースのブラウザ連携や、Slackとのマルチチャネル対応
  • LangGraphやAgentExecutorなどを使った状態管理付きエージェントの導入
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?