DewAIは、ローカルのOllama AIモデルを使用したデスクトップチャットアプリケーションです。Tauriを使用してRustバックエンドとReactフロントエンドを組み合わせ、プライベートで高速なAI対話体験を提供します。
- 完全プライベート: すべてのAI処理がローカルで実行
- 高速: Tauriによるデスクトップアプリ
- モダンUI: Chakra UI v3による美しいインターフェース
- カスタマイズ可能: AI個性設定(名前、役割、説明)
- リアルタイム: 即座のAI応答とチャット履歴
- 安全な永続化: SQLite にセッションと分析を保存(ローカルファイル)
- Node.js (v18以上)
- Rust (最新版)
- Ollama がインストールされ、
gemma3:4bモデルがダウンロード済み
# Ollamaのインストール(未インストールの場合)
# https://ollama.ai からダウンロード
# モデルのダウンロード
ollama pull gemma3:4b
# Ollamaサーバーの起動(デフォルト: localhost:11434)
ollama serve# リポジトリのクローン
git clone https://github.com/enoki003/DewAI.git
cd DewAI
# 依存関係のインストール
npm install
# 開発サーバーの起動
npm run dev┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ React Frontend │ │ Tauri Backend │ │ Ollama API │
│ │ │ │ │ │
│ • Chakra UI v3 │◄──►│ • Rust Commands │◄──►│ • gemma3:4b │
│ • TypeScript │ │ • HTTP Client │ │ • localhost:11434│
│ • HashRouter │ │ • JSON API │ │ • Local Models │
└─────────────────┘ └─────────────────┘ └─────────────────┘
▲
│
└── SQLite (tauri-plugin-sql) にセッション/分析を永続化
DewAI/
├── src/ # Reactフロントエンド
│ ├── components/
│ │ ├── EnhancedChatAPP.tsx # 旧チャットUI(参考)
│ │ └── ui/ # Chakra UI プロバイダー/通知
│ ├── hooks/
│ │ └── useAIModel.tsx # AI通信・モデル管理(Ollama)
│ ├── pages/
│ │ ├── start.tsx # スタート(導線)
│ │ ├── home.tsx # ホーム
│ │ ├── config.tsx # AI設定(名前/役割/説明)
│ │ ├── sessions.tsx # セッション一覧/再開
│ │ ├── database.tsx # DB情報表示
│ │ ├── play.tsx # メインチャット
│ │ └── play/ # Playページの分割モジュール(2025-08)
│ │ ├── AnalysisPanel.tsx # 議論分析の共通パネル
│ │ ├── PlayTypes.ts # BotProfile/TalkMessage等の型
│ │ └── useTurn.ts # 次ターン算出の純関数フック
│ ├── utils/
│ │ └── database.ts # SQLite CRUD・スキーマ初期化
│ └── main.tsx # エントリ(Provider + HashRouter)
├── src-tauri/ # Rustバックエンド
│ ├── src/
│ │ ├── main.rs # Tauriコマンド & Ollama連携
│ │ ├── lib.rs
│ │ └── prompts.rs
│ ├── tauri.conf.json
│ └── Cargo.toml
├── docs/
│ ├── storage.md # SQLiteスキーマ/保存仕様
│ ├── architecture.md # システム構成/フロー
│ └── user-guide.md # 利用ガイド
└── package.json
- データベース: SQLite(
@tauri-apps/plugin-sql) - DBファイル: アプリローカル(例:
dewai.db) - スキーマ:
sessions,session_analysis,session_meta(必要インデックス/PRAGMA含む) - 振る舞い:
- セッションの作成/更新時に自動スキーマ初期化
- 参加者編集は
participantsJSON を更新 - 分析や要約は
session_analysisに保存 - セッション削除で関連データを自動削除(FK ON DELETE CASCADE)
詳細は docs/storage.md を参照してください。
# 開発モード(ホットリロード付き)
npm run dev
# 本番ビルド
npm run build
# Tauri開発モード
npm run tauri dev
# Tauri本番ビルド
npm run tauri build
# プレビュー
npm run preview
# 配布用リリースビルド
npm run build:release
# Docker開発環境の構築
npm run build:docker
# Docker開発環境の起動
npm run dev:docker
# Docker開発環境の再ビルド&起動
npm run dev:docker-build必要に応じて、TypeDocでコードレベルのAPIドキュメントを生成できます。
- 生成:
npm run docs:api(設定はtypedoc.json) - 出力:
docs/api/(index.htmlをブラウザで開く) - プレビューサーバー:
npm run docs:preview→ http://localhost:5050 - 対象:
src/配下(src-tauri/**やテストは除外) - 変更点を反映したいときは再度
npm run docs:api
GitHub Pages 等で公開する場合は、docs/ 配下をそのまま公開対象にできます。
build-release.batchmod +x build-release.sh
./build-release.shnpm install
npm run build
npm run tauri build生成されたパッケージは src-tauri/target/release/bundle/ に格納されます。
- 設定(Config): AIの「名前・役割・説明」を設定。ユーザー参加の有無も選択。
- プレイ(Play):
- 下部入力欄から発言(ユーザー参加ON時)。
- 右上「分析」ボタンで分析パネルを開閉(モバイルはオーバーレイ)。
- ヘッダーの「AI編集」で参加者編集ドロワーを開き、AIの追加/削除/編集が可能。
- 戻る操作時は保存完了を短時間待機するため、直近の発言が失われにくい。
- セッション(Sessions): 過去のセッション一覧と再開。
- データベース(Database): 保存状況の参考情報。
- 要約(summary)
- 初回: 発言数が12件以上でフル要約を実行
- 以降: 直近の追加が4件以上でインクリメンタル要約
- UI/処理は
messagesの変更に同期したデバウンス済みuseEffectで発火
- 分析(analysis)
- 3ターン毎(
turnCount % 3 === 0)に実行 - 解析結果はJSON整形/検証後に保存し、共通パネル
AnalysisPanelで表示
- 3ターン毎(
- Playページをモジュール分割(
pages/play/)AnalysisPanel.tsx: 分析UIを共通化(デスクトップ/モバイルで再利用)PlayTypes.ts: BotProfile/TalkMessage/DiscussionAnalysis 型を集約useTurn.ts: 次ターン算出を純関数化し再利用
- トリガーの安定化
- 要約/分析は
useEffect+ デバウンスで最新stateを基準に発火 - 3ターン毎の分析で重複起動を防止(最後に分析したターンを保持)
- 要約/分析は
- レース条件対策
- AI自動連鎖時の多重実行を抑止するガードを導入
- スクロール体験
- 最下部検知で「↓ 新しいメッセージを表示する」ボタンを表示
- 自動スクロールはユーザーの手動スクロールを尊重
- React 18
- TypeScript
- Chakra UI v3(HashRouter, Provider 構成)
- React Router (HashRouter)
- Vite
- Rust / Tauri
- reqwest(Ollama HTTP クライアント)
- tokio
- @tauri-apps/plugin-sql (SQLite) ← 追加
- Ollama(localhost:11434)
- gemma3:4b(デフォルトモデル)
- アプリ起動後、「新しく開始」するをクリックしAIの設定をする
- 「議論を開始する」をクリックで議論を開始
- 必要に応じて「分析」を開き、論点/立場/対立/共通認識を確認
- 参加者を変更する場合は「AI編集」から保存
- 「続きから開始する」で過去の議論を再開可能
- すべてのAI処理はローカルで実行
- インターネット接続は不要(Ollamaモデル使用時)
- チャット履歴はSQLiteにローカル保存
- 外部サーバーにデータ送信なし