高品質なDiscord Bot - Devin AIエージェントと統合してDiscordから開発タスクを直接実行
⚠️ Beta Version: このプロジェクトはベータ版です。機能追加や変更が頻繁に行われる可能性があります。
- 🤖 Discord統合: ボットをメンションしてタスクを実行
- 🔄 リアルタイム更新: Discordスレッドで進行状況を確認
- 📊 セッション管理: 複数セッションの追跡と管理
- 🚀 プロセス復旧: 再起動時の自動セッション復旧
- ⚡ シンプル構成: Redis永続化による高速デプロイメント
- 🛡️ 型安全性: TypeScript完全対応
- 🎯 権限管理: ギルド別ロールベース制御
- 🔧 設定柔軟性: チャンネル・ギルド別カスタム設定
- 📈 包括的テスト: 139テストケースによる品質保証
- Node.js 18+
- Redis server
- Discord Bot Token(以下のAPI取得手順を参照)
- Devin API Key(以下のAPI取得手順を参照)
-
Discord Developer Portalにアクセス
-
新しいアプリケーションを作成
- 「New Application」をクリック
- アプリケーション名(例:Devin2Discord Bot)を入力
- 利用規約に同意して「Create」をクリック
-
Botアカウントを作成
- 左メニューから「Bot」を選択
- 「Add Bot」をクリック
- 確認ダイアログで「Yes, do it!」をクリック
-
Botトークンを取得
- Bot設定ページの「Token」セクションで「Copy」をクリック
⚠️ 重要: このトークンは絶対に他人と共有しないでください.env
ファイルのDISCORD_TOKEN
にコピーしたトークンを設定
-
Bot権限を設定
- 「Privileged Gateway Intents」で以下を有効化:
- ✅ MESSAGE CONTENT INTENT(メッセージ内容の読み取りに必要)
- ✅ SERVER MEMBERS INTENT(ギルドメンバー情報取得に必要)
- 「Bot Permissions」で以下の権限を設定:
- ✅ Send Messages
- ✅ Create Public Threads
- ✅ Send Messages in Threads
- ✅ Manage Messages
- ✅ Read Message History
- ✅ Use Slash Commands
- 「Privileged Gateway Intents」で以下を有効化:
-
BotをDiscordサーバーに招待
- 左メニューから「OAuth2」→「URL Generator」を選択
- 「Scopes」で「bot」にチェック
- 「Bot Permissions」で手順5の権限にチェック
- 生成されたURLをコピーしてブラウザで開く
- Botを招待したいサーバーを選択して「Authorize」
-
Devin開発者アカウント
- https://devin.ai/developers にアクセス
- アカウントをお持ちでない場合は新規登録
-
API Access申請
- ダッシュボードから「API Access」を選択
- 利用目的と組織情報を入力
- API利用規約に同意
-
APIキーを生成
- 承認後、「Generate API Key」をクリック
- APIキーをコピー
⚠️ 重要: このキーは安全に保管し、公開リポジトリにコミットしないでください
-
APIキーを設定
.env
ファイルのDEVIN_API_KEY
にコピーしたキーを設定
- APIキーは絶対にGitリポジトリにコミットしないでください
.env
ファイルは.gitignore
に含まれていることを確認してください- 本番環境では環境変数として設定することを強く推奨します
- APIキーが漏洩した場合は直ちに再生成してください
- 必要最小限の権限のみを付与してください
- 管理者権限は避け、個別の権限を選択してください
- 定期的に権限設定を見直してください
- リポジトリをクローン:
git clone <repository-url>
cd devin2discord
- 依存関係をインストール:
npm install
- 環境設定ファイルを作成:
cp .env.example .env
.env
ファイルを設定:
# 上記で取得したDiscord Bot Tokenを設定
DISCORD_TOKEN=your_discord_bot_token_here
# 上記で取得したDevin API Keyを設定
DEVIN_API_KEY=your_devin_api_key_here
# Redis接続URL(デフォルトのローカル設定)
REDIS_URL=redis://localhost:6379
# 実行環境(development/production)
NODE_ENV=development
# ログレベル(error/warn/info/debug)
LOG_LEVEL=info
DISCORD_TOKEN
とDEVIN_API_KEY
は上記のAPIキー取得手順で得たものを必ず設定してください.env
ファイルは絶対にGitにコミットしないでください(.gitignore
に含まれています)- 各環境(開発/本番)で適切な値を設定してください
- Redisサーバーを起動:
Dockerを使用する場合(推奨):
# Redis Dockerコンテナを起動
docker run -d --name redis -p 6379:6379 redis:7-alpine
# コンテナが起動しているか確認
docker ps
ローカルインストールの場合:
# macOSの場合(Homebrew使用)
brew install redis
redis-server
# Ubuntuの場合
sudo apt-get install redis-server
sudo systemctl start redis-server
# Redis接続確認
redis-cli ping
# 応答: PONG
- 動作確認とビルド:
初回セットアップ確認:
# 依存関係とTypeScriptのビルド確認
npm run build
# テスト実行(139テストケース)
npm test
# コード品質チェック
npm run lint
# 上記がすべて成功したら設定完了
アプリケーション起動:
# プロダクション用
npm run build
npm start
# 開発用(ホットリロード対応・推奨)
npm run dev
# デバッグモード
LOG_LEVEL=debug npm run dev
- ✅ Discord Bot Tokenが正しく設定されている
- ✅ Devin API Keyが正しく設定されている
- ✅ Redisサーバーが起動している(
redis-cli ping
で確認) - ✅ BotがDiscordサーバーに適切な権限で参加している
- ✅ 必要なロールがユーザーに付与されている
-
Create
.env
file with your tokens -
Start with Docker Compose:
docker-compose up -d
Discordでボットをメンションして以下のコマンドを使用:
@devin-bot run <タスク>
- 新しいタスクを実行@devin-bot status
- アクティブなセッションを確認@devin-bot stop <session_id>
- 実行中のセッションをキャンセル@devin-bot help
- ヘルプメッセージを表示
@devin-bot run src/auth.jsのログインバグを修正して単体テストを追加してください
ボットの動作:
- タスク専用のスレッドを作成
- Devinセッションを開始
- リアルタイムで進行状況を更新
- 完了時に最終結果を表示
各ギルドで以下の権限を設定可能:
- 許可されたロール: コマンドを実行できるロール
- 有効チャンネル: ボットが動作するチャンネル
- 無効チャンネル: ボットを無効にするチャンネル
- 同時セッション数: ギルドあたりの最大セッション数
ボットの動作をカスタマイズ:
{
"bot": {
"commandPrefix": "@devin-bot",
"responseTimeout": 300000,
"pollInterval": 30000,
"maxConcurrentSessions": 10
},
"guilds": {
"default": {
"allowedRoles": ["Developer", "Admin"],
"maxConcurrentSessions": 5,
"enabledChannels": [],
"disabledChannels": []
},
"your-guild-id": {
"allowedRoles": ["Tester"],
"maxConcurrentSessions": 2,
"enabledChannels": ["dev-channel"],
"disabledChannels": ["general"]
}
},
"devin": {
"defaultTimeout": 1800000,
"maxRetries": 3,
"retryDelay": 5000
},
"redis": {
"keyPrefix": "devin2discord:",
"sessionTtl": 86400
}
}
変数 | 説明 | デフォルト |
---|---|---|
DISCORD_TOKEN |
Discord botトークン | 必須 |
DEVIN_API_KEY |
Devin APIキー | 必須 |
REDIS_URL |
Redis接続URL | redis://localhost:6379 |
NODE_ENV |
実行環境 | development |
LOG_LEVEL |
ログレベル | info |
Discord Client ←→ Discord Bot Service ←→ Redis (セッション管理)
↓
Devin API Client
↓
Devin API
- 単一サービス: Node.jsサービス1つによる簡潔なデプロイメント
- Redis永続化: TTL付きRedisによるセッション状態管理
- プロセス復旧: 再起動時の実行中セッション自動復旧
- スレッド管理: 各タスクに専用Discordスレッドを作成
- 型安全性: TypeScript完全対応による堅牢な開発
src/
├── commands/ # コマンドシステム
│ ├── command-handler.ts # コマンドパーサーとバリデーション
│ └── commands.ts # 個別コマンド実装
├── services/ # コアサービス
│ ├── discord-bot.ts # Discord bot実装
│ ├── devin.ts # Devin APIクライアント
│ └── redis.ts # Redisサービス
├── types/ # TypeScript型定義
├── utils/ # ユーティリティ
│ ├── config.ts # 設定管理
│ ├── errors.ts # エラーハンドリング
│ └── logger.ts # ロギング
└── index.ts # アプリケーションエントリーポイント
tests/
├── unit/ # 単体テスト
├── integration/ # 統合テスト
└── mocks/ # モックオブジェクト
npm run dev
- ホットリロード付き開発モードnpm run build
- TypeScriptビルドnpm test
- テスト実行 (139テストケース)npm run test:watch
- 監視モードテストnpm run test:coverage
- カバレッジレポートnpm run lint
- ESLint実行
- テストカバレッジ: 単体テスト + 統合テスト
- 型安全性: TypeScript strict mode
- コード品質: ESLint + Prettier対応
- CI/CD対応: GitHub Actions対応
-
ボットが応答しない
- Discordトークンと権限を確認
- ボットがサーバーに適切なロールで参加しているか確認
config.json
のallowedRoles
設定を確認
-
Devin接続エラー
- APIキーが正しいか確認
- APIエンドポイントURLを確認
- ネットワーク接続を確認
-
セッション復旧が動作しない
- Redis接続を確認
- Redis永続化が有効になっているか確認
- セッションTTL設定を確認
-
権限エラー
- ユーザーのロールが
allowedRoles
に含まれているか確認 - チャンネルが
enabledChannels
に含まれているか確認 disabledChannels
にチャンネルが含まれていないか確認
- ユーザーのロールが
デバッグ用ログの確認方法:
# Docker
docker-compose logs -f bot
# ローカル開発
npm run dev
# 本番環境
npm start
# 特定ログレベル
LOG_LEVEL=debug npm run dev
- テスト実行:
npm test
- 型チェック:
npx tsc --noEmit
- カバレッジ確認:
npm run test:coverage
MIT License
プロジェクトへの貢献を歓迎します!
- リポジトリをフォーク
- 機能ブランチを作成:
git checkout -b feature/amazing-feature
- 変更を実装
- テストを追加/更新:
npm test
- コード品質チェック:
npm run lint
- TypeScriptビルド確認:
npm run build
- コミット:
git commit -m 'feat: add amazing feature'
- プッシュ:
git push origin feature/amazing-feature
- プルリクエストを作成
- TypeScript strict mode準拠
- ESLint規則に従う
- 新機能には必ずテストを追加
- コミットメッセージはConventional Commits形式
- すべてのテストが通ることを確認
Issuesにて報告・提案をお願いします。
- Discord.js - Discord API wrapper
- Redis - インメモリデータベース
- TypeScript - 型安全なJavaScript
- Jest - テストフレームワーク
開発チーム: @hawkymisc