kt-tech.blog

画像

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

Share

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

💡
セルフホスト型 AI アシスタント「OpenClaw」を WSL2 上に構築し、Discord から常時稼働する AI エージェントを作る手順を完全解説します。

この記事でわかること

  • 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 作成権限あり
⚠️
注意: OpenClaw は Node.js 22 以上が必須です。20 系では動きません。

全体構成

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

Step 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
// package.json
{
  "name": "openclaw-playground",
  "private": true,
  "volta": {
    "node": "22.22.0"
  }
}

Step 2: OpenClaw のインストール

npm install -g openclaw

# インストール確認
openclaw --version

Step 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 で動作することを確認
💡
なぜこの問題が起きるか: Volta はプロジェクトの package.json を読んで使用する Node バージョンを決定しますが、グローバルインストールの shim がシステムの Node を参照してしまうことがあります。

Step 4: 初期ウィザードの実行

./openclaw wizard

ウィザードで以下を選択します。

質問 選択
Gateway mode local(ローカル起動)
AI provider OpenAI
Messaging channel Discord
💡
Claude の subscription は使えません。Claude を使いたい場合は Anthropic API キーが必要です。

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.json

Step 6: Discord Bot の作成と設定

6-1. Discord Developer Portal でボットを作成

  1. Discord Developer Portal にアクセス

  2. 「New Application」→ 名前を入力して作成

  3. 左メニューの「Bot」→「Add Bot」

  4. 「Token」をコピー(後で使用)

  5. 「Privileged Gateway Intents」で以下を ON にする:

  • MESSAGE CONTENT INTENT

  • SERVER MEMBERS INTENT(任意)

6-2. ボットをサーバーに招待

  1. 左メニューの「OAuth2」→「URL Generator」

  2. Scopes: bot にチェック

  3. Bot Permissions: Send Messages, Read Message History, Add Reactions にチェック

  4. 生成された 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 スキルを使う場合

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 -f

Step 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 open
💡
allowlist のまま放置すると: Guild(サーバー)からのメッセージが完全に無視されます。サーバーで使う場合は必ず open に変更してください。

設定を反映するためにゲートウェイを再起動します。

systemctl --user restart openclaw-gateway

Step 12: ワークスペースディレクトリの設定

エージェントが作業するディレクトリを設定します。

./openclaw config set agents.defaults.workspace /home/user/private/openclaw-playground

これで、ボットが lspwd などを実行したときに ~/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.md

SKILL.md のフォーマット

---
name: my-skill
description: このスキルが何をするか、いつ使うかを明確に書く。「〇〇して」と言われたら使用する。
---

# スキル名

## 手順

1. ステップ1
2. ステップ2
...

スキルの確認

./openclaw skills list
# → ✓ ready で自分のスキルが表示されれば成功

スキルのソースが openclaw-workspace になっていれば、ワークスペースから正しく読み込まれています。

トラブルシューティング

Bot が何も返答しない(サーバーで)

原因: groupPolicyallowlist になっている

./openclaw config set channels.discord.groupPolicy open
systemctl --user restart openclaw-gateway

openclaw: command not found または Node バージョンエラー

原因: Volta シムが Node 20 を参照している

# ラッパースクリプト経由で実行
cd ~/private/openclaw-playground
./openclaw --version

Bot に DM すると「access not configured」が返ってくる

原因: ユーザーペアリングが未完了

./openclaw pairing approve discord <コード>
systemctl --user restart openclaw-gateway

OpenAI 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 で「記事化して」などと話しかけると、対応するスキルが自動的に発動する

参考リンク

  • OpenClaw 公式ドキュメント

  • OpenClaw GitHub

  • Discord Developer Portal

  • OpenAI API Keys

  • Volta - JavaScript Tool Manager