OpenCodeのスキルシステム完全ガイド:カスタマイズ・拡張・MCP連携
OpenCodeのスキルシステムの基本からカスタマイズ、プラグイン開発、MCP連携までを解説。実践的なコード例とともに、AIエージェント開発の効率を上げる方法を紹介します。
OpenCodeのスキルシステム完全ガイド:カスタマイズ・拡張・MCP連携
OpenCodeは、AIエージェントやLLMを活用した開発を効率化するためのオープンソースフレームワークです。その中核機能の一つが「スキルシステム」であり、エージェントの行動をモジュール化・カスタマイズできます。本記事では、スキルシステムの基本から高度なカスタマイズ、プラグイン開発、MCP(Model Context Protocol)との連携までを具体的なコード例とともに解説します。
スキルシステムの基本
OpenCodeのスキルは、エージェントが実行できる特定のタスクやアクションを定義した単位です。スキルは以下の要素で構成されます:
デフォルトで提供されるスキルには、コード補完、リファクタリング、テスト生成などがあります。
スキルのカスタマイズ方法
1. 既存スキルの設定変更
設定ファイル(例:opencode.config.json)で各スキルのパラメータを変更できます。
{
"skills": {
"code-completion": {
"enabled": true,
"maxTokens": 256,
"model": "gpt-4"
},
"refactor": {
"enabled": true,
"language": "typescript"
}
}
}
2. カスタムスキルの作成
スキルはTypeScript/JavaScriptで記述します。以下は、指定されたURLからドキュメントを取得して要約するカスタムスキルの例です。
// skills/fetch-doc.ts
import { Skill, SkillContext } from 'opencode';
export default class FetchDocSkill implements Skill {
name = 'fetch-doc';
description = '指定されたURLのドキュメントを取得して要約します';
async execute(context: SkillContext) {
const url = context.parameters.url;
const response = await fetch(url);
const text = await response.text();
// LLMを呼び出して要約(OpenCodeの組み込み関数を利用)
const summary = await context.llm.complete({
prompt: 以下のテキストを要約してください:\n${text},
maxTokens: 200
});
return summary;
}
}
スキルを有効にするには、設定ファイルに追加します。
{
"skills": {
"fetch-doc": {
"enabled": true,
"source": "./skills/fetch-doc.ts"
}
}
}
プラグインによる拡張
プラグインは複数のスキルや設定をパッケージ化したものです。プラグインの基本的な構造は以下の通りです。
my-plugin/
├── package.json
├── skills/
│ ├── skill1.ts
│ └── skill2.ts
├── config/
│ └── default.json
└── index.ts
プラグインのエントリポイント(index.ts)では、スキルや設定をエクスポートします。
// index.ts
import { Plugin } from 'opencode';
import Skill1 from './skills/skill1';
import Skill2 from './skills/skill2';
export default class MyPlugin implements Plugin {
name = 'my-plugin';
skills = [new Skill1(), new Skill2()];
async activate() {
console.log('MyPlugin activated');
}
}
プラグインはnpmパッケージとして公開でき、opencode install my-pluginでインストール可能です。
MCP(Model Context Protocol)との連携
MCPは、AIモデルとツール間の標準化された通信プロトコルです。OpenCodeはMCPをサポートしており、スキルからMCPサーバー経由で外部ツールを呼び出せます。
MCPサーバーの設定
まず、MCPサーバーを設定します。例えば、GitHub APIを操作するサーバーを追加する場合:
{
"mcpServers": {
"github": {
"command": "node",
"args": ["mcp-github-server/index.js"],
"env": {
"GITHUB_TOKEN": "your_token"
}
}
}
}
スキルからMCPツールを利用
スキル内でMCPクライアントを使ってツールを呼び出します。
// skills/create-issue.ts
import { Skill, SkillContext } from 'opencode';
export default class CreateIssueSkill implements Skill {
name = 'create-issue';
description = 'GitHubにIssueを作成します';
async execute(context: SkillContext) {
const { title, body } = context.parameters;
// MCPクライアントを取得
const mcpClient = context.getMcpClient('github');
const result = await mcpClient.callTool('create_issue', {
title,
body
});
return Issue created: ${result.html_url};
}
}
これにより、スキルが外部サービスとシームレスに連携できます。
実践的な活用例
例1:プロジェクト固有のコード規約を適用するスキル
// skills/enforce-convention.ts
import { Skill, SkillContext } from 'opencode';
export default class EnforceConventionSkill implements Skill {
name = 'enforce-convention';
async execute(context: SkillContext) {
const fileContent = context.files.current?.content;
if (!fileContent) return;
// 規約に違反する箇所をチェック
const violations = [];
if (fileContent.includes('var ')) {
violations.push('varの代わりにconst/letを使用してください');
}
// その他のチェック...
if (violations.length > 0) {
return 規約違反があります:\n${violations.join('\n')};
}
return '規約に従っています';
}
}
例2:複数スキルを組み合わせたワークフロー
スキルはチェーンで実行できます。設定で順序を指定可能です。
{
"workflows": {
"code-review": {
"steps": [
"fetch-doc",
"enforce-convention",
"generate-tests"
]
}
}
}
*この記事はOpenCodeを日常的に使用し、AIエージェントにSSH経由でNixOSをインストールさせるなどの実践経験を持つSioが監修しています。DeepSeek APIのヘビーユーザーとして、実際のコスト感や制限事項を反映しています。*
まとめ
OpenCodeのスキルシステムは、柔軟なカスタマイズと拡張が可能です。プラグインによるパッケージ化やMCP連携により、外部ツールとの統合も容易です。本記事で紹介した手法を活用して、自身の開発ワークフローに最適なAIエージェントを構築してください。
さらに詳しい情報は公式ドキュメントを参照してください。