OpenClaw経由でClaude Codeを操作する方法¶
💡 目的¶
DiscordからClaude Codeの機能(ファイル編集、プランモード等)を実行できるようにする。
🔍 実装方法の詳細比較¶
方法1: OpenClawカスタムスキル作成(推奨)¶
📋 概要¶
OpenClawのスキルシステムを使って、Discordコマンドから直接Claude Codeを呼び出す。
🏗️ アーキテクチャ¶
Discord
↓
@MyLabBot /code-edit <file> <instruction>
↓
OpenClaw Gateway
↓
カスタムスキル (TypeScript/JavaScript)
↓
Claude Code CLI 実行
↓
結果をDiscordに返す
✅ メリット¶
- OpenClawの機能をフル活用
- 既存のスキルシステムに統合
- スキル管理が簡単(
openclaw skills list) - 権限管理が組み込み済み
- 実装が比較的簡単
- OpenClawのスキルSDKを使用
- TypeScript/JavaScriptで記述
- 豊富なサンプル・ドキュメント
- 保守性が高い
- OpenClawのアップデートに追従
- スキル単位で管理・更新
❌ デメリット¶
- OpenClawに依存(OpenClaw停止時は使えない)
- TypeScript/JavaScriptの知識が必要
- スキル開発の学習コストがある
🛠️ 実装難易度¶
中級(⭐⭐⭐☆☆) - TypeScript経験者: 1-2日 - 初心者: 3-5日
💻 実装例(疑似コード)¶
// openclaw-skill: claude-code-bridge
export default {
name: 'claude-code',
description: 'Execute Claude Code commands',
commands: {
'code-edit': async ({ args, reply }) => {
const [file, instruction] = args;
// Claude Code CLIを実行
const result = await exec(`claude "${instruction}" --file ${file}`);
// 結果をDiscordに返す
await reply(`✅ 完了:\n\`\`\`\n${result}\n\`\`\``);
},
'plan-mode': async ({ args, reply }) => {
const [task] = args;
// プランモードでClaude Code実行
const plan = await exec(`claude "plan: ${task}"`);
await reply(`📋 計画:\n${plan}`);
}
}
};
📚 参考リンク¶
- OpenClaw Skills Documentation: https://docs.openclaw.ai/tools/skills
- Skill Creator:
/skill_creatorコマンドを使用
方法2: Webhook + 自動実行システム¶
📋 概要¶
Webhookを受け取るサーバーを立て、Discordからのメッセージに応じてClaude Codeを実行。
🏗️ アーキテクチャ¶
Discord
↓
Webhook送信
↓
Webhookサーバー (Python/Node.js)
↓
メッセージをパース
↓
Claude Code CLI 実行
↓
Discord APIで結果を投稿
✅ メリット¶
- 完全なカスタマイズ性
- 自由に機能を追加できる
- OpenClawに依存しない
- 複雑なロジックも実装可能
- 柔軟性が高い
- どんな言語でも実装可能(Python, Node.js等)
- 既存のスクリプトと統合しやすい
- ファイル監視、自動実行なども追加可能
❌ デメリット¶
- 実装が複雑
- Webhookサーバーの構築が必要
- セキュリティ対策が必要
- エラーハンドリングを自分で実装
- 保守コストが高い
- Discord APIの変更に対応が必要
- サーバーの監視・管理が必要
🛠️ 実装難易度¶
上級(⭐⭐⭐⭐☆) - 経験者: 2-3日 - 初心者: 1週間以上
💻 実装例(疑似コード)¶
# webhook_server.py
from flask import Flask, request
import subprocess
import discord
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def handle_webhook():
data = request.json
command = data['content']
# コマンドをパース
if command.startswith('!code-edit'):
file, instruction = parse_command(command)
# Claude Code実行
result = subprocess.run(
['claude', instruction, '--file', file],
capture_output=True
)
# Discordに投稿
post_to_discord(data['channel_id'], result.stdout)
return {'status': 'ok'}
if __name__ == '__main__':
app.run(port=5000)
方法3: シンプルなプロトタイプ(最速)¶
📋 概要¶
最小限の機能で、まず動くものを作る。既存のMyLab Botを拡張。
🏗️ アーキテクチャ¶
✅ メリット¶
- すぐに始められる
- 既存のMyLab Botを拡張
- Pythonで実装(慣れた言語)
- 数時間で動くものができる
- 学習コストが低い
- シンプルな構造
- 既存コードを参考にできる
❌ デメリット¶
- 機能が限定的
- 複雑な処理は難しい
- スケーラビリティが低い
- 将来的には作り直しが必要
- 本格運用には向かない
🛠️ 実装難易度¶
初級(⭐⭐☆☆☆) - 既存のbot.pyを理解していれば: 2-3時間 - 初心者: 1日
💻 実装例¶
# scripts/discord_bot/bot.py に追加
import subprocess
@bot.command(name='code-edit')
async def code_edit(ctx, file: str, *, instruction: str):
"""Claude Codeでファイル編集
使い方:
$code-edit path/to/file.py "ログ機能を追加して"
"""
await ctx.send(f"🔄 編集中: {file}")
try:
# Claude Code CLI実行
result = subprocess.run(
['claude', instruction, '--file', file],
capture_output=True,
text=True,
timeout=60
)
if result.returncode == 0:
# 成功
await ctx.send(f"✅ 編集完了:\n```\n{result.stdout[:1900]}\n```")
else:
# エラー
await ctx.send(f"❌ エラー:\n```\n{result.stderr[:1900]}\n```")
except subprocess.TimeoutExpired:
await ctx.send("⏱️ タイムアウト: 処理に時間がかかりすぎました")
except Exception as e:
await ctx.send(f"❌ 予期しないエラー: {str(e)}")
@bot.command(name='plan')
async def plan_mode(ctx, *, task: str):
"""プランモード実行
使い方:
$plan ユーザー認証機能を実装する計画を立てて
"""
await ctx.send(f"📋 計画作成中...")
try:
# Claude Codeでプラン作成
result = subprocess.run(
['claude', f'plan: {task}'],
capture_output=True,
text=True,
timeout=120
)
if result.returncode == 0:
# 結果をチャンク分割して投稿(Discordの2000文字制限対策)
output = result.stdout
chunks = [output[i:i+1900] for i in range(0, len(output), 1900)]
for i, chunk in enumerate(chunks):
await ctx.send(f"📋 計画 (Part {i+1}/{len(chunks)}):\n```\n{chunk}\n```")
else:
await ctx.send(f"❌ エラー:\n```\n{result.stderr[:1900]}\n```")
except subprocess.TimeoutExpired:
await ctx.send("⏱️ タイムアウト: 処理に時間がかかりすぎました")
except Exception as e:
await ctx.send(f"❌ 予期しないエラー: {str(e)}")
@bot.command(name='code-review')
async def code_review(ctx, file: str):
"""コードレビュー
使い方:
$code-review path/to/file.py
"""
await ctx.send(f"🔍 レビュー中: {file}")
try:
result = subprocess.run(
['claude', f'このファイルをレビューして: {file}'],
capture_output=True,
text=True,
timeout=60
)
if result.returncode == 0:
await ctx.send(f"✅ レビュー結果:\n```\n{result.stdout[:1900]}\n```")
else:
await ctx.send(f"❌ エラー:\n```\n{result.stderr[:1900]}\n```")
except Exception as e:
await ctx.send(f"❌ エラー: {str(e)}")
📊 比較表¶
| 項目 | OpenClawスキル | Webhook | プロトタイプ |
|---|---|---|---|
| 難易度 | ⭐⭐⭐☆☆ | ⭐⭐⭐⭐☆ | ⭐⭐☆☆☆ |
| 実装時間 | 1-2日 | 2-3日 | 数時間 |
| 保守性 | ◎ | △ | △ |
| 拡張性 | ○ | ◎ | △ |
| セキュリティ | ◎ | △ | ○ |
| OpenClaw依存 | あり | なし | なし |
| 学習コスト | 中 | 高 | 低 |
| 推奨度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐☆☆ | ⭐⭐⭐⭐☆ |
💡 推奨: 段階的アプローチ¶
Phase 1: プロトタイプで試す(今週)¶
# 既存のMyLab Botに機能追加
# scripts/discord_bot/bot.py を編集
実装コマンド:
- $code-edit <file> <instruction>
- $plan <task>
- $code-review <file>
目的:
→ まず動くものを作って試す
→ 必要な機能を見極める
→ 使い勝手を確認
実装手順: 1. scripts/discord_bot/bot.py を開く 2. 上記のコマンドを追加 3. Botを再起動 4. Discordでテスト
Phase 2: OpenClawスキルに移行(1-2週間後)¶
// より洗練された実装
# openclaw/skills/claude-code-bridge/
実装内容:
- OpenClawのスキルシステムを活用
- 権限管理、エラーハンドリング
- 複数のコマンドを追加
- ログ記録、進捗通知
目的:
→ 安定した運用
→ 高度な機能追加
→ 保守性向上
実装手順: 1. OpenClawスキル開発について学習 2. /skill_creator コマンドでスキル作成 3. TypeScriptで実装 4. テスト・デプロイ
Phase 3: 高度な機能追加(将来)¶
実装内容:
- ファイル監視・自動実行
- プランの保存・管理
- チーム共有機能
- GitHub連携強化
- 定期実行(Cron)
- 通知システム
目的:
→ 完全自動化
→ チーム開発対応
→ CI/CD統合
🎯 実現可能な機能¶
基本機能(Phase 1)¶
- ✅ ファイル編集コマンド
- ✅ プランモード実行
- ✅ コードレビュー
- ✅ Git操作
応用機能(Phase 2)¶
- ✅ 複数ファイルの一括編集
- ✅ プランの保存・共有
- ✅ 進捗通知
- ✅ インタラクティブモード
高度な機能(Phase 3)¶
- ✅ 定期実行(Cron)
- ✅ ファイル監視
- ✅ PR自動作成
- ✅ チーム共有
🚀 実装開始ガイド¶
今すぐ始める: Phase 1 プロトタイプ¶
ステップ1: bot.pyを編集¶
ステップ2: Botを再起動¶
ステップ3: Discordでテスト¶
⚠️ 注意事項¶
セキュリティ¶
- Claude Code CLIは強力なツール
- 任意のコマンド実行を許可しない
- 信頼できるユーザーのみに制限
admin_usersリストで権限管理
エラーハンドリング¶
- タイムアウト設定(60秒推奨)
- 出力文字数制限(Discord: 2000文字)
- 例外処理を必ず実装
パフォーマンス¶
- Claude Code実行は時間がかかる
- 「処理中...」メッセージを表示
- バックグラウンドで実行を検討
📚 参考リソース¶
OpenClaw¶
- 公式ドキュメント: https://docs.openclaw.ai
- スキル開発: https://docs.openclaw.ai/tools/skills
- GitHub: https://github.com/openclaw/openclaw
Claude Code¶
- GitHub: https://github.com/anthropics/claude-code
- ドキュメント: 内蔵(
claude --help)
Discord Bot開発¶
- discord.py: https://discordpy.readthedocs.io
- 既存実装:
scripts/discord_bot/bot.py
📝 次のステップ¶
- Phase 1を実装(今週)
- bot.pyに基本コマンドを追加
- Discordでテスト
-
フィードバックを収集
-
Phase 2の検討(1-2週間後)
- OpenClawスキル開発について学習
- 必要な機能を洗い出し
-
実装計画を立てる
-
ドキュメント更新
- 使い方ガイドを作成
- トラブルシューティング追加
- GitHub Issueに記録
作成日: 2026-02-09 最終更新: 2026-02-09 ステータス: 計画中