Contents
1. OpenClaw の概要と拡張性
OpenClaw はエンタープライズ向けに設計されたオープンソースのログ収集・解析基盤です。データパイプラインは軽量かつスケーラブルで、リアルタイム可視化やアラート生成を標準機能として提供します。プラグイン機構が中心的な拡張ポイント となっており、独自の入力コネクタ・変換ロジック・出力先を容易に追加できます。本セクションでは OpenClaw の全体像と、プラグイン開発がもたらすビジネス上のメリットを簡潔にまとめます。
- 統合的なログ管理:Filebeat、Fluent Bit など既存エージェントとのシームレス連携。
- リアルタイム分析:ストリーミング処理で数秒以内に異常検知が可能。
- プラグイン駆動の柔軟性:業務要件や新しいデバイスプロトコルに合わせてコードだけで機能追加できる。
2. プラグインシステムの核心構造
この章では、OpenClaw のプラグインが どこで 起動し、何を 呼び出すかを三層モデルで整理します。各層の役割と実装上の注意点を把握することで、設計ミスやランタイムエラーを未然に防げます。
2.1 エントリーポイント
プラグインは Plugin インタフェース(正確な完全修飾名は SDK に依存) を実装したクラスがエントリーポイントとなります。OpenClaw の起動時にクラスローダが自動的に検出し、ライフサイクルメソッドを呼び出します。
- 必須メソッド例
java
void init(ConfigService config); // 初期化・設定取得
void onStart(); // 起動直後に実行
void onStop(); // 停止時クリーンアップ Plugin実装は 無状態(ステートレス)であることが推奨されます。共有リソースはinit時に取得し、スレッドセーフな設計を心掛けましょう。
2.2 提供 API
OpenClaw がプラグイン向けに公開している共通機能です。代表的なサービスは以下のとおりです(実際のクラス名は SDK を参照)。
| サービス | 主な役割 | 使用例 |
|---|---|---|
ConfigService |
プラグイン設定の取得・監視 | config.getString("greeting", "Hello") |
DataBus |
ログイベントやメトリクスの送受信パイプライン | dataBus.publish(event) |
MetricRegistry |
カスタムメトリクス登録(Prometheus 互換) | registry.counter("my_counter").inc() |
2.3 イベントフック
OpenClaw の内部イベントに対してプラグインが介入できるポイントです。フックは 同期 または 非同期 に実行され、onLogReceived 系は高頻度で呼び出されるため軽量処理が必須です。
| フック名 | 呼び出しタイミング | 推奨処理 |
|---|---|---|
onStart() |
OpenClaw 起動直後 | 外部サービス接続、リソース確保 |
onLogReceived(LogEvent e) |
ログがバッファに入った瞬間 | フィルタリング・フォーマット変換 |
onStop() |
シャットダウン時 | コネクション解放、統計送信 |
3. 開発環境の整備と最新依存設定
本節では Java 11+ と Maven(または Gradle) を前提に、OpenClaw SDK の取得方法と推奨する依存バージョンを示します。古いライブラリは脆弱性や非互換の原因になるため、常に最新安定版を使用してください。
3.1 必要ツール
| ツール | 推奨バージョン | インストール例 |
|---|---|---|
| JDK | OpenJDK 11 以上(推奨 21) | sudo apt-get install openjdk-21-jdk |
| Maven | 3.9.6 以降 | brew install maven または公式バイナリ |
| Git | 任意 | git --version |
3.2 OpenClaw SDK の取得
- 公式リポジトリの確認
bash
# URL が有効かどうかを事前にチェック
curl -I https://github.com/openclaw/openclaw - ローカルクローン & インストール(SDK が
openclaw-sdkモジュールとして提供されている想定)
bash
git clone https://github.com/openclaw/openclaw.git
cd openclaw/sdk
mvn clean install -DskipTests
※ 2026年5月時点の最新バージョン例
OpenClaw SDK:3.2.1(Maven Central に公開)
SLF4J:2.0.13(ロギング抽象層)
3.3 Maven プロジェクトの雛形と依存宣言
|
1 2 3 4 |
mvn archetype:generate -DgroupId=org.example \ -DartifactId=my-plugin -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false |
pom.xml の抜粋(最新バージョンに更新):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<properties> <java.version>21</java.version> <openclaw.sdk.version>3.2.1</openclaw.sdk.version> <slf4j.version>2.0.13</slf4j.version> </properties> <dependencies> <!-- OpenClaw SDK --> <dependency> <groupId>org.openclaw</groupId> <artifactId>openclaw-sdk</artifactId> <version>${openclaw.sdk.version}</version> </dependency> <!-- SLF4J API + Simple バインディング(開発時は簡易) --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>${slf4j.version}</version> <scope>runtime</scope> </dependency> <!-- テスト用 JUnit 5 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.10.2</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!-- Maven Compiler Plugin: Java 21 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.12.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build> |
4. HelloWorld サンプルプラグイン:コードと構成の徹底解説
実装例を通じて、エントリーポイントの作り方・設定ファイルの書式・ビルド結果の確認 手順を学びます。
4.1 ソースコード(最小構成)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
package org.example.helloworld; import org.openclaw.api.Plugin; // 実際のパッケージは SDK に合わせて修正 import org.openclaw.api.ConfigService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * HelloWorld プラグインのエントリークラス。 * OpenClaw がプラグインをロードすると onStart が呼び出されます。 */ public class PluginMain implements Plugin { private static final Logger LOG = LoggerFactory.getLogger(PluginMain.class); private ConfigService config; @Override public void init(ConfigService config) { this.config = config; // 設定サービスを保持 } @Override public void onStart() { String greeting = config.getString("greeting", "Hello, OpenClaw!"); LOG.info("[HelloWorld] {}", greeting); } @Override public void onStop() { LOG.info("[HelloWorld] Plugin stopped."); } } |
ポイント
-ConfigServiceから取得した設定はデフォルト値を必ず用意し、欠落時の例外を防止します。
- ロギングは SLF4J API 経由で行い、実行環境に合わせてバインディング(logback, slf4j‑simple 等)を切り替えられます。
4.2 ディレクトリ構成
|
1 2 3 4 5 6 7 8 9 10 11 |
my-plugin/ ├─ pom.xml └─ src ├─ main │ ├─ java │ │ └─ org/example/helloworld/PluginMain.java │ └─ resources │ └─ plugin.yaml # メタ情報(必須) └─ test └─ java # 任意のユニットテスト |
4.3 plugin.yaml の書式例
|
1 2 3 4 5 6 7 |
name: hello-world version: 1.0.0 description: OpenClaw 用最小サンプルプラグイン entrypoint: org.example.helloworld.PluginMain # 任意で依存プラグインやロード順序も記述可能 loadOrder: 20 |
- 必須項目 は
name,version,entrypointの3つです。 loadOrderが小さいほど早くロードされ、他プラグインとの依存関係に影響します。
5. ビルド・パッケージ化、OpenClaw 本体への導入手順
5.1 Maven によるビルドと JAR の内容確認
|
1 2 3 |
cd my-plugin mvn clean package # テスト実行後に target/*.jar が生成されます |
target/hello-world-1.0.0.jar を展開して中身を確認:
|
1 2 3 4 5 6 7 |
jar tf target/hello-world-1.0.0.jar # 出力例 META-INF/ MANIFEST.MF org/example/helloworld/PluginMain.class plugin.yaml |
5.2 プラグインの配置と有効化
- JAR 配置
bash
sudo cp target/hello-world-1.0.0.jar /opt/openclaw/plugins/ plugins.yamlにエントリ追加(管理者権限で編集)
yaml
plugins:
- name: hello-world
jar: hello-world-1.0.0.jar
enabled: true
loadOrder: 20
- OpenClaw 再起動
bash
sudo systemctl restart openclaw.service - ロード確認(ログ出力)
[INFO] [HelloWorld] Hello, OpenClaw!
トラブルシューティング:
ClassNotFoundExceptionが出た場合はpom.xmlの依存が正しくインストールされているか、ローカルリポジトリに SDK JAR が存在するかを再確認してください。
6. デバッグ・テスト戦略
6.1 ログレベルの動的変更
config/logging.yaml の level: INFO を DEBUG に変更すると、プラグイン内部の logger.debug() が即座に出力されます。運用中は 環境変数(例: OPENCLAW_LOG_LEVEL=DEBUG)で切り替えることも可能です。
6.2 ローカルテストランナー
OpenClaw SDK が提供する OpenClawTestRunner を利用すれば、プラグイン単体を本体なしで起動できます。サンプルコード:
|
1 2 3 4 5 6 7 8 9 10 11 |
public class PluginTest { @Test public void runPlugin() throws Exception { OpenClawTestRunner runner = new OpenClawTestRunner(); runner.loadPlugin(Paths.get("target/hello-world-1.0.0.jar")); runner.start(); // onStart が呼ばれる // 必要に応じてモック LogEvent を送出 runner.stop(); // onStop が呼ばれる } } |
6.3 ユニットテスト(JUnit 5)
プラグインロジックは 純粋な Java クラス として切り出すとテストしやすくなります。以下は ConfigService のモック例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
@ExtendWith(MockitoExtension.class) class PluginMainTest { @Mock ConfigService config; PluginMain plugin; @BeforeEach void setUp() { plugin = new PluginMain(); when(config.getString(eq("greeting"), anyString())) .thenReturn("テストメッセージ"); plugin.init(config); } @Test void onStart_logsGreeting() { Logger logger = (Logger) LoggerFactory.getLogger(PluginMain.class); ListAppender<ILoggingEvent> appender = new ListAppender<>(); appender.start(); ((ch.qos.logback.classic.Logger) logger).addAppender(appender); plugin.onStart(); assertTrue(appender.list.stream() .anyMatch(e -> e.getFormattedMessage().contains("テストメッセージ"))); } } |
7. 配布とバージョン管理のベストプラクティス
7.1 GitHub Release とアーティファクト公開
| 手順 | コマンド例 |
|---|---|
| タグ作成 | git tag -a v1.0.0 -m "Initial release" |
| リモートへ送信 | git push origin v1.0.0 |
| Release 作成(GitHub UI) | JAR を添付し、変更点を記載 |
推奨: CHANGELOG.md に Semantic Versioning(MAJOR.MINOR.PATCH)に基づく変更履歴を書き残す。
7.2 OpenClaw Plugin Hub(Marketplace)への登録
plugin.yamlにリポジトリ URL を追記
yaml
repository: https://github.com/yourorg/hello-world-plugin- Hub の管理コンソールで 「新規プラグイン」 → リポジトリ URL・バージョン番号を入力。
- 承認後、OpenClaw 本体の
plugins.yamlにautoUpdate: trueを設定すると、Hub から自動的に最新 JAR が取得されます。
7.3 バージョンアップ時の注意点
- 依存ライブラリの互換性:SDK のメジャーアップデートでは API が変更されることがあるため、ビルド前にリリースノートを必ず確認してください。
- プラグイン設定マイグレーション:
plugin.yamlに新フィールドが追加された場合は、既存環境でのフォールバック処理(デフォルト値)を実装しておくとスムーズです。
8. 移行ガイド:旧バージョンから最新 SDK への切り替え
| 項目 | 従来 (2.x 系) | 推奨 (3.x 系) |
|---|---|---|
| Java バージョン | JDK 11 | JDK 21(LTS) |
| ロギング | SLF4J 1.7 系 + Logback 0.9 | SLF4J 2.x 系 + Logback 1.5 |
| 設定 API | ConfigurationService |
ConfigService(名前変更) |
| ビルドプラグイン | maven-compiler-plugin 3.8 |
3.12 以上(モジュールサポート) |
移行手順の概略
- pom.xml の依存バージョンを更新(上記表参照)。
- コードベースで破壊的変更を検索:IDE の「未解決シンボル」や SDK の
deprecationアノテーションに注目。 - テストスイートの実行:
mvn verifyで全テストが通過すれば基本的に移行完了。 - 本番環境で段階的ロールアウト:
plugins.yamlのenabled: falseに設定した状態で新プラグインをデプロイし、ログとメトリクスを観測して問題がなければ有効化。
9. まとめ
- OpenClaw はプラグイン駆動の拡張性 が最大の魅力であり、業務要件に合わせた独自ロジックを簡単に組み込めます。
- 三層モデル(エントリーポイント・提供 API・イベントフック) を正しく理解すれば、設計ミスやランタイム障害を防げます。
- 開発環境は JDK 21 + Maven 3.9+ + 最新 OpenClaw SDK (例: 3.2.1) が推奨され、依存は常に最新版へ更新してください。
- サンプルコード と ディレクトリ構成 を踏襲すれば、最小プラグインの作成から本体へのデプロイまで数分で完了します。
- デバッグ・テスト はローカルランナーと JUnit 5 によるユニットテストで網羅し、CI/CD パイプライン に組み込むことで品質を保ちます。
- 配布は GitHub Release + OpenClaw Plugin Hub を活用し、Semantic Versioning でバージョン管理すれば利用者側のアップデートも安全です。
以上の手順とベストプラクティスに沿って開発を進めれば、OpenClaw カスタマイズ 方法(プラグイン) を確実に習得でき、組織全体のログ活用戦略を強化できます。