0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code の Skill / Agent にスキルのDIや上書き(継承)を行わせる

0
Posted at

概要

掲題の通りです。
実は Claude Code でそういうのできるのかもしれないけど、なさそうだったので半ば強引にDIしたり継承させたりするやり方を記載したポストです。

※ もしできるならこの記事は陳腐化しますがやり方知りたいのでぜひコメントください

なお、 プラグインエージェントスキル (サブエージェント含む) のことはある程度わかってるものとして記載してます。

(このポストは 2026/2/12時点の内容です)

ユースケース

こういうケースありますよね?

  • プラグインで、PRレビューと指摘対応の汎用的なフローのスキルを作ってあちこちで使いまわしたい
  • でもプロジェクト側では専用のレビュワーと専用のコーダーに対応させたい

PRレビューや指摘対応(PRコメント返信含む)なんて汎用的なものだからいちいちプロジェクト(レポジトリ)ごとに書いてられません。面倒なことは嫌いです。
でも、プラグインとなるとあちこちで使うこと前提なので、汎用的なことくらいしか書けず、プロジェクト固有の内容をSkillに記載することができません。
なので、後から注入(DI)するノウハウをいくつかまとめます。

やりたいことの具体例

このポストでは以下のことを実現したいとします。

  • プラグイン(あるいはユーザースコープ内) にPRのレビューフローを記載した汎用的なSkillがある
  • プロジェクト側で、そのフローのレビュワーや指摘対応者を専用スキルを持つエージェントに委譲する
    • 下の例だと、 pr-reviewerpr-review-responder をプロジェクトごとに設定したいものとする
PRレビュースキル
---
name: pr-review-flow
description: GitHub PR のコードレビュー。PRレビュー、code review、コードレビュー、レビュー依頼 に使用する。必ず本文の手順に従うこと。
user-invocable: false
---
# PR コードレビュー

GitHub PR の差分を分析し、GitHub 上にレビューコメントを投稿する。
以下の手順を **順番どおり** に実行すること。

## Step 1: PR番号の特定

- ユーザーから伝えられたPR番号を確認
- 特定できない場合、ユーザーに番号を尋ねる

## Step 2: エージェントへの委譲

`pr-reviewer` のサブエージェントを起動して、PR番号を指示してレビューをさせる。
サブエージェントのマークダウン内にレビュー方法やレビュー観点はあるものとし、細かい指示は不要。

例: `#1 のPRレビューを行い、結果を返却してください。`

## Step 3: レビュー指摘内容の修正

サブエージェントから `指摘あり` と返ってきた場合、 `pr-review-responder` エージェントを起動して修正を依頼する。
何をすべきかはエージェント内に記載があるものとし、細かい指示は不要。

例: `#1 の指摘があったため中身を見てレビュー指摘対応をしてください`

(省略。以下続く)

以下は、 ここに記載している pr-reviewerpr-review-responder を起動する際、プラグインのものではなくプロジェクト側に作る固有のサブエージェントを起動できるようにする方法を記載していきます。

方法1:プラグインに pr-reviewerpr-review-responder を用意しない

ひとつはプラグインには実際のサブエージェントは用意せず、プロジェクト側で用意するという方法があります。

Claude Code は起動時、コンテキストウィンドウ内に Skill Agent Command の一覧を保持します。
具体的には、 フロントマター にある namedescription の内容だけは最初に読み込まれますが (※)、プラグインのスキル(エージェント)かプロジェクトのものかを特に区別しないため、あえてプラグイン内に該当エージェントを用意せず、プロジェクト内に同じ name のエージェントを用意することで簡単にDIすることができます。
Template Method パターンみたいなやり方ですね。

メリット

  • そのスキルが起動したらほぼ確実に対象のエージェントを使ってくれる

デメリット

  • プロジェクトに対象エージェントを用意してないと、Claude Codeが混乱して勝手なことをやりだす

コードと違ってClaude Codeはなくてもエラーにならないので、 Template Method パターンはちょっと危険ですね。

回避策: ガードをつける

pr-review-flow スキルに以下のように書けば、Claude君がちゃんと内容を読んでくれたらデメリットはなくせます。

PRレビュースキル (pr-review-flow)
+ ## Step 0: エージェントの確認
+ フローを行う前に、 `pr-reviewer` `pr-review-responder` のサブエージェントが
+ 登録されているかどうかを確認し、登録されている場合 Step1 以降を行う。
+ 
+ ### Step 0-1: 登録されていない場合
+ 
+ ユーザーにエスカレーションして処理を終えること

補足1: フロントマターは全部読まれるわけじゃない

Claude Code の公式ドキュメントには、フロントマターには色々な設定ができますが、最初に読み込まれるのは基本的に namedescription のみのようです。
※ 正確には user-invocable なども読み込まれてるみたいですが、Claude Codeが探索に利用するのはこの2つのみです。

たとえば、 エージェントには toolsskills も設定できますが、それらは特に見ないということですね。
スキル/エージェント構築の際にちょっとしたハマりポイントとなったりすることもあるので頭の片隅に入れておくといいかもです。

方法2: Override: CLAUDE.md に記載

次の方法が、プロジェクトの CLAUDE.md に記載する方法です。
以下のようなことを冒頭に一つ記載しておくと、Claude君はそちらの内容に上書きして(だいたい)その通りにやってくれます。

# ルール(**重要**)
Skillの中に以下のエージェント起動が記載されている場合、代わりとなるエージェントを起動すること:
- pr-reviewer -> custom-pr-reviewer
- pr-review-responder:
  - Pythonコードが大半の場合: python-review-responder
  - TypeScriptコードが大半の場合: ts-review-responder

# 禁止事項
- ルールを無視して作業すること。ルールを無視した場合大変深刻な問題が発生します

メリット

  • CLAUDE.md にあるから直接管理はしやすい

デメリット

  • (ほとんどの場合選んでくれるけど) 必ず選ばれるわけじゃない
  • エージェントを追加したりするたびにいちいちCLAUDE.md のメンテナンスをしないといけない

補足2: Claude Code のプロンプトの競合解決

Claude Code ではSkillやCLAUDE.md に記載されている内容に矛盾や競合が発生している場合、いくつかのルールでどちらを採用するかを判断します。

  1. ユーザーがユーザーメッセージで直接指示した内容を優先する
  2. より具合的な指示の方を優先する
  3. どちらも具体的な場合、 Skillの内容を優先する
  4. ただし禁止事項→許可は基本上書きしない(機嫌次第ですることもある)

今回のケースでいうと、 CLAUDE.md に記載の内容が具体的なためそっち側が採用されるという感じですね。

方法3: フロントマターの skills を使う

エージェント限定ですけど、エージェントにはフロントマターに skills を指定することができます。なので、
ただ、補足1にも書いたように、skills は起動時には読み込まれないため、以下のようにちょっと工夫します。

PRレビュースキル (pr-review-flow)
# Step0: エージェントの検出
**このStep はメインエージェント用です。呼び出されたサブエージェントはStep1以降を行ってください。メインエージェントはこのStepを実行してください**

### 0.1 対象エージェントの検索

**全エージェント定義ファイル**のフロントマターを検索し、skills に「pr-review-flow」または「ref-pr-review-flow」を含むエージェントを特定する。

Grep ツールで以下を実行:
- パターン: `pr-review-flow`
- 検索対象: `**/agents/*.md`

**重要**: 必ずフロントマターの `skills` フィールドを機械的に検索すること。

### 0.2 エージェントの委譲

- 該当エージェントが見つかった場合、その中から最適な言語スキルセットを持つエージェントを1つ呼び出してレビュー依頼をすること。
- 該当エージェントが見つからない場合、メインエージェントが Step 1 以降を直接実行する。

Step1は、エージェントも読めるため細かい指定は不要。以下のみを伝える。

---
`pr-review-flow` のスキルに記載のStep1以降に記載された内容に沿って、あなたが与えられた役割や技術、観点を駆使してレビューをしてください。
PR: <PR番号>
Step1 以降に順守すべきレビューフローをまとめています。その中で、あなたの役割や追加すべきレビュー観点があればそれも駆使すること。
---

- エージェントが見つからない場合、メインエージェントがStep1 以降に記載された内容に沿ってレビューを実施する。

## Step 1: PR番号の特定

(省略。以降はPRレビューする際のフローや注意事項などを記載する)

そして、エージェントのフロントマターに以下を追加します。

エージェントフロントマター
---
name: hogehoge
description: hogehoge
+ skills: pr-review-flow
---

このように記載することで、 pr-review-flow のskillを持ったサブエージェントに処理を委譲させることができます。

メリット

  • スキルの修正は不要で、カスタムサブエージェントのskillsに追加するだけで委譲できるため拡張性が高い

デメリット

  • スキル名を覚えておかないといけない
  • エージェントを探すために毎回Grepかけるからちょっと処理が遅い

まとめ

Claude Code はスキル / カスタムエージェントの設計をすることで色々とプロジェクト固有の情報を渡せたりフローに沿って行わせたりできて楽しい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?