# Chatwoot

## 概要

Chatwootは、Intercom、Zendesk、Salesforce Service Cloudなどの代替となるオープンソースのモダンなカスタマーサポートプラットフォームです。マルチチャネル対応のオムニチャネルカスタマーサポートを提供し、セルフホスト型で運用することで顧客データの完全なコントロールが可能です。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| Captain（AIエージェント） | 自動応答、一般的なクエリ処理、エージェントの作業負荷軽減を行うAIエージェント機能 |
| オムニチャネルサポート | ウェブサイトライブチャット、メール、Facebook、Instagram、Twitter、WhatsApp、Telegram、Line、SMS等の統合受信箱 |
| ヘルプセンターポータル | ヘルプ記事、FAQ、ガイドを公開するナレッジベース機能 |
| コラボレーション | プライベートノート、@メンション、ラベル、定型文応答、自動アサイン |
| 顧客データ管理 | コンタクト管理、セグメント、カスタム属性、プレチャットフォーム |
| 外部連携 | Slack、Dialogflow、Shopify、Google翻訳、Linear等との統合 |
| レポート・分析 | 会話、エージェント、インボックス、ラベル、チームレポート、CSAT |

## 技術スタック

### コア

- フレームワーク: Ruby on Rails 7.1
- 言語: Ruby 3.4.4 / JavaScript (ES6+)
- フロントエンド: Vue.js 3
- データベース: PostgreSQL（pgvector拡張）
- キャッシュ/キュー: Redis
- バックグラウンドジョブ: Sidekiq
- ビルドツール: Vite
- パッケージマネージャ: pnpm 10.x
- Node.js: 24.x

### 主要ライブラリ

- **認証**: Devise、devise_token_auth、JWT、Pundit
- **状態管理**: Vuex、Pinia
- **UIコンポーネント**: Tailwind CSS 3
- **国際化**: vue-i18n
- **リアルタイム通信**: ActionCable (WebSocket)
- **検索**: Searchkick、OpenSearch
- **AI/LLM**: ruby-openai、ai-agents
- **ストレージ**: ActiveStorage（S3、Azure Blob、GCS対応）
- **APM**: Sentry、NewRelic、Datadog、Elastic APM
- **テスト**: RSpec、Vitest

## ディレクトリ構成

```
chatwoot-develop/
├── app/                    # Railsアプリケーションコア
│   ├── controllers/        # APIおよびWebコントローラー
│   ├── models/             # ActiveRecordモデル
│   ├── services/           # ビジネスロジックサービス
│   ├── jobs/               # Sidekiqバックグラウンドジョブ
│   ├── mailers/            # メール送信処理
│   ├── views/              # ERBテンプレート
│   └── javascript/         # フロントエンドコード
│       ├── dashboard/      # 管理ダッシュボード（Vue.js）
│       ├── widget/         # チャットウィジェット
│       ├── portal/         # ヘルプセンターポータル
│       ├── sdk/            # JavaScriptSDK
│       └── shared/         # 共通コンポーネント
├── config/                 # Rails設定ファイル
│   ├── locales/            # 多言語対応ファイル
│   ├── initializers/       # 初期化設定
│   └── routes.rb           # ルーティング定義
├── db/                     # データベース関連
│   ├── migrate/            # マイグレーションファイル
│   ├── schema.rb           # データベーススキーマ
│   └── seeds.rb            # シードデータ
├── enterprise/             # Enterprise版機能
│   ├── app/                # Enterprise固有のアプリコード
│   ├── config/             # Enterprise固有の設定
│   └── lib/                # Enterprise固有のライブラリ
├── lib/                    # カスタムライブラリ
│   ├── integrations/       # 外部サービス統合
│   ├── captain/            # AIエージェント機能
│   └── tasks/              # Rakeタスク
├── spec/                   # テストコード
├── swagger/                # API仕様書
├── docker/                 # Dockerファイル
└── deployment/             # デプロイ設定
```

## セットアップ

### 必要条件

- Ruby 3.4.4（rbenvでの管理を推奨）
- Node.js 24.x
- pnpm 10.x
- PostgreSQL（pgvector拡張付き）
- Redis

### インストール手順

1. Rubyバージョンをインストール:
   ```bash
   rbenv install $(cat .ruby-version)
   ```

2. rbenvを初期化:
   ```bash
   eval "$(rbenv init -)"
   ```

3. 依存関係をインストール:
   ```bash
   bundle install && pnpm install
   ```

4. 環境変数を設定:
   ```bash
   cp .env.example .env
   # .env ファイルを編集して必要な値を設定
   ```

5. データベースをセットアップ:
   ```bash
   bundle exec rails db:create db:migrate db:seed
   ```

### Docker環境

Docker Composeを使用した開発環境の起動:
```bash
docker-compose up
```

## 開発

### 開発サーバー起動

```bash
pnpm dev
# または
overmind start -f ./Procfile.dev
```

### Lint

```bash
# JavaScript/Vue
pnpm eslint
pnpm eslint:fix

# Ruby
bundle exec rubocop -a
```

### テスト実行

```bash
# JavaScriptテスト
pnpm test
pnpm test:watch

# Rubyテスト
bundle exec rspec spec/path/to/file_spec.rb

# 特定行のテスト
bundle exec rspec spec/path/to/file_spec.rb:LINE_NUMBER
```

### コードスタイル

- **Ruby**: RuboCopルールに従う（最大行長150文字）
- **Vue/JS**: ESLint（Airbnb base + Vue 3推奨）
- **Vueコンポーネント**: PascalCase
- **イベント**: camelCase
- **国際化**: テンプレート内の文字列は必ずi18nを使用
- **スタイリング**: Tailwind CSSユーティリティクラスのみ使用
