【環境構築】OpenClaw を WSL2 + Discord + OpenAI API でゼロからセットアップする

この記事でわかること
- OpenClaw を WSL2 に入れて Discord から使えるようにするまでの全工程
- Volta のシムが古い Node を参照してしまうときの回避策
- ウィザードが TTY を要求して進めないときに、認証ファイルを直接書く方法
- systemd で常時稼働させる設定と、Bot が無反応になる 4 つの原因
WSL2(Ubuntu 22.04 など)、Node.js 22 以上(必須。20 系では動きません)、OpenAI API キー、Discord の Bot を作れるアカウント。
環境
| 項目 | バージョン/条件 |
|---|---|
| OS | WSL2 (Ubuntu 22.04 など) |
| Node.js | 22 以上(22.12.0 以上推奨) |
| npm | 10.x |
| Volta | インストール済み |
| OpenAI API キー | sk-proj-... 形式 |
| Discord アカウント | Bot 作成権限あり |
全体構成
WSL2 (Linux)
├── openclaw (Node.js プロセス / systemd サービス)
│ ├── gateway (Discord ↔ Agent 間の仲介)
│ └── agent/main (OpenAI GPT-4o で動作するエージェント)
├── ~/.openclaw/ (設定・セッションデータ)
│ ├── openclaw.json (メイン設定)
│ ├── auth-profiles.json (API キー)
│ └── agents/main/ (エージェント設定)
└── ~/private/openclaw-playground/ (ワークスペース)
├── AGENTS.md, SOUL.md, USER.md ... (エージェント人格ファイル)
└── skills/ (カスタムスキル)
Discord
└── Bot (トークンで接続) ← → gatewayStep 1: Node.js 22 のインストール(Volta 経由)
# Node.js 22 最新版をインストール
volta install node@22
# npm も合わせてアップデート
volta install npm@10
# バージョン確認
node --version # v22.x.x であること
npm --version # 10.x.x であることワークスペースで Node 22 を固定するために package.json を作成します。
mkdir -p ~/private/openclaw-playground
cd ~/private/openclaw-playground{
"name": "openclaw-playground",
"private": true,
"volta": {
"node": "22.22.0"
}
}Step 2: OpenClaw のインストール
npm install -g openclaw
# インストール確認
openclaw --versionStep 3: Volta シムの問題を修正する
Volta のシムが Node 22 ではなく Node 20 を参照してしまう場合があります。以下のラッパースクリプトを作成して回避します。
# Node 22 のパスを確認
ls ~/.volta/tools/image/node/
# → 22.22.0 が存在すること# ワークスペースにラッパースクリプトを作成
cat > ~/private/openclaw-playground/openclaw << 'EOF'
#!/bin/bash
exec ~/.volta/tools/image/node/22.22.0/bin/node \
~/.volta/tools/image/node/22.22.0/bin/openclaw "$@"
EOF
chmod +x ~/private/openclaw-playground/openclaw以降の openclaw コマンドはこのラッパースクリプト経由で実行します。
cd ~/private/openclaw-playground
./openclaw --version # Node 22 で動作することを確認package.json を読んで使用する Node バージョンを決定しますが、グローバルインストールの shim がシステムの Node を参照してしまうことがあります。Step 4: 初期ウィザードの実行
./openclaw wizardウィザードで以下を選択します。
| 質問 | 選択 |
|---|---|
| Gateway mode | local(ローカル起動) |
| AI provider | OpenAI |
| Messaging channel | Discord |
Step 5: OpenAI API 認証の設定
ウィザードの認証設定は TTY が必要で、パイプ経由では動きません。直接ファイルを書きます。
# auth-profiles.json を作成
cat > ~/.openclaw/auth-profiles.json << 'EOF'
{
"profiles": {
"openai:manual": {
"provider": "openai",
"id": "openai:manual",
"token": "sk-proj-YOUR_OPENAI_API_KEY"
}
}
}
EOF
# エージェント用にもコピー
mkdir -p ~/.openclaw/agents/main/agent/
cp ~/.openclaw/auth-profiles.json ~/.openclaw/agents/main/agent/auth-profiles.jsonStep 6: Discord Bot の作成と設定
6-1. Discord Developer Portal でボットを作成
- Discord Developer Portal にアクセス
- 「New Application」→ 名前を入力して作成
- 左メニューの「Bot」→「Add Bot」
- 「Token」をコピー(後で使用)
- 「Privileged Gateway Intents」で以下を ON にする:
- MESSAGE CONTENT INTENT
- SERVER MEMBERS INTENT(任意)
6-2. ボットをサーバーに招待
- 左メニューの「OAuth2」→「URL Generator」
- Scopes:
botにチェック - Bot Permissions:
Send Messages,Read Message History,Add Reactionsにチェック - 生成された URL をブラウザで開き、サーバーに招待
Step 7: systemd サービスへの環境変数追加
OpenClaw は systemd サービスとして動作するため、API キーを環境変数として渡します。
# サービスファイルを編集
nano ~/.config/systemd/user/openclaw-gateway.service[Service] セクションに以下を追加します。
Environment="OPENAI_API_KEY=sk-proj-YOUR_OPENAI_API_KEY"
Environment="NOTION_API_TOKEN=ntn_YOUR_NOTION_TOKEN" # Notion スキルを使う場合EnvironmentFile= で別ファイルに退避し、そちらを chmod 600 にしてください。Step 8: Discord プラグインの有効化とチャンネル追加
# Discord プラグインを有効化(先にこれをやること!)
./openclaw plugins enable discord
# Discord チャンネルを追加
./openclaw channels add --channel discord
# → Bot Token の入力を求められる。Step 6 でコピーしたトークンを貼り付けるOpenClaw の設定ファイルに Discord 設定が追加されたことを確認します。
cat ~/.openclaw/openclaw.json | grep -A5 "discord"Step 9: ゲートウェイを systemd サービスとして起動
# systemd サービスをインストール
./openclaw gateway install
# サービスを起動
systemctl --user daemon-reload
systemctl --user start openclaw-gateway
systemctl --user enable openclaw-gateway # 自動起動を有効化
# 起動確認
systemctl --user status openclaw-gatewayログを確認するには:
journalctl --user -u openclaw-gateway -fStep 10: ユーザーペアリングの承認
Discord でボットに DM を送ると、初回はペアリングコードが返ってきます。
OpenClaw: access not configured. Use the pairing code below to pair this account:
XXXXXXXXこのコードを使って承認します。
./openclaw pairing approve discord XXXXXXXXゲートウェイを再起動します。
systemctl --user restart openclaw-gateway再度 DM を送ると、今度は正常に返答が来るはずです。
Step 11: groupPolicy の設定(サーバー発言を許可)
デフォルトでは DM のみ反応し、サーバーのチャンネル発言は無視されます。サーバーでも使えるようにするには:
./openclaw config set channels.discord.groupPolicy openallowlist のまま放置すると、Guild(サーバー)からのメッセージが完全に無視されます。エラーも出ないので「壊れているのか設定なのか」が分かりません。サーバーで使う場合は必ず open に変更してください。設定を反映するためにゲートウェイを再起動します。
systemctl --user restart openclaw-gatewayStep 12: ワークスペースディレクトリの設定
エージェントが作業するディレクトリを設定します。
./openclaw config set agents.defaults.workspace /home/user/private/openclaw-playgroundこれで、ボットが ls や pwd などを実行したときに ~/private/openclaw-playground をルートとして動作します。
ワークスペースには以下のファイルが自動配置されます。
| ファイル | 役割 |
|---|---|
AGENTS.md |
エージェントの行動ルール |
SOUL.md |
エージェントの人格・価値観 |
USER.md |
ユーザー情報(手動で更新) |
TOOLS.md |
ツール・デバイス情報 |
IDENTITY.md |
エージェントの自己認識 |
MEMORY.md |
長期記憶(メインセッションのみ読み込み) |
Step 13: スキルの追加
カスタムスキルはワークスペースの skills/ ディレクトリに配置します。
スキルの構造
skills/
└── my-skill/
├── SKILL.md # 必須: 発動条件と手順
└── references/ # 任意: 詳細リファレンス
└── details.mdSKILL.md のフォーマット
---
name: my-skill
description: このスキルが何をするか、いつ使うかを明確に書く。「〇〇して」と言われたら使用する。
---
# スキル名
## 手順
1. ステップ1
2. ステップ2
...スキルの確認
./openclaw skills list
# → ✓ ready で自分のスキルが表示されれば成功スキルのソースが openclaw-workspace になっていれば、ワークスペースから正しく読み込まれています。
トラブルシューティング
Bot が何も返答しない(サーバーで)
原因: groupPolicy が allowlist になっている
./openclaw config set channels.discord.groupPolicy open
systemctl --user restart openclaw-gatewayopenclaw: command not found または Node バージョンエラー
原因: Volta シムが Node 20 を参照している
# ラッパースクリプト経由で実行
cd ~/private/openclaw-playground
./openclaw --versionBot に DM すると「access not configured」が返ってくる
原因: ユーザーペアリングが未完了
./openclaw pairing approve discord <コード>
systemctl --user restart openclaw-gatewayOpenAI API エラー(401 Unauthorized)
原因: API キーが systemd サービスに渡されていない
# サービスファイルを確認
grep OPENAI ~/.config/systemd/user/openclaw-gateway.service
# 追加されていない場合は編集して再起動
systemctl --user daemon-reload
systemctl --user restart openclaw-gatewayボットを追加したのにサーバーに表示されない
原因: Bot の Intents が有効になっていない
Discord Developer Portal → Bot → Privileged Gateway Intents → MESSAGE CONTENT INTENT を ON にして、ゲートウェイを再起動。
まとめ
- OpenClaw は Node.js 22 以上が必須。Volta でバージョン管理する場合はシム問題に注意
- 認証は
auth-profiles.jsonを直接作成するのが確実 - systemd サービスに
OPENAI_API_KEYを環境変数として渡すのを忘れずに - サーバーで使う場合は
groupPolicy: openに設定する - カスタムスキルは
workspace/skills/スキル名/SKILL.mdに配置するだけで自動認識される - Discord で「記事化して」などと話しかけると、対応するスキルが自動的に発動する
参考リンク
更新履歴
- 本文冒頭に重複していた記事タイトルの見出しと、手書きの「目次」見出し(ブログ側で自動生成されるため不要)を削除。コードブロックの言語指定を plain text から text / ini に修正し、package.json にファイル名キャプションを追加。サービスファイルに API キーを直書きすることの注意と EnvironmentFile による回避を追加。参考リンクがテキストだけで URL がなかったのをリンクに差し替え(URL が確認できないものは削除)。callout の色指定を他記事と揃え、エスケープが見えていた箇所を修正。「この記事でわかること」「対象読者」「前提条件」を概要プロパティへ移動。
- OGP Description の文字化けを修正


