メインコンテンツへスキップ
kt-tech.blog

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

設定・環境構築12分で読めます

この記事でわかること

  • OpenClaw を WSL2 に入れて Discord から使えるようにするまでの全工程
  • Volta のシムが古い Node を参照してしまうときの回避策
  • ウィザードが TTY を要求して進めないときに、認証ファイルを直接書く方法
  • systemd で常時稼働させる設定と、Bot が無反応になる 4 つの原因

WSL2(Ubuntu 22.04 など)、Node.js 22 以上(必須。20 系では動きません)、OpenAI API キー、Discord の Bot を作れるアカウント。

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

環境

項目 バージョン/条件
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 経由)

Bash
# 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 を作成します。

Bash
mkdir -p ~/private/openclaw-playground
cd ~/private/openclaw-playground
JSON
{
  "name": "openclaw-playground",
  "private": true,
  "volta": {
    "node": "22.22.0"
  }
}

Step 2: OpenClaw のインストール

Bash
npm install -g openclaw

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

Step 3: Volta シムの問題を修正する

Volta のシムが Node 22 ではなく Node 20 を参照してしまう場合があります。以下のラッパースクリプトを作成して回避します。

Bash
# Node 22 のパスを確認
ls ~/.volta/tools/image/node/
# → 22.22.0 が存在すること
Bash
# ワークスペースにラッパースクリプトを作成
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 コマンドはこのラッパースクリプト経由で実行します。

Bash
cd ~/private/openclaw-playground
./openclaw --version   # Node 22 で動作することを確認
Tips
なぜこの問題が起きるか: Volta はプロジェクトの package.json を読んで使用する Node バージョンを決定しますが、グローバルインストールの shim がシステムの Node を参照してしまうことがあります。

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

Bash
./openclaw wizard

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

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

Step 5: OpenAI API 認証の設定

ウィザードの認証設定は TTY が必要で、パイプ経由では動きません。直接ファイルを書きます。

Bash
# 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 キーを環境変数として渡します。

Bash
# サービスファイルを編集
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 スキルを使う場合
重要
サービスファイルに API キーを直書きすると、ファイルを読める人には見えます。気になるなら EnvironmentFile= で別ファイルに退避し、そちらを chmod 600 にしてください。

Step 8: Discord プラグインの有効化とチャンネル追加

Bash
# Discord プラグインを有効化(先にこれをやること!)
./openclaw plugins enable discord

# Discord チャンネルを追加
./openclaw channels add --channel discord
# → Bot Token の入力を求められる。Step 6 でコピーしたトークンを貼り付ける

OpenClaw の設定ファイルに Discord 設定が追加されたことを確認します。

Bash
cat ~/.openclaw/openclaw.json | grep -A5 "discord"

Step 9: ゲートウェイを systemd サービスとして起動

Bash
# systemd サービスをインストール
./openclaw gateway install

# サービスを起動
systemctl --user daemon-reload
systemctl --user start openclaw-gateway
systemctl --user enable openclaw-gateway  # 自動起動を有効化

# 起動確認
systemctl --user status openclaw-gateway

ログを確認するには:

Bash
journalctl --user -u openclaw-gateway -f

Step 10: ユーザーペアリングの承認

Discord でボットに DM を送ると、初回はペアリングコードが返ってきます。

OpenClaw: access not configured. Use the pairing code below to pair this account:
XXXXXXXX

このコードを使って承認します。

Bash
./openclaw pairing approve discord XXXXXXXX

ゲートウェイを再起動します。

Bash
systemctl --user restart openclaw-gateway

再度 DM を送ると、今度は正常に返答が来るはずです。


Step 11: groupPolicy の設定(サーバー発言を許可)

デフォルトでは DM のみ反応し、サーバーのチャンネル発言は無視されます。サーバーでも使えるようにするには:

Bash
./openclaw config set channels.discord.groupPolicy open
Tips
allowlist のまま放置すると、Guild(サーバー)からのメッセージが完全に無視されます。エラーも出ないので「壊れているのか設定なのか」が分かりません。サーバーで使う場合は必ず open に変更してください。

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

Bash
systemctl --user restart openclaw-gateway

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

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

Bash
./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 のフォーマット

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

# スキル名

## 手順

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

スキルの確認

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

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


トラブルシューティング

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

原因: groupPolicyallowlist になっている

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

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

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

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

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

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

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

OpenAI API エラー(401 Unauthorized)

原因: API キーが systemd サービスに渡されていない

Bash
# サービスファイルを確認
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 で「記事化して」などと話しかけると、対応するスキルが自動的に発動する

参考リンク

更新履歴

  1. 本文冒頭に重複していた記事タイトルの見出しと、手書きの「目次」見出し(ブログ側で自動生成されるため不要)を削除。コードブロックの言語指定を plain text から text / ini に修正し、package.json にファイル名キャプションを追加。サービスファイルに API キーを直書きすることの注意と EnvironmentFile による回避を追加。参考リンクがテキストだけで URL がなかったのをリンクに差し替え(URL が確認できないものは削除)。callout の色指定を他記事と揃え、エスケープが見えていた箇所を修正。「この記事でわかること」「対象読者」「前提条件」を概要プロパティへ移動。
  2. OGP Description の文字化けを修正

この記事のタグ