Contents
前提条件と環境設定
このセクションでは、OpenClaw と Discord を連携させるために必須となるソフトウェア・ツール・アカウントを整理します。事前にすべて揃えておくことで、後続の手順でつまずくリスクを最小化できます。
Node.js と OpenClaw のインストール
Node.js は LTS(長期サポート)版を使用することが推奨されています。OpenClaw は npm パッケージとして配布されており、npm install -g openclaw@latest で最新安定版を取得できます。
|
1 2 3 4 5 6 7 |
# Node.js (v18.x 以上) のインストール例(Ubuntu) curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs # OpenClaw のグローバルインストール npm install -g openclaw@latest |
ポイント:バージョン確認は
node -v、openclaw --versionで実行してください。
推奨 OS と開発環境
| OS | 主な利点 |
|---|---|
| Ubuntu 22.04 LTS | パッケージ管理が容易、サーバー運用に最適 |
| macOS 14 (Ventura) | Homebrew でのインストールがシンプル |
| Windows 11 (WSL2 推奨) | Linux 環境と同様のコマンドが利用可能 |
環境変数の初期設定
機密情報(Discord トークン等)は 環境変数 で管理し、コードやリポジトリに平文を書かないよう徹底します。.env ファイルを使用する場合は必ず .gitignore に追加してください。
|
1 2 3 |
# .env の例(プロジェクトルートに配置) DISCORD_BOT_TOKEN=YOUR_DISCORD_BOT_TOKEN |
Discord Bot の作成と権限設定
Discord 側で Bot を用意し、OpenClaw が必要とする最小限の権限だけを付与します。最新のインテントやスコープ情報は公式ドキュメント(Gateway Intents)をご参照ください。
開発者ポータルでアプリケーション作成
- https://discord.com/developers/applications にアクセスし、右上の New Application をクリック。
- アプリ名を入力して Create → 作成したアプリの設定画面へ遷移。
Bot の追加とトークン取得
- 左メニューの Bot タブを選択し、Add Bot → Yes, do it!。
- TOKEN 欄の Copy ボタンでトークンを取得し、前節で説明した環境変数
DISCORD_BOT_TOKENに設定します。
セキュリティ注意点:トークンは一度でも外部に漏れると不正利用されます。取得後すぐに環境変数へ保存し、コードやログに出力しないようにしてください。
必要な Gateway Intents と権限
OpenClaw の Discord プラグインが使用するのは以下の Privileged Gateway Intents と最小スコープです。2024 年以降も変更される可能性があるため、常に公式ドキュメントを確認してください。
| 項目 | 設定方法 |
|---|---|
MESSAGE CONTENT INTENT |
Bot タブの Privileged Gateway Intents でオンにする |
| スコープ | bot と applications.commands を選択(OAuth2 → URL Generator) |
| 権限 | Send Messages, Read Message History, Use Slash Commands(十進数 3072) |
生成された招待URLを使用して、Bot を対象サーバーに追加します。
OpenClaw 用 Discord プラグインの導入
公式リポジトリからプラグイン本体を取得し、設定ファイルに Bot トークンとチャンネル ID だけを書き込めば完了です。ここでは シークレット管理 の具体例も併せて紹介します。
リポジトリのクローンと依存パッケージインストール
|
1 2 3 4 5 6 7 |
# 公開リポジトリ(2024 年時点で確認済み) git clone https://github.com/openclaw/openclaw-discord-plugin.git cd openclaw-discord-plugin # 推奨:npm ci で lockfile に基づく確実なインストール npm ci |
設定ファイルの記述例(JSON / YAML)
config.json(JSON)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "discord": { "token": "${DISCORD_BOT_TOKEN}", "channelId": "123456789012345678", "gatewayIntents": ["GUILDS", "GUILD_MESSAGES"] }, "connection": { "mode": "websocket", "port": 8080 } } |
settings.yaml(YAML)
|
1 2 3 4 5 6 7 8 9 10 11 |
discord: token: ${DISCORD_BOT_TOKEN} channelId: "123456789012345678" gatewayIntents: - GUILDS - GUILD_MESSAGES connection: mode: websocket port: 8080 |
ポイント:
${DISCORD_BOT_TOKEN}は環境変数展開を利用しています。直接トークンを書かないことで、リポジトリに機密情報が流出するリスクを排除します。
Secret Manager を用いた安全なトークン管理
GCP Secret Manager の設定手順(例)
- シークレット作成
bash
gcloud secrets create discord-bot-token --replication-policy="automatic"
echo -n "YOUR_DISCORD_BOT_TOKEN" | gcloud secrets versions add discord-bot-token --data-file=- - サービスアカウントに権限付与
bash
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:my-bot-sa@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor" - アプリ起動時にシークレットを取得(Node.js の例)
js
const {SecretManagerServiceClient} = require('@google-cloud/secret-manager');
const client = new SecretManagerServiceClient();
async function getToken() {
const [version] = await client.accessSecretVersion({
name: 'projects/
});
return version.payload.data.toString('utf8');
}
process.env.DISCORD_BOT_TOKEN = await getToken();
AWS Secrets Manager の場合
| 手順 | コマンド例 |
|---|---|
| シークレット作成 | aws secretsmanager create-secret --name discord-bot-token --secret-string '{"token":"YOUR_DISCORD_BOT_TOKEN"}' |
| IAM ポリシー付与 | aws iam attach-user-policy --user-name botUser --policy-arn arn:aws:iam::aws:policy/SecretsManagerReadWrite |
| SDK で取得(Node.js) | const secret = await client.getSecretValue({ SecretId: 'discord-bot-token' }).promise(); process.env.DISCORD_BOT_TOKEN = JSON.parse(secret.SecretString).token; |
リーク防止策まとめ
- 環境変数・シークレットマネージャ以外にトークンを記載しない。
- CI/CD パイプラインでも同様にシークレットストアから注入し、平文を書き込まない。
.gitignoreに.env,config.json,settings.yamlを必ず追加。
起動・テスト手順と典型的なエラー対処
設定が完了したらプラグインを起動し、Discord 上で期待どおりに応答するか確認します。ここでは デバッグモード でのログ取得方法と、よくあるエラーへの具体的対応策を示します。
起動コマンドとログの確認
|
1 2 3 |
# デバッグレベルで起動(推奨) npm run start:discord -- --log-level debug |
標準出力例
|
1 2 3 |
[DEBUG] WebSocket server listening on ws://0.0.0.0:8080 [INFO ] Bot ready – logged in as MyOpenClawBot#1234 |
エラーログは自動的に logs/error.log に出力されます。問題が発生した際はまずこのファイルを確認してください。
テストメッセージでの動作検証
- Bot が参加しているテキストチャンネルで
!pingと送信 - 返信として
Pong!(またはカスタム応答)が返ってくれば接続成功
テストコマンドは OpenClaw のデフォルトプラグインに含まれるものです。独自コマンドを追加した場合は同様の手順で確認できます。
代表的エラーと対策表
| エラー | 主な原因 | 推奨対処 |
|---|---|---|
TokenInvalidError |
トークンが誤っている・期限切れ | 開発者ポータルから新しいトークンを取得し、シークレットストアに更新 |
MissingIntentError |
必要な Gateway Intent が無効化されている | Bot タブの Privileged Gateway Intents で MESSAGE CONTENT INTENT をオンにする |
EADDRINUSE: address already in use |
設定ポートが他プロセスと競合 | config.json の connection.port を空きポート(例:8090)へ変更 |
WebSocketHandshakeError |
ファイアウォールやネットワーク制限 | サーバー側で対象ポートのインバウンドを許可し、外部からの接続が可能か確認 |
RateLimited |
Discord API のレートリミット超過 | コマンド実行間隔を調整し、必要ならバックオフロジックを実装 |
本番運用のベストプラクティス
開発環境から本番へ移行する際は、プロセスの自動復旧・機密情報保護・ネットワーク制御 の 3 点に重点を置きます。
プロセスマネージャでの自動再起動設定
systemd ユニット例(Ubuntu/Debian)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# /etc/systemd/system/openclaw-discord.service [Unit] Description=OpenClaw Discord Plugin After=network-online.target Wants=network-online.target [Service] Type=simple WorkingDirectory=/opt/openclaw-discord-plugin ExecStart=/usr/bin/npm run start:discord -- --log-level info EnvironmentFile=/etc/default/openclaw-discord # 環境変数ファイルを分離 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target |
|
1 2 3 4 5 |
# 有効化・起動手順 sudo systemctl daemon-reload sudo systemctl enable openclaw-discord.service sudo systemctl start openclaw-discord.service |
pm2 エコシステムファイル例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "apps": [ { "name": "openclaw-discord", "script": "npm", "args": "run start:discord -- --log-level info", "cwd": "/opt/openclaw-discord-plugin", "envFile": "/etc/default/openclaw-discord", "autorestart": true, "max_memory_restart": "200M", "log_date_format": "YYYY-MM-DD HH:mm:ss" } ] } |
|
1 2 3 4 |
pm2 start ecosystem.config.js pm2 save # 永続化設定 pm2 startup systemd # 再起動時に自動復元 |
シークレット管理と漏洩防止策(再掲)
| 手段 | メリット |
|---|---|
| Cloud Provider Secret Manager (GCP, AWS, Azure) | アクセス権限が細粒度で制御でき、ローテーションも自動化可能 |
環境変数ファイル (/etc/default/...) |
OS が管理するため、プロセス起動時に安全に注入 |
.gitignore で除外 |
誤ってリポジトリへコミットしてしまうリスクを根本的に排除 |
ネットワーク制御と IP ホワイトリスト
Discord が利用するエッジサーバーの IP 範囲は公式ドキュメント(IP アドレスリスト)で随時更新されています。VPS やクラウドインスタンスでは以下を実装すると安全です。
|
1 2 3 4 |
# Ubuntu 例: ufw に Discord の IP ブロックだけ許可 sudo ufw allow from <DISCORD_IP_RANGE>/24 to any port 8080 proto tcp sudo ufw enable |
開発・本番環境の分離
| 項目 | 開発環境 | 本番環境 |
|---|---|---|
| Bot トークン | discord-bot-token-dev |
discord-bot-token-prod |
| チャンネル ID | テスト用チャンネル | 運用中の公式チャンネル |
| 設定ファイル | config.dev.json |
config.prod.json |
| デプロイ手順 | 手動 npm run start:dev |
CI/CD で自動デプロイ(GitHub Actions 等) |
設定ファイルに environment: "development" / "production" を明示し、起動時に環境変数で切り替えるとミスが減ります。
まとめ
| 項目 | 内容 |
|---|---|
| 前提条件 | Node.js ≥ 18、OpenClaw の最新安定版、Discord アカウント |
| Bot 作成 | 開発者ポータルで Bot を作り、MESSAGE CONTENT INTENT と最小権限だけを付与 |
| プラグイン導入 | 公式リポジトリから取得し、環境変数/Secret Manager でトークン管理 |
| 起動・テスト | npm run start:discord -- --log-level debug → !ping で応答確認 |
| 本番運用 | systemd/pm2 による自動再起動、シークレットマネージャで安全に保管、IP ホワイトリストと環境分離を徹底 |
以上の手順とベストプラクティスに沿って設定すれば、数分で OpenClaw の Discord 連携が完了し、安定かつセキュアに 24 時間稼働させることが可能です。ぜひ本ガイドを開発・運用のチェックリストとして活用してください。