この記事の対象読者
- Pythonの基本文法(変数、関数、pip install)を理解している方
- 「AIエージェント」という言葉は聞いたことがあるが、実際に動かしたことがない方
- ChatGPTやClaudeを使っているが、「AIに実際のタスクを自動実行させたい」と思っている方
この記事で得られること
- OpenClawの全体像: なぜ72時間でGitHub星6万を獲得したのか、その仕組みと背景
- ローカル環境でのセットアップ: Windows/Mac/Linuxでの導入手順と環境別設定ファイル
- 実践的なユースケース: メッセージング連携、ブラウザ自動化、定期実行タスクの構築方法
この記事で扱わないこと
- OpenClawの内部アーキテクチャの詳細実装(Gateway WebSocketプロトコルの詳細など)
- ClawHubスキルの自作方法(別記事予定)
- 本番環境での大規模デプロイメント
1. OpenClawとの出会い
「AIエージェント」という言葉が2025年から飛び交うようになった。ChatGPTに質問すれば答えが返ってくる。Claudeにコードを書かせれば動くものが出てくる。でも、ふと思ったことはないだろうか。
「このAI、なんで質問に答えるだけで、実際に何かやってくれないの?」
メール送って、カレンダー整理して、ブラウザ開いて情報集めて、ファイル作って...。人間が毎日やっている「作業」を、AIに丸投げできないものか。
2026年1月末、その願望を現実にするOSSが爆誕した。それが OpenClaw だ。
OpenClawは、料理で言えば「レシピを教えてくれるAI」ではなく、「実際にキッチンに立って料理してくれるAI」である。LLM(大規模言語モデル)を「頭脳」として接続し、メッセージングアプリを「手足」として使い、あなたのPC上で自律的にタスクを実行する。しかもオープンソース。完全無料。
ここまでで、OpenClawがどんなものか、なんとなくイメージできたでしょうか。次は、この記事で使う用語を整理しておきましょう。
2. 前提知識の確認
本題に入る前に、この記事で登場する用語を確認します。
2.1 AIエージェントとは
従来のチャットAI(ChatGPT、Claudeなど)は「質問→回答」の一方通行だった。AIエージェントは、これに加えて外部ツールを操作する能力を持つ。ブラウザを開く、ファイルを作成する、APIを叩く、シェルコマンドを実行する——これらを「自分で判断して」実行できるのがAIエージェントだ。
2.2 LLM(大規模言語モデル)とは
GPT-5.2、Claude Opus 4.6、DeepSeek R1など、大量のテキストデータで訓練されたAIモデルのこと。OpenClawは自分自身にはLLMを内蔵しておらず、外部のLLMに「頭脳」として接続する設計になっている。自分のAPIキーを持ち込む(BYOK: Bring Your Own Key)スタイルだ。
2.3 MCP(Model Context Protocol)とは
Anthropicが提唱した「AIエージェント用のUSB-C」。AIと外部ツール(データベース、検索エンジン、APIなど)をつなぐ統一プロトコル。OpenClawはMCPを通じて100以上のサービスと連携できる。
2.4 ゲートウェイとは
OpenClawの中核プロセス。ローカルマシン上で常駐し、メッセージングプラットフォーム(WhatsApp、Telegram、Discord等)からの入力を受け取り、LLMに送り、結果をツール実行に変換する「司令塔」の役割を果たす。
これらの用語が押さえられたら、OpenClawの背景を見ていきましょう。
3. OpenClawが生まれた背景
3.1 クローから始まった——名前の変遷が物語るもの
OpenClawの歴史は、名前の変遷そのものだ。
| 時期 | 名称 | 経緯 |
|---|---|---|
| 2025年11月 | Clawdbot | オーストリア人開発者 Peter Steinberger が個人プロジェクトとして公開。Anthropicの「Claude」にかけたロブスターテーマの命名 |
| 2026年1月27日 | Moltbot | Anthropicからの商標に関する指摘を受けリネーム |
| 2026年1月30日 | OpenClaw | コミュニティから「Moltbotはダサい」と不評で、3日後に再リネーム |
この「バタバタリネーム劇」が逆にSNSで話題を呼び、バイラルの起爆剤となった。
3.2 Moltbook——AIだけのSNSが生んだカオス
OpenClawの爆発的成長を決定づけたのは、起業家 Matt Schlicht が立ち上げた Moltbook だ。これは「人間は見るだけ、投稿するのはAIエージェントだけ」というSNS。OpenClawエージェントたちが自律的に投稿し、コメントし、議論する——1週間で160万以上のボットが登録され、750万以上のAI生成投稿が行われた。
エージェントたちが哲学を議論したり、派閥を形成したりする光景は「Dead Internet実験」として世界中で話題になり、OpenClawのGitHubリポジトリに開発者が殺到した。
3.3 数字で見るOpenClawの衝撃
| 指標 | 数値 |
|---|---|
| GitHub Stars(2026年2月時点) | 180,000+ |
| 72時間での獲得スター数 | 60,000+ |
| 対応メッセージングプラットフォーム | 16+ |
| ClawHubスキル数 | 50+ |
| 主要デプロイ国 | 米国・中国が二大拠点 |
背景がわかったところで、基本的な仕組みを見ていきましょう。
4. 基本概念と仕組み
4.1 3層アーキテクチャ
OpenClawは大きく3つの層で構成されている。
WhatsApp / Telegram / Slack / Discord / Signal / iMessage ...
│
▼
┌─────────────────┐
│ Gateway │ ← 層1: メッセージルーティング
│ (制御プレーン) │
│ ws://127.0.0.1 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ LLM接続 │ ← 層2: 頭脳(Claude / GPT / DeepSeek等)
│ (APIキー経由) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Skills │ ← 層3: 実行能力(ブラウザ/ファイル/シェル等)
│ (ツール群) │
└─────────────────┘
4.2 ゲートウェイの役割
ゲートウェイは、OpenClawの心臓部だ。Node.jsで実装された常駐プロセスで、以下を担う。
| 機能 | 説明 |
|---|---|
| メッセージルーティング | 複数のチャットプラットフォームからのメッセージを一元管理 |
| セッション管理 | 会話履歴とコンテキストの永続化 |
| ツール実行 | LLMの判断に基づき、スキル(ブラウザ、ファイル操作等)を実行 |
| マルチエージェント | 複数のエージェントを独立したワークスペースで並行実行 |
4.3 スキルシステム
OpenClawの「できること」はスキルによって拡張される。スキルは自作も可能で、ClawHubというスキルレジストリから検索・インストールもできる。
# スキルの例
- ブラウザ制御(Webページの閲覧・操作)
- ファイル操作(読み書き・作成・削除)
- シェルコマンド実行
- Cron(定期実行タスク)
- Webhook(外部イベントトリガー)
⚠️ セキュリティ警告: ClawHubには過去に悪意あるスキルが400件以上アップロードされた事例がある。必ず信頼できるソースのスキルのみを使用し、サンドボックス環境での実行を推奨する。
基本概念が理解できたところで、実際にコードを書いて動かしてみましょう。
5. 実践:実際に使ってみよう
5.1 環境構築
前提条件
| 項目 | 要件 |
|---|---|
| OS | Windows 10+, macOS 12+, Linux(Ubuntu 22.04+推奨) |
| Node.js | v22以上 |
| Python | 3.11以上(Python連携を使う場合) |
| LLM APIキー | Anthropic / OpenAI / DeepSeek のいずれか |
インストール手順
# 方法1: npxで直接実行(推奨・最も簡単)
npx openclaw@latest
# 方法2: グローバルインストール
npm install -g openclaw
openclaw
# 方法3: ソースからビルド
git clone https://github.com/openclaw/openclaw.git
cd openclaw
npm install
npm start
初回起動時にウィザードが立ち上がり、LLMプロバイダの選択とAPIキーの設定を対話的に行える。
5.2 環境別の設定ファイル
OpenClawの設定は openclaw.config.yaml で管理される。以下の3種類の設定ファイルを用意した。用途に応じて選択してほしい。
開発環境用(openclaw.config.yaml)
# openclaw.config.yaml - 開発環境用(このままコピーして使える)
gateway:
host: 127.0.0.1
port: 18789
log_level: debug # 開発時はdebugで詳細ログを出力
cors: true # ローカル開発時のCORS許可
llm:
provider: anthropic
model: claude-sonnet-4-5-20250929 # 開発時はコスト重視でSonnet
api_key: ${ANTHROPIC_API_KEY}
max_tokens: 4096
security:
trusted_proxies: [] # ローカルのみなのでプロキシ不要
auth_required: false # 開発時は認証なし
sandbox: true # スキル実行をサンドボックス内に制限
channels:
- type: webchat # 開発時はWebChat UIのみ
enabled: true
skills:
claw_hub: false # 開発時はClawHub自動取得を無効化
allowed:
- browser
- filesystem
- shell
本番環境用(openclaw.config.production.yaml)
# openclaw.config.production.yaml - 本番環境用
gateway:
host: 0.0.0.0
port: 18789
log_level: info # 本番はinfoレベル
cors: false
llm:
provider: anthropic
model: claude-opus-4-6 # 本番は最高性能モデル
api_key: ${ANTHROPIC_API_KEY}
max_tokens: 8192
security:
trusted_proxies: # リバースプロキシのIPを明示
- 172.16.0.0/12
auth_required: true # 認証を必須化
auth_token: ${OPENCLAW_AUTH_TOKEN}
sandbox: true
channels:
- type: telegram
enabled: true
bot_token: ${TELEGRAM_BOT_TOKEN}
- type: discord
enabled: true
bot_token: ${DISCORD_BOT_TOKEN}
- type: webchat
enabled: true
skills:
claw_hub: false # 本番では手動管理のスキルのみ
allowed:
- browser
- filesystem
テスト環境用(openclaw.config.test.yaml)
# openclaw.config.test.yaml - CI/テスト用
gateway:
host: 127.0.0.1
port: 18790 # テスト用ポート(本番と競合しない)
log_level: warn
llm:
provider: anthropic
model: claude-haiku-4-5-20251001 # テストはHaikuでコスト最小化
api_key: ${ANTHROPIC_API_KEY}
max_tokens: 1024
security:
auth_required: false
sandbox: true # テスト時もサンドボックス必須
channels:
- type: webchat
enabled: true
skills:
claw_hub: false
allowed:
- filesystem # テスト時はファイル操作のみ
5.3 Pythonから操作する基本スクリプト
OpenClawはNode.jsで動作するが、PythonからHTTP API経由で制御できる。以下は基本的な操作スクリプトだ。
"""
OpenClaw Python制御スクリプト
前提: OpenClawが localhost:18789 で起動済みであること
実行方法: python openclaw_control.py
"""
import requests
import json
import time
from typing import Optional
# --- 設定 ---
OPENCLAW_BASE_URL = "http://127.0.0.1:18789"
AUTH_TOKEN: Optional[str] = None # 認証トークン(本番環境のみ)
def get_headers() -> dict:
"""リクエストヘッダーを生成"""
headers = {"Content-Type": "application/json"}
if AUTH_TOKEN:
headers["Authorization"] = f"Bearer {AUTH_TOKEN}"
return headers
def check_status() -> dict:
"""OpenClawのステータスを確認"""
response = requests.get(
f"{OPENCLAW_BASE_URL}/api/status",
headers=get_headers(),
timeout=10
)
response.raise_for_status()
return response.json()
def send_message(message: str, wait_for_response: bool = True) -> dict:
"""OpenClawにメッセージを送信しタスクを実行させる"""
payload = {
"message": message,
"channel": "api",
"wait": wait_for_response
}
response = requests.post(
f"{OPENCLAW_BASE_URL}/api/chat",
headers=get_headers(),
json=payload,
timeout=120 # エージェントの応答は時間がかかることがある
)
response.raise_for_status()
return response.json()
def list_skills() -> list:
"""利用可能なスキル一覧を取得"""
response = requests.get(
f"{OPENCLAW_BASE_URL}/api/skills",
headers=get_headers(),
timeout=10
)
response.raise_for_status()
return response.json().get("skills", [])
def main():
"""メイン処理"""
# 1. ステータス確認
print("=== OpenClaw ステータス確認 ===")
try:
status = check_status()
print(f"状態: {status.get('status', 'unknown')}")
print(f"モデル: {status.get('model', 'unknown')}")
print(f"稼働時間: {status.get('uptime', 'unknown')}")
except requests.ConnectionError:
print("❌ OpenClawに接続できません。起動しているか確認してください。")
print(" 起動コマンド: npx openclaw@latest")
return
# 2. スキル一覧
print("\n=== 利用可能なスキル ===")
skills = list_skills()
for skill in skills:
print(f" - {skill.get('name', 'unknown')}: {skill.get('description', '')}")
# 3. タスク実行例
print("\n=== タスク実行 ===")
result = send_message("現在のディレクトリのファイル一覧を表示して")
print(f"応答: {result.get('response', 'no response')}")
# 4. 高度なタスク実行例
print("\n=== 高度なタスク実行 ===")
result = send_message(
"Pythonで1から100までの素数を計算するスクリプトを作成し、"
"primes.py として保存して実行結果を教えて"
)
print(f"応答: {result.get('response', 'no response')}")
if __name__ == "__main__":
main()
5.4 実行結果
上記のコードを実行すると、以下のような出力が得られる:
$ python openclaw_control.py
=== OpenClaw ステータス確認 ===
状態: running
モデル: claude-sonnet-4-5-20250929
稼働時間: 0h 15m 32s
=== 利用可能なスキル ===
- browser: Webブラウザの操作
- filesystem: ファイルの読み書き
- shell: シェルコマンドの実行
=== タスク実行 ===
応答: 現在のディレクトリには以下のファイルがあります:
- openclaw_control.py
- openclaw.config.yaml
- README.md
=== 高度なタスク実行 ===
応答: primes.py を作成し実行しました。1から100までの素数は:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,
53, 59, 61, 67, 71, 73, 79, 83, 89, 97
合計25個です。
5.5 よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
ConnectionError: Connection refused |
OpenClawが起動していない、またはポートが異なる |
npx openclaw@latest で起動し、ポート18789を確認 |
401 Unauthorized |
認証トークンが未設定または不正 | 設定ファイルの auth_required を確認。開発環境では false に設定 |
Error: Cannot find module 'openclaw' |
Node.js v22未満を使用している |
node --version で確認し、v22以上にアップデート |
ETELEGRAM: 409 Conflict |
同じBotトークンで複数インスタンスが起動している | 既存のOpenClawプロセスを停止してから再起動 |
Gateway timeout after 120s |
LLMのAPIレスポンスが遅い、またはタスクが複雑すぎる |
max_tokens を減らす、またはタスクを分割して送信 |
5.6 環境診断スクリプト
問題が発生した場合は、以下のスクリプトで環境を診断できる:
#!/usr/bin/env python3
"""
OpenClaw 環境診断スクリプト
実行方法: python check_openclaw_env.py
"""
import subprocess
import sys
import shutil
import os
def check_environment():
"""環境をチェックして問題を報告"""
issues = []
warnings = []
# Python バージョン確認
if sys.version_info < (3, 11):
issues.append(
f"Python 3.11以上が必要です(現在: {sys.version})"
)
else:
print(f"✅ Python {sys.version_info.major}.{sys.version_info.minor}")
# Node.js確認
node_path = shutil.which("node")
if node_path is None:
issues.append("Node.jsがインストールされていません")
else:
result = subprocess.run(
["node", "--version"], capture_output=True, text=True
)
version = result.stdout.strip()
major = int(version.lstrip("v").split(".")[0])
if major < 22:
issues.append(f"Node.js v22以上が必要です(現在: {version})")
else:
print(f"✅ Node.js {version}")
# npm確認
npm_path = shutil.which("npm")
if npm_path is None:
issues.append("npmがインストールされていません")
else:
print("✅ npm が利用可能")
# OpenClawプロセス確認
try:
import requests
resp = requests.get(
"http://127.0.0.1:18789/api/status", timeout=5
)
if resp.status_code == 200:
print("✅ OpenClaw Gateway が稼働中")
else:
warnings.append(
f"OpenClaw Gateway が応答しましたが、"
f"ステータスコード {resp.status_code} です"
)
except Exception:
warnings.append(
"OpenClaw Gateway に接続できません(未起動の可能性)"
)
# 環境変数確認
api_keys = [
"ANTHROPIC_API_KEY", "OPENAI_API_KEY", "DEEPSEEK_API_KEY"
]
found_key = False
for key in api_keys:
if os.environ.get(key):
print(f"✅ {key} が設定済み")
found_key = True
if not found_key:
warnings.append(
"LLM APIキーが環境変数に設定されていません "
"(ANTHROPIC_API_KEY / OPENAI_API_KEY / DEEPSEEK_API_KEY)"
)
# 結果表示
if issues:
print(f"\n❌ {len(issues)}件の問題が見つかりました:")
for issue in issues:
print(f" ✗ {issue}")
if warnings:
print(f"\n⚠️ {len(warnings)}件の警告:")
for w in warnings:
print(f" △ {w}")
if not issues and not warnings:
print("\n🎉 環境は正常です!OpenClawを始められます。")
if __name__ == "__main__":
check_environment()
実装方法がわかったので、次は具体的なユースケースを見ていきます。
6. ユースケース別ガイド
6.1 ユースケース1: Telegram Bot で日常タスクを自動化
想定読者: 個人開発者・フリーランスで、日々のルーチンワークを減らしたい方
推奨構成: OpenClaw + Telegram + Claude Sonnet
サンプルコード:
"""
Telegram経由でOpenClawにタスクを送るPythonラッパー
- 毎朝の天気確認 + カレンダー要約を自動送信
実行方法: python telegram_daily_task.py
"""
import requests
import schedule
import time
from datetime import datetime
OPENCLAW_URL = "http://127.0.0.1:18789/api/chat"
def morning_routine():
"""毎朝8時に実行する日課タスク"""
today = datetime.now().strftime("%Y年%m月%d日(%A)")
task = (
f"今日は{today}です。以下のタスクを実行してください:\n"
"1. 東京の今日の天気を調べて要約\n"
"2. 今日のGoogleカレンダーの予定を確認\n"
"3. 上記をTelegramで私に送信"
)
try:
response = requests.post(
OPENCLAW_URL,
json={"message": task, "channel": "telegram"},
timeout=180
)
print(f"[{datetime.now()}] 朝のルーチン実行完了")
except Exception as e:
print(f"[{datetime.now()}] エラー: {e}")
def main():
"""スケジューラーを起動"""
schedule.every().day.at("08:00").do(morning_routine)
print("OpenClaw 日課スケジューラー起動")
print("毎朝8時にTelegramへ天気+予定を送信します")
while True:
schedule.run_pending()
time.sleep(60)
if __name__ == "__main__":
main()
6.2 ユースケース2: Webリサーチの自動化
想定読者: 技術ブログや調査レポートを書くことが多いエンジニア
推奨構成: OpenClaw + Browser スキル + Claude Opus
サンプルコード:
"""
OpenClawのブラウザスキルを使った自動リサーチ
- 指定トピックについてWeb検索し、要約レポートを生成
実行方法: python auto_research.py "調べたいトピック"
"""
import requests
import sys
import json
from pathlib import Path
from datetime import datetime
OPENCLAW_URL = "http://127.0.0.1:18789/api/chat"
def run_research(topic: str) -> str:
"""トピックについてOpenClawにリサーチさせる"""
task = (
f"以下のトピックについてWebリサーチを行い、"
f"Markdown形式のレポートを作成してください:\n\n"
f"トピック: {topic}\n\n"
f"要件:\n"
f"- 最新の情報源を3つ以上参照\n"
f"- 各情報源のURLを記載\n"
f"- 500文字程度で要約\n"
f"- レポートを research_report.md として保存"
)
response = requests.post(
OPENCLAW_URL,
json={"message": task, "channel": "api", "wait": True},
timeout=300
)
response.raise_for_status()
return response.json().get("response", "")
def main():
if len(sys.argv) < 2:
print("使い方: python auto_research.py 'トピック'")
sys.exit(1)
topic = sys.argv[1]
print(f"リサーチ開始: {topic}")
print("(ブラウザが自動操作されます。しばらくお待ちください...)")
result = run_research(topic)
print(f"\n=== リサーチ結果 ===\n{result}")
# レポートファイルの確認
report_path = Path("research_report.md")
if report_path.exists():
print(f"\n📄 レポート保存先: {report_path.absolute()}")
if __name__ == "__main__":
main()
6.3 ユースケース3: Discord Bot としてチーム運用
想定読者: 小規模チームで、Discordをコミュニケーションツールとして使っている方
推奨構成: OpenClaw + Discord + Claude Sonnet + Cron スキル
サンプルコード:
"""
OpenClaw Discord Bot 管理スクリプト
- チームのDiscordサーバーにOpenClawを接続
- 定期タスク(日報リマインド、ステータスチェック)を設定
実行方法: python discord_team_bot.py
"""
import requests
import json
OPENCLAW_URL = "http://127.0.0.1:18789/api"
def setup_cron_tasks():
"""定期実行タスクを設定"""
cron_tasks = [
{
"name": "daily_standup_reminder",
"schedule": "0 9 * * 1-5", # 平日9時
"message": (
"Discordの #general チャンネルに "
"「おはようございます!今日のスタンドアップの時間です。"
"昨日やったこと・今日やること・困っていることを"
"共有してください」と送信して"
)
},
{
"name": "weekly_summary",
"schedule": "0 17 * * 5", # 金曜17時
"message": (
"今週のDiscordの会話を要約し、"
"#weekly-summary チャンネルに投稿して"
)
}
]
for task in cron_tasks:
response = requests.post(
f"{OPENCLAW_URL}/cron",
json=task,
timeout=30
)
if response.status_code == 200:
print(f"✅ Cron設定完了: {task['name']}")
else:
print(f"❌ Cron設定失敗: {task['name']}")
def main():
"""Discord Bot のセットアップ"""
# 1. 接続確認
status = requests.get(
f"{OPENCLAW_URL}/status", timeout=10
).json()
print(f"OpenClaw: {status.get('status')}")
# 2. Cronタスク設定
print("\n=== 定期タスク設定 ===")
setup_cron_tasks()
print("\n🎉 Discord Bot セットアップ完了!")
print("Discordでメンションまたは /status コマンドで動作確認できます。")
if __name__ == "__main__":
main()
ユースケースを把握できたところで、この先の学習パスを確認しましょう。
7. 学習ロードマップ
この記事を読んだ後、次のステップとして以下をおすすめする。
初級者向け(まずはここから)
- OpenClaw公式リポジトリ のREADMEを読み、WebChat UIで動作確認
- OpenClaw公式ドキュメント のGetting Startedガイド
- 個人のTelegramまたはDiscordアカウントに接続して、簡単なタスクを実行
中級者向け(実践に進む)
- 複数チャンネル(Telegram + Discord + WebChat)の同時運用
- Cron スキルを使った定期実行タスクの設定
- カスタムスキルの作成(公式ドキュメントの Skills Development Guide を参照)
- Tailscale を使ったリモートアクセスの設定
上級者向け(さらに深く)
- マルチエージェントルーティング(用途別にエージェントを分離)
- セキュリティハードニング(
openclaw doctorによる脆弱性チェック) - Gateway WebSocket APIを直接操作するカスタムクライアントの開発
- OpenClawソースコード へのコントリビュート
8. まとめ
この記事では、OpenClawについて以下を解説した:
- OpenClawとは何か: LLMを頭脳、メッセージングアプリを手足として使う自律型AIエージェント
- 爆発的成長の背景: Moltbookが起爆剤となり、72時間でGitHub星6万を達成
- 実際の使い方: 環境構築から、Telegram Bot、Webリサーチ自動化、Discord チーム運用まで
私の所感
OpenClawは「AIがついに"やってくれる"時代が来た」と実感させてくれるツールだ。ただし、セキュリティリスクは無視できない。Palo Alto Networksが指摘する「高い自律性 × 広いシステムアクセス × インターネット接続」の三重リスクは、個人利用でも意識すべきだ。
私自身、最初にOpenClawを触ったときは「サンドボックス設定をオフにしたまま、シェルコマンド実行を許可していた」という初歩的なミスを犯した。AIエージェントの時代では、「便利さとセキュリティは常にトレードオフ」という原則を、これまで以上に意識する必要がある。
それでも、OpenClawが切り開いた「OSS自律型エージェント」の世界は、2026年のソフトウェア開発を根本から変えるポテンシャルがある。まずはWebChat UIで触ってみて、その「やってくれる」感覚を体験してほしい。