

OpenClaw を WSL2 環境にゼロからインストールする方法
Volta でのバージョン管理とシムの問題の対処法
OpenAI API を認証プロバイダーとして設定する方法
Discord Bot を作成して OpenClaw に連携する方法
systemd サービスとして常時稼働させる方法
カスタムスキルを作成・追加する方法
セルフホスト型 AI アシスタントを構築したい人
Discord を AI エージェントのインターフェースとして使いたい人
WSL2 (Ubuntu) 上での Node.js 開発環境に慣れている人
| 項目 | バージョン/条件 |
|---|---|
| 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 (トークンで接続) ← → gateway
# 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
// package.json
{
"name": "openclaw-playground",
"private": true,
"volta": {
"node": "22.22.0"
}
}
npm install -g openclaw
# インストール確認
openclaw --version
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 を参照してしまうことがあります。./openclaw wizard
ウィザードで以下を選択します。
| 質問 | 選択 |
|---|---|
| Gateway mode | local(ローカル起動) |
| AI provider | OpenAI |
| Messaging channel | Discord |
ウィザードの認証設定は 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.json
Discord Developer Portal にアクセス
「New Application」→ 名前を入力して作成
左メニューの「Bot」→「Add Bot」
「Token」をコピー(後で使用)
「Privileged Gateway Intents」で以下を ON にする:
MESSAGE CONTENT INTENT
SERVER MEMBERS INTENT(任意)
左メニューの「OAuth2」→「URL Generator」
Scopes: bot にチェック
Bot Permissions: Send Messages, Read Message History, Add Reactions にチェック
生成された URL をブラウザで開き、サーバーに招待
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 スキルを使う場合
# Discord プラグインを有効化(先にこれをやること!)
./openclaw plugins enable discord
# Discord チャンネルを追加
./openclaw channels add --channel discord
# → Bot Token の入力を求められる。Step 6 でコピーしたトークンを貼り付ける
OpenClaw の設定ファイルに Discord 設定が追加されたことを確認します。
cat ~/.openclaw/openclaw.json | grep -A5 "discord"
# 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 -f
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 を送ると、今度は正常に返答が来るはずです。
デフォルトでは DM のみ反応し、サーバーのチャンネル発言は無視されます。サーバーでも使えるようにするには:
./openclaw config set channels.discord.groupPolicy open
allowlist のまま放置すると: Guild(サーバー)からのメッセージが完全に無視されます。サーバーで使う場合は必ず open に変更してください。設定を反映するためにゲートウェイを再起動します。
systemctl --user restart openclaw-gateway
エージェントが作業するディレクトリを設定します。
./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 | 長期記憶(メインセッションのみ読み込み) |
カスタムスキルはワークスペースの skills/ ディレクトリに配置します。
skills/
└── my-skill/
├── SKILL.md # 必須: 発動条件と手順
└── references/ # 任意: 詳細リファレンス
└── details.md
---
name: my-skill
description: このスキルが何をするか、いつ使うかを明確に書く。「〇〇して」と言われたら使用する。
---
# スキル名
## 手順
1. ステップ1
2. ステップ2
...
./openclaw skills list
# → ✓ ready で自分のスキルが表示されれば成功
スキルのソースが openclaw-workspace になっていれば、ワークスペースから正しく読み込まれています。
原因: groupPolicy が allowlist になっている
./openclaw config set channels.discord.groupPolicy open
systemctl --user restart openclaw-gateway
原因: Volta シムが Node 20 を参照している
# ラッパースクリプト経由で実行
cd ~/private/openclaw-playground
./openclaw --version
原因: ユーザーペアリングが未完了
./openclaw pairing approve discord <コード>
systemctl --user restart openclaw-gateway
原因: 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 で「記事化して」などと話しかけると、対応するスキルが自動的に発動する
OpenClaw 公式ドキュメント
OpenClaw GitHub
Discord Developer Portal
OpenAI API Keys
Volta - JavaScript Tool Manager