前回の記事ではOpenClawをSlackに導入し、Local LLMの限界からGeminiハイブリッド構成に至る試行錯誤を書きました。
あれから2ヶ月。GitHub 247,000+スターまで成長したOpenClawを本番運用する中で見えてきた「次のステップ」があります。
- Docker環境をセキュリティまで考慮して構築する
- モデルプロバイダーをフォールバック付きで柔軟に切り替える
- 自前のSkillsを開発して、自分だけのAIアシスタントに仕上げる
「Slack連携はできた。次は何する?」という方のための実践ガイドです。
この記事で学べること
- Docker Composeを使ったOpenClawの本番環境構築(セキュリティ設定含む)
- モデルプロバイダーの設定とフォールバックチェーンの設計
- SKILL.md の構造とカスタムSkills開発の手順
- セキュリティ上の注意点
前提知識
- Dockerの基本操作(
docker compose upがわかる程度) - OpenClawの基本を把握している
- LLM APIの概念(APIキー、モデル指定)を理解している
Docker環境構築
なぜDockerなのか
前回の記事ではgit clone → docker compose upで済ませました。ローカル検証にはそれで十分ですが、本番運用するなら以下が必要です:
- 非rootユーザーでの実行
- ケーパビリティの制限(不要な権限を落とす)
- ヘルスチェックの設定
- 永続化ボリュームの適切なマウント
セットアップ手順
プリビルドイメージ ghcr.io/openclaw/openclaw を使用するため、ローカルでのビルドは不要です。
# 1. プロジェクトディレクトリを作成
mkdir openclaw-pp && cd openclaw-pp
# 2. 設定ファイルを配置
mkdir -p config cron data workspace
cp .env.example .env
# .env を編集してAPIキー・トークンを設定
# 3. openclaw.json を config/ に配置
# config/openclaw.json にモデル設定・チャンネル設定を記述
# 4. 起動
docker compose up -d
既存のホスト環境からの移行には scripts/migrate.sh を使用できます。
セキュリティ設定
OpenClawの公式Dockerイメージには以下のセキュリティ設定が組み込まれています:
| 設定 | 内容 |
|---|---|
| 実行ユーザー | 1000:1000(非root) |
| ケーパビリティ | cap_drop: ALL(全ケーパビリティを削除) |
| ファイルシステム | read_only: true(ルートFS読み取り専用) |
| 権限昇格 | no-new-privileges:true |
| ヘルスチェック | /healthz(ポート18789、30秒間隔) |
| ネットワーク | 127.0.0.1:18789 にバインド(localhost限定) |
ボリュームマウント
read_only: true を設定した上で、書き込みが必要な領域だけを個別にマウントする設計です。
volumes:
# 設定ファイル(読み取り専用)
- ./config/openclaw.json:/home/node/.openclaw/openclaw.json:ro
- ./cron:/home/node/.openclaw/cron:ro
# データディレクトリ(読み書き)
- ./data/credentials:/home/node/.openclaw/credentials:rw
- ./data/identity:/home/node/.openclaw/identity:rw
- ./data/memory:/home/node/.openclaw/memory:rw
- ./data/agents:/home/node/.openclaw/agents:rw
- ./data/media:/home/node/.openclaw/media:rw
- ./data/logs:/home/node/.openclaw/logs:rw
- ./data/browser:/home/node/.openclaw/browser:rw
- ./data/canvas:/home/node/.openclaw/canvas:rw
- ./data/devices:/home/node/.openclaw/devices:rw
- ./workspace:/home/node/.openclaw/workspace:rw
# Skills(named volume、読み取り専用)
- skills:/home/node/.openclaw/skills:ro
Skillsはnamed volumeで :ro マウントし、ホスト側のディレクトリを .env の SKILLS_PATH で指定します。
主要な環境変数
.env.example に定義されている環境変数:
| 変数 | 用途 |
|---|---|
SLACK_BOT_TOKEN | Slack Bot User OAuth Token |
SLACK_APP_TOKEN | Slack App-Level Token(Socket Mode用) |
OPENCLAW_GATEWAY_TOKEN | Gateway認証トークン |
GEMINI_API_KEY | Google Gemini APIキー |
MINIMAX_API_KEY | MiniMax APIキー |
SKILLS_PATH | ホスト側のSkillsディレクトリパス |
モデルプロバイダー設定
OpenClawのモデル設定は前回の記事で基本を触れましたが、本番運用で重要なフォールバックチェーンとキーローテーションを掘り下げます。
対応プロバイダー一覧
OpenClawは14+のプロバイダーをビルトインでサポートしています:
| プロバイダー | 環境変数 | モデル例 |
|---|---|---|
| Google Gemini | GEMINI_API_KEY | google/gemini-3-flash-preview |
| Anthropic | ANTHROPIC_API_KEY | anthropic/claude-opus-4-6 |
| OpenAI | OPENAI_API_KEY | openai/gpt-5.3 |
| MiniMax | MINIMAX_API_KEY | minimax/MiniMax-M2.1 |
| Ollama(ローカル) | 自動検出 | ollama/llama3.3 |
| OpenRouter | OPENROUTER_API_KEY | openrouter/任意のモデル |
| Groq | GROQ_API_KEY | groq/llama-3.3-70b |
モデルの指定形式は プロバイダー/モデル名 です。
フォールバックチェーンの設計
本番運用で重要なのは「APIが落ちたときに止まらない」こと。config/openclaw.json の agents.defaults.model で設定します:
{
agents: {
defaults: {
model: {
// メインモデル(高速・低コスト)
primary: 'google/gemini-3-flash-preview',
// フォールバック(順番に試行)
fallbacks: [
'google/gemini-3-pro-preview', // 高品質
'anthropic/claude-sonnet-4-6', // 別プロバイダー
'ollama/llama3.3', // 最終手段:ローカル
],
},
},
},
}
設計のポイント: フォールバック先は異なるプロバイダーを含めること。Gemini APIが全滅したときにGeminiの別モデルに逃がしても意味がありません。
APIキーローテーション
Gemini APIの無料枠を複数アカウントで回す場合や、レートリミット対策に:
# .env で単一キーを設定
GEMINI_API_KEY=your-gemini-api-key
レートリミット対策としてフォールバックチェーンに別プロバイダーのモデルを含めておくことで、特定プロバイダーの制限時にも動作を継続できます。
CLIでのモデル切替
設定ファイルを編集せずにモデルを切り替える場合:
# Docker環境でのCLI実行(oc ラッパースクリプト使用)
./scripts/oc models list
# モデル切替
./scripts/oc models set google/gemini-3-flash-preview
# または docker compose 経由で直接実行
docker compose --profile cli run --rm openclaw-cli models list
Skills開発入門
OpenClawの真価はSkillsです。前回の記事でも「魅力はSkillsで機能を拡張できること」と書きました。ここからは、自分でSkillsを作る方法を解説します。
Skillsの構造
Skillは1フォルダ = 1スキル。中核はYAMLフロントマター付きのSKILL.mdファイルです。
my-custom-skill/
└── SKILL.md
SKILL.md の書き方
---
name: daily-report
description: 日次レポートをMarkdownで生成する
metadata:
{
'openclaw':
{ 'requires': { 'bins': ['curl'], 'env': ['SLACK_WEBHOOK_URL'] } },
}
---
## 手順
1. ユーザーに今日の作業内容を質問する
2. 回答をもとに以下のテンプレートでレポートを生成する:
- 完了タスク
- 進行中タスク
- 明日の予定
- ブロッカー
3. 生成したレポートを `~/reports/YYYY-MM-DD.md` に保存する
4. SLACK_WEBHOOK_URL が設定されていれば、Slackにも投稿する
フロントマターのフィールド
| フィールド | 必須 | 説明 |
|---|---|---|
name | ○ | スキルの識別名(ケバブケース推奨) |
description | ○ | 1行の説明(スラッシュコマンド一覧に表示) |
homepage | × | macOS UIでのリンク先URL |
user-invocable | × | true(デフォルト)でスラッシュコマンド化 |
disable-model-invocation | × | true でモデルからの自動呼び出しを無効化 |
command-dispatch: tool | × | モデルをバイパスして直接ツール実行 |
metadata | × | 動作要件(必要なバイナリ、環境変数、OS) |
Skillsの配置
Docker環境では、Skillsはnamed volumeとしてコンテナ内の /home/node/.openclaw/skills/ に読み取り専用でマウントされます。
# docker-compose.yml(抜粋)
volumes:
skills:
driver: local
driver_opts:
type: none
o: bind
device: ${SKILLS_PATH:-~/skills}
ホスト側の SKILLS_PATH ディレクトリにSkillsフォルダを配置すると、コンテナから自動的に参照されます。
openclaw.json でのSkills設定
{
skills: {
entries: {
'daily-report': {
enabled: true,
env: {
SLACK_WEBHOOK_URL: 'https://hooks.slack.com/services/...',
},
config: {
reportDir: '~/reports',
},
},
},
// バンドルスキルの許可リスト(セキュリティ対策)
allowBundled: ['web-search', 'memory', 'computer-use'],
},
}
コミュニティSkills
OpenClawのSkillsエコシステムでは、コミュニティで共有されたSkillsを利用できます。Skillsのインストールは、ホスト側のSkillsディレクトリにフォルダを配置するだけです。
# Skillsディレクトリにスキルを配置
ls ${SKILLS_PATH}/
# daily-report/ dev-flow/ git-commit/ ...
openclaw.json の skills.install.nodeManager でパッケージマネージャーを指定できます(デフォルト: pnpm)。
セキュリティ上の注意
OpenClawのSkillsエコシステムは強力ですが、セキュリティリスクも伴います。
サードパーティSkillsのリスク
Ciscoのセキュリティチームの調査で、サードパーティSkillsによるデータ流出とプロンプトインジェクションのリスクが指摘されています。
対策:
- サードパーティSkillsは必ずソースコードを確認してからインストール
allowBundledで使用するバンドルスキルを明示的に制限metadata.openclaw.requiresで必要な権限を最小限に宣言- Skillsは
:ro(読み取り専用)でマウントし、コンテナ内からの改ざんを防止 - セキュリティハードニングで
cap_drop: ALL・read_only: trueを適用
APIキーの管理
# NG: openclaw.json にAPIキーを直書き
# OK: 環境変数で管理
export GEMINI_API_KEY=your-key
export ANTHROPIC_API_KEY=your-key
.envファイルを使う場合は、必ず.gitignoreに追加してください。
まとめ
OpenClawをSlack連携の先に進めるための3つのステップを解説しました:
- Docker本番構築: プリビルドイメージ、ボリューム設計、セキュリティ設定
- モデルプロバイダー: フォールバックチェーンで安定運用
- Skills開発: SKILL.md の書き方とカスタムSkillsの作成
OpenClawの本当の価値は、自分の業務に特化したSkillsを積み上げて、自分だけのAIアシスタントに育てるところにあります。4つのAIコーディングツールでSkillsを統一管理する方法と組み合わせれば、OpenClawのSkillsを他のツールからも活用できます。
あわせて読みたい
- SlackにAIアシスタントを導入した話 — OpenClawの基本とGeminiハイブリッド構成
- 4つのAIコーディングツールのSkillsを統一管理する方法 — OpenClawを含むマルチツール環境のSkills共有
- AIコーディングツール完全比較 — Claude Code・Codex・Antigravityの使い分け



