はじめに
実際の運用において、本番環境で直接設定を変更したり新機能をテストするのは非常に危険な操作です。1つの設定ミスがすべてのユーザーの会話を中断させる可能性があります。本記事では、OpenClaw の開発・テスト・本番の3つの分離環境を構築し、安全にデバッグと検証を行う方法を詳しく解説します。
一、環境分離戦略
1.1 3つの環境の位置づけ
| 環境 | 用途 | データ | 安定性要件 |
|---|---|---|---|
| 開発 (dev) | ローカル開発デバッグ、新機能実験 | テストデータ | 低 |
| テスト (staging) | リリース前の検証、回帰テスト | 模擬本番データ | 中 |
| 本番 (production) | 実際のユーザーが使用 | 本番データ | 極めて高い |
1.2 分離すべき項目
各環境で以下の内容を分離する必要があります。
- 設定ファイル:異なるAPI Key、モデルパラメータ
- チャンネルアカウント:異なるBot Token(テストメッセージが実ユーザーに届くのを防止)
- データストレージ:独立したセッションデータとログ
- ネットワークポート:異なるGatewayポート、衝突を回避
二、設定ファイルによる分離
2.1 環境変数で設定を指定
OpenClaw は OPENCLAW_ENV 環境変数で異なる設定を読み込むことをサポートしています。
# 開発環境
OPENCLAW_ENV=development openclaw up
# テスト環境
OPENCLAW_ENV=staging openclaw up
# 本番環境(デフォルト)
OPENCLAW_ENV=production openclaw up
OpenClaw は以下の設定ファイルを順に検索します。
~/.config/openclaw/openclaw.development.json5 # 開発環境
~/.config/openclaw/openclaw.staging.json5 # テスト環境
~/.config/openclaw/openclaw.production.json5 # 本番環境(または openclaw.json5)
2.2 開発環境の設定例
// ~/.config/openclaw/openclaw.development.json5
{
"env": "development",
"gateway": {
"port": 18700 // 異なるポートを使用
},
"model": {
// 低コストモデルを使用してテスト費用を削減
"provider": "claude",
"model": "claude-3-5-haiku",
"apiKey": "sk-ant-dev-xxxxx"
},
"channels": {
"telegram": {
"enabled": true,
"botToken": "DEV_BOT_TOKEN" // テスト専用Bot
}
// 開発環境は1チャンネルのみ有効化
},
"conversation": {
"maxHistory": 5 // 履歴を削減してコストを低減
},
"log": {
"level": "debug", // 詳細ログでデバッグを容易に
"dir": "~/.openclaw/dev/logs/"
},
"data": {
"dir": "~/.openclaw/dev/data/" // データディレクトリを分離
}
}
2.3 テスト環境の設定例
// ~/.config/openclaw/openclaw.staging.json5
{
"env": "staging",
"gateway": {
"port": 18750
},
"model": {
"provider": "claude",
"model": "claude-3.5-sonnet", // 本番と同じモデル
"apiKey": "sk-ant-staging-xxxxx"
},
"channels": {
"telegram": {
"enabled": true,
"botToken": "STAGING_BOT_TOKEN"
},
"whatsapp": {
"enabled": true,
"phoneId": "STAGING_PHONE_ID"
}
},
"conversation": {
"maxHistory": 20 // 本番と同じ
},
"log": {
"level": "info",
"dir": "~/.openclaw/staging/logs/"
},
"data": {
"dir": "~/.openclaw/staging/data/"
}
}
2.4 本番環境の設定例
// ~/.config/openclaw/openclaw.production.json5
{
"env": "production",
"gateway": {
"port": 18789 // 標準本番ポート
},
"model": {
"provider": "claude",
"model": "claude-3.5-sonnet",
"apiKey": "sk-ant-prod-xxxxx"
},
"channels": {
"telegram": { "enabled": true, "botToken": "PROD_BOT_TOKEN" },
"whatsapp": { "enabled": true },
"discord": { "enabled": true }
},
"log": {
"level": "info",
"format": "json" // 本番環境はJSON形式で収集を容易に
},
"watchdog": {
"enabled": true // 本番環境でウォッチドッグを有効化
}
}
三、.envファイルでの機密設定管理
3.1 環境別の.envファイル分離
# ディレクトリ構造
~/.config/openclaw/
├── openclaw.development.json5
├── openclaw.staging.json5
├── openclaw.production.json5
├── .env.development
├── .env.staging
└── .env.production
# .env.development
OPENCLAW_ENV=development
CLAUDE_API_KEY=sk-ant-dev-xxxxx
TELEGRAM_BOT_TOKEN=111111:DEV_TOKEN
OPENCLAW_PORT=18700
# .env.production
OPENCLAW_ENV=production
CLAUDE_API_KEY=sk-ant-prod-xxxxx
TELEGRAM_BOT_TOKEN=222222:PROD_TOKEN
WHATSAPP_PHONE_ID=prod_phone_id
DISCORD_BOT_TOKEN=prod_discord_token
OPENCLAW_PORT=18789
3.2 環境ファイルの読み込み
# 環境ファイルを手動で指定
openclaw up --env-file ~/.config/openclaw/.env.staging
# または環境変数で指定
export OPENCLAW_ENV_FILE=~/.config/openclaw/.env.staging
openclaw up
四、Docker マルチ環境デプロイ
4.1 Docker Composeでマルチ環境管理
# docker-compose.yml
version: '3.8'
services:
openclaw-dev:
image: openclaw/openclaw:latest
container_name: openclaw-dev
environment:
- OPENCLAW_ENV=development
env_file:
- .env.development
ports:
- "18700:18789"
volumes:
- ./config/openclaw.development.json5:/root/.config/openclaw/openclaw.json5
- openclaw-dev-data:/root/.openclaw
profiles: ["dev"]
openclaw-staging:
image: openclaw/openclaw:latest
container_name: openclaw-staging
environment:
- OPENCLAW_ENV=staging
env_file:
- .env.staging
ports:
- "18750:18789"
volumes:
- ./config/openclaw.staging.json5:/root/.config/openclaw/openclaw.json5
- openclaw-staging-data:/root/.openclaw
profiles: ["staging"]
openclaw-prod:
image: openclaw/openclaw:latest
container_name: openclaw-prod
environment:
- OPENCLAW_ENV=production
env_file:
- .env.production
ports:
- "18789:18789"
volumes:
- ./config/openclaw.production.json5:/root/.config/openclaw/openclaw.json5
- openclaw-prod-data:/root/.openclaw
restart: always
profiles: ["prod"]
volumes:
openclaw-dev-data:
openclaw-staging-data:
openclaw-prod-data:
# 開発環境の起動
docker compose --profile dev up -d
# テスト環境の起動
docker compose --profile staging up -d
# 本番環境の起動
docker compose --profile prod up -d
4.2 同一サーバーでの並行運用
同一サーバーで複数の環境を実行する必要がある場合:
# 異なる設定ディレクトリとポートを使用
OPENCLAW_ENV=staging OPENCLAW_PORT=18750 openclaw up -d --name openclaw-staging
OPENCLAW_ENV=production OPENCLAW_PORT=18789 openclaw up -d --name openclaw-prod
五、リリースフロー
5.1 推奨される変更リリースフロー
1. ローカル開発 (dev)
↓ 機能開発とデバッグ完了
2. テスト環境にデプロイ (staging)
↓ 検証通過、チームレビュー
3. 本番環境にデプロイ (production)
↓ 監視・観察
4. 安定を確認
5.2 設定変更のチェックリスト
テスト環境の設定を本番環境に適用する前に、項目ごとにチェック:
# 1. 2つの環境の設定差異を比較(機密情報を除く)
diff <(openclaw config show --env staging | grep -v "apiKey\|token\|password") \
<(openclaw config show --env production | grep -v "apiKey\|token\|password")
# 2. テスト環境で設定の有効性を検証
OPENCLAW_ENV=staging openclaw config validate
# 3. テスト環境で診断を実行
OPENCLAW_ENV=staging openclaw doctor
# 4. テストデータが残っていないことを確認
5.3 ロールバック方案
新しい設定が本番環境で問題を起こした場合:
# 方案1:バックアップした設定ファイルを復元
cp ~/.config/openclaw/openclaw.production.json5.bak ~/.config/openclaw/openclaw.production.json5
openclaw restart
# 方案2:Gitでロールバック
cd ~/.config/openclaw
git checkout HEAD~1 -- openclaw.production.json5
openclaw restart
# 方案3:openclaw内蔵のロールバック
openclaw config rollback # 前の設定バージョンにロールバック
六、セキュリティに関する注意事項
- API Keyを絶対に共有しない:各環境で独立したAPI Keyを使用し、使用量の追跡と漏洩時の個別無効化を容易に
- 本番環境のBot Tokenを個別管理:テストメッセージが実ユーザーに送信されるのを防止
- 機密情報をGitに入れない:
.gitignoreで.envファイルとキーを含む設定を除外 - 最小権限の原則:開発者には開発/テスト環境のアクセス権限のみ付与
- 定期的なキーローテーション:特に人員変動があった場合
# .gitignore の例
.env*
*.production.json5
credentials/
ssl/
適切なマルチ環境管理により、実ユーザーに影響を与えることなく安心して新しい設定、新機能、新スキルをテストできます。これはOpenClaw本番環境の安定性を保証するための重要な基盤的実践です。