OpenClaw × Mattermost 完全構築記録

Dockerで動かすAIエージェントをオンプレMattermostに繋ぐまでに踏んだ地雷と、その解法をすべて記す。

構築環境

項目内容備考
OSUbuntu 22.04 / 24.04Docker動作環境
DockerDocker Engine + Compose v22サービス構成(gateway / cli)
Node.jsv22 以上コンテナ内で自動解決
LLMルーターOpenRouterモデル非依存で切替可能
使用モデルopenai/gpt-5-miniAgentic Coding能力を重視して選定
チャットツールMattermost(セルフホスト)オンプレミス版

INTRO OpenClawとは何か

OpenClaw(旧称:Clawdbot / Moltbot)は、Peter Steinbergerが開発したオープンソースのローカルファースト自律型AIエージェントランタイムだ。WhatsApp・Telegram・Slack・Discord・Mattermostといった既存のチャットアプリをUIとして使いながら、裏側でLLMがシェルコマンドの実行、ブラウザ操作、ファイル読み書き、メール送信などを自律的にこなす。

ChatGPTやClaudeのようなWebチャットとの決定的な違いは「実際に手を動かせること」だ。構成は3層で理解すると整理しやすい。

  • Gateway:各チャットプラットフォームとの通信を束ねるコントロールプレーン
  • Brain:LLMによる意思決定エンジン(モデル非依存)
  • Skills:エージェントが実行できる機能(ブラウザ制御・シェル実行など)

今回はこれをDockerで動かす。コンテナ構成は以下の通りだ。

Docker コンテナ構成
openclaw-gateway ← AIエージェントの常駐デーモン(メイン)
├── ~/.openclaw/ # 設定・メモリ・APIキー(ホスト側マウント)
└── ~/openclaw/workspace/ # エージェントが読み書きするワークスペースopenclaw-cli ← 管理コマンド用コンテナ(都度 run –rm で起動)
└── pairing approve, dashboard, devices list など

⚠️ セキュリティ前提の共有

OpenClawはシェルアクセス・ブラウザ制御・メール送信権限を持つ。Dockerによるコンテナ分離が第一の防御線だが、設定ミスは依然として重大なリスクになる。本番環境への適用可否は必ず自身で判断すること。


STEP 0 🦞 OpenClaw本体の導入(Docker)

Mattermostとの接続設定に入る前に、OpenClaw本体を立ち上げる。公式が用意する docker-setup.sh を使うのが最短ルートだ。

前提条件の確認:

bash
# Docker と Compose v2 が入っていることを確認
docker --version
docker compose version

# git が入っていることを確認
git --version

リポジトリのクローンとセットアップ:

bash
# リポジトリをクローン
git clone https://github.com/openclaw/openclaw.git
cd openclaw

# 公式セットアップスクリプトを実行(初回ビルド+対話式ウィザード)
./docker-setup.sh

スクリプト実行後、対話式のオンボーディングウィザードが起動する。主な設定項目は以下の通りだ。

設問推奨選択
Gateway typeLocal(ローカル動作)
AI ProviderOpenRouter(モデル横断で使いやすい)
API KeyOpenRouterのAPIキーを入力
追加ネットワーク機能不明な場合はスキップ推奨

ウィザード完了後、以下のコマンドで起動する。

bash
# イメージをビルド(初回のみ数分かかる)
docker build -t openclaw:local -f Dockerfile .

# オンボーディング(ウィザード未実施の場合のみ)
docker compose run --rm openclaw-cli onboard

# Gatewayをバックグラウンドで起動
docker compose up -d openclaw-gateway
docker compose psopenclaw-gatewayUp と表示されれば起動成功。

Webダッシュボードへのアクセスが必要な場合は以下で確認する。

bash
# ダッシュボードURL(tokenパラメータ付き)を取得
docker compose run --rm openclaw-cli dashboard --no-open
# → 出力されたURLをブラウザで開く(http://127.0.0.1:18789/?token=...)

💡 躓きポイント:初回ビルドは時間がかかる

OpenClawはDockerHubからイメージをpullするのではなく、リポジトリのソースからローカルビルドする設計だ。初回は数分かかるが、2回目以降はDockerのレイヤーキャッシュが効くため高速になる。

💡 躓きポイント:ディレクトリ構造に注意

セットアップスクリプトはホスト側に2つのディレクトリを自動生成してコンテナにマウントする。

  • ~/.openclaw/:設定・メモリ・APIキー(以降のステップで直接編集するファイルもここにある)
  • ~/openclaw/workspace/:エージェントが読み書きする作業領域

docker compose 系のコマンドは必ずクローンした ~/openclaw/ ディレクトリから実行すること。


STEP 1 🤖 Mattermost側のBot準備

OpenClawが憑依するための空のアカウントをMattermost上に用意する。システム管理者権限が必要だ。

  1. システム管理者でMattermostにログイン。
  2. 左上メニュー → 「統合機能(Integrations)」「Botアカウント」 へ進む。
  3. 「Botアカウントを追加する」から任意のユーザー名(例: openclaw-bot)を設定して保存。
  4. 生成されたアクセストークン(Bot Token) を必ずメモする(この画面を閉じると再表示されない)。
  5. 対象チームを開き、「メンバーを招待する」からBotアカウントをチームに所属させる。

💡 躓きポイント:Botは「チームの迷子」になる

Botを作成しただけでは、どのチームにも属していない状態だ。チームへの招待を忘れると、後でチャンネルに呼び出そうとした際に「このチームのメンバーではありません」と弾かれる。チャンネル招待の前にチーム招待が必要という順序を覚えておこう。


STEP 2 ⚙️ docker-compose.yml への環境変数追記

OpenClawのGatewayコンテナに、MattermostのURLと認証トークンを環境変数として渡す。Dockerの環境変数経由で渡すのが正解で、JSONに直書きしてはいけない(理由はSTEP 3で詳述)。

bash
nano ~/openclaw/docker-compose.yml

openclaw-gatewayenvironment: セクションに以下を追記する。

yaml
    environment:
      # (既存の設定はそのまま残す)
      MATTERMOST_URL: https://mattermost.your-domain.example.com
      MATTERMOST_BOT_TOKEN: <STEP 1で取得したアクセストークン>

💡 躓きポイント:YAMLの2種類の記法トラップ

Dockerの environment 記法には2パターン存在する。

  • ハイフン+イコール形式:- KEY=VALUE
  • コロン形式:KEY: VALUE

既存ファイルがどちらの形式かを先に確認し、統一すること。 混在させるとDockerが設定を無視する場合がある。


STEP 3 📄 openclaw.json でプラグイン有効化

続いて、OpenClaw本体の設定ファイルでMattermostプラグインのスイッチをONにする。

bash
nano ~/.openclaw/openclaw.json

"plugins" セクションを以下の通り編集する。config ブロックは絶対に書かないのがポイントだ。

json
{
  "plugins": {
    "entries": {
      "mattermost": {
        "enabled": true
      }
    }
  }
}

既存の "agent": { "model": "..." } 等の項目は削除せず残しておくこと。

💡 躓きポイント:2つの罠

  • npm で外部インストールしてはいけない
    OpenClawのDockerイメージにはMattermostを含む公式プラグインが最初から内蔵されている。npm install で外から追加すると競合してシステムが崩壊する。
  • JSONに直接URLを書くと起動ループに陥る
    config ブロック等でURL・トークンをJSONに直書きすると、スキーマバリデーションが must NOT have additional properties エラーを返し、Gatewayコンテナが無限再起動ループに入る。設定値は必ずSTEP 2の環境変数で渡すこと。

STEP 4 🚀 起動とペアリング承認

設定を反映させてGatewayコンテナを再起動し、ユーザーとBotを紐付ける。

コンテナを再構築して起動:

bash
cd ~/openclaw
docker compose up -d

接続ログの確認:

bash
docker compose logs -f openclaw-gateway
[mattermost] connected as @openclaw-bot と表示されたら接続成功。Ctrl + C で抜けてよい。

チャンネルへのBot招待とペアリング:

  1. Mattermostで対象チャンネルを開き、/invite @openclaw-bot を実行してBotを招待する。
  2. Botに話しかける(例: @openclaw-bot hello)。
  3. Botから 「Pairing code: XXXXXXXX」 というメッセージが返ってくる。
  4. ターミナルに戻り、表示されたコードで以下を実行する。
bash
docker compose run --rm openclaw-cli pairing approve mattermost <8桁のペアリングコード>

💡 躓きポイント:「Access not configured」は正常な動作

初回の応答がエラーに見えても慌てなくてよい。これはAPIの不正利用を防ぐためのセキュリティ機構だ。openclaw-cli コンテナから管理者が明示的に承認して初めてAIが言葉を返し始める設計になっている。


BONUS 🔄 モデル切り替え手順

用途に応じてLLMを差し替えたい場合は以下の3ステップで完結する。

  1. ~/.openclaw/openclaw.json を開く。
  2. "model" の値を使用したいモデル識別子に書き換えて保存する。
  3. docker compose restart openclaw-gateway でコンテナに反映させる。
json
// OpenRouter経由でモデルを指定する場合の形式
"model": "openrouter/openai/gpt-5-mini"
"model": "openrouter/anthropic/claude-sonnet-4-5"
"model": "openrouter/google/gemini-2.0-flash"
📊 モデル選定の視点今回 gpt-5-mini を選択した根拠はLiveBenchにおける「Agentic Coding」スコアだ。OpenClawのようにブラウザ画面を読み取って自律的にクリック・入力を判断するツールでは、単純な日本語生成能力よりエージェント的推論能力の数値が実用精度に直結する。廉価モデルを評価する際の重要な指標として今後も参考にしたい。


まとめ

今回の構築で特に重要だったのは「設定値はDockerの環境変数で渡す」「プラグインは外からインストールしない」「コンテナ操作は必ずクローンディレクトリから実行する」という3点だ。この手順書通りに進めれば、別サーバーへの移設や同僚への環境展開も最短ルートで完了できるはずだ。

タイトルとURLをコピーしました