# OpenCodeの機能と実践的な使い方
🤖 OpenCodeを「ターミナルで対話するツール」から「プログラムで操れる開発サーバー」へ。SDKとheadlessサーバーを使えば、CIや独自UIにAIコーディングを組み込めます。
🏷️ タイトル: 型安全JSクライアント・headlessサーバー
🔗 URL:
📘 概要
OpenCodeはTUIだけでなく、HTTPで操作できるheadlessサーバーとして起動できます。`
@opencode-ai/sdk` という型安全なJavaScript/TypeScriptクライアントから、このサーバーへ接続してセッション作成・プロンプト送信・イベント購読などを行えます。型はサーバーのOpenAPI仕様から自動生成されるため、補完と型チェックがそのまま効きます。
⚙️ 機能の説明
・サーバー起動: `opencode serve` でheadlessサーバーを立ち上げます。既定は `127.0.0.1:4096` です。SDKの `createOpencode()` を使えばコードからサーバー起動とクライアント取得を同時に行えます。
・クライアント接続: 既存サーバーには `createOpencodeClient({ baseUrl: "http://localhost:4096" })` で接続します。
・主なAPI: セッションの作成/一覧/取得/更新/削除、共有の切替、中断、メッセージのrevert/unrevert。`client.session.prompt()` でプロンプトを送信します。
・構造化出力: `format: { type: "json_schema", schema: {...} }` を指定すると、JSONスキーマに沿った検証済みJSONを受け取れます。後段の機械処理に最適です。
・イベント購読: `client.event.subscribe()` でサーバー送信イベントをストリームとして受け取り、長時間処理の進捗を監視できます。
🛠️ 実践的な使い方
コードからは `createOpencode()` でサーバー起動とクライアント取得を同時に行い、`client.session.create()` でセッションを作り、`client.session.prompt()` にテキストと `format` の `json_schema` を渡せば検証済みJSONを受け取れます。終わったら `server.close()` で停止します。
CIに組み込む場合は、コンテキスト注入だけ行ってAI応答を発火させたくない場面で `noReply: true` が便利です。
💡 ユースケース
・社内のレビューBotから `opencode run` ではなくSDK経由で構造化された指摘JSONを取得し、GitHub PRコメントへ整形投稿する。
・自前のWeb UIやエディタ拡張から `tui` 系APIでプロンプト投入・送信・トースト表示を制御し、独自フロントエンドを構築する。
・夜間バッチで複数リポジトリへ同一の解析プロンプトを投げ、結果JSONをデータ基盤へ蓄積する。
⚠️ 注意点
・SDKのconfigは `opencode.json` を完全に置き換えるのではなく上書きマージする挙動です。意図しない設定の残存に注意してください。
・構造化出力は検証失敗時にリトライ(既定2回)し、最終的に失敗すると ` に `StructuredOutputError` が入ります。スキーマは小さく焦点を絞ると安定します。
・`client.session.get()` などは存在しないIDで例外を投げます。必ずtry-catchで囲んでください。
#
OpenCode# #
AIエージェント#