メインコンテンツへスキップ
ブログ一覧

Claude Agent Skills実践ガイド — SKILL.mdカスタムSkill作成からAPI統合、Progressive Disclosureまで

(更新: 2026年03月10日)
Claude APIAgent SkillsClaude CodeAI自動化TypeScript

Agent Skillsとは何か — Plugins・MCP・サブエージェントとの違い

Agent Skillsの位置づけ:コード実行環境を活用したドメイン知識パッケージ

Claude Agent Skillsは、2025年10月にリリースされたClaude拡張メカニズムの一つだ。MCPが外部ツールとの接続プロトコル、Pluginsがnpmパッケージ配布、AGENT.mdがAIサブエージェントのチーム構築を担うのに対し、Skillsはコード実行環境内でドメイン知識を段階的に開示する仕組みとして独自の位置を占める。

2026年3月時点でAPIはベータステータスであり、skills-2025-10-02 ヘッダーが必須となる。

拡張メカニズム比較表

項目 Agent Skills Plugins MCP AGENT.md
主な用途 ドメイン知識のパッケージ化 npm配布型の機能拡張 外部ツール・データ接続 AIサブエージェント定義
定義方法 SKILL.md + バンドルファイル package.json + エントリポイント サーバー実装 AGENT.md
コード実行 コンテナ内で実行 CLIプロセス内 外部サーバー Claude CLI経由
制約 最大8スキル/リクエスト、8MB上限 CLI依存 サーバー運用が必要 プロジェクト内配置

プリビルトSkillでOfficeドキュメント処理を即座に自動化する

API呼び出しの最小構成

プリビルトSkillはpptxxlsxdocxpdfの4種類が用意されている。APIで利用するには3つのベータヘッダーが必要だ。

typescript
import Anthropic from "@anthropic-ai/sdk";
import { writeFileSync } from "fs";

const client = new Anthropic();

// 1. ファイルをアップロード(必要な場合)
const file = await client.beta.files.upload(
  { file: new File([buffer], "sales.xlsx") },
  { betas: ["files-api-2025-04-14"] }
);

// 2. Skills有効化してメッセージ送信
const response = await client.beta.messages.create(
  {
    model: "claude-sonnet-4-6",
    max_tokens: 4096,
    tools: [{ type: "code_execution_20250825", name: "code_execution" }],
    container: {
      files: [file.id],
      skills: [
        { type: "anthropic", skill_id: "xlsx", version: "latest" }
      ],
    },
    messages: [
      { role: "user", content: "このExcelデータを分析し、売上レポートをPDFで作成してください" }
    ],
  },
  {
    betas: [
      "code-execution-2025-08-25",
      "skills-2025-10-02",
      "files-api-2025-04-14",
    ],
  }
);

// 3. 生成ファイルをダウンロード
for (const block of response.content) {
  if (block.type === "file") {
    const dl = await client.beta.files.download(block.file.id, {
      betas: ["files-api-2025-04-14"],
    });
    writeFileSync("report.pdf", Buffer.from(await dl.arrayBuffer()));
  }
}

正直、最初はベータヘッダーの組み合わせに戸惑ったが、この3点セット(code-executionskillsfiles-api)さえ押さえれば迷うことはない。

プリビルトSkillで解決できるユースケース

  • xlsx: 売上データの集計・グラフ作成、複数シートの統合分析
  • pptx: 分析結果からスライドデッキを自動生成
  • docx: 議事録テンプレートへの自動転記、契約書ドラフト作成
  • pdf: フォーマット済みレポートの出力、請求書PDFの読み取りと構造化

SKILL.mdでカスタムSkillを自作する

SKILL.mdの基本構造とセマンティックマッチングの仕組み

カスタムSkillの中核はSKILL.mdファイルだ。YAMLフロントマターのdescriptionがセマンティックマッチングの対象となり、ユーザーのプロンプトと意味的に近いSkillが自動選択される。

markdown
---
name: coding-standards-checker
description: プロジェクトのTypeScriptコードがチームのコーディング規約に準拠しているかチェックし、違反箇所を修正案付きで報告するSkill。コードレビュー依頼や規約チェック時に使用する。
---

# コーディング規約チェッカー

## 手順

1. 対象ファイルのTypeScriptコードを読み取る
2. `rules/` ディレクトリ内の規約定義と照合する
3. 違反箇所をリスト化し、修正案を提示する

## ルール一覧

- 関数は30行以内に収める
- any型の使用を禁止する
- エラーハンドリングではカスタムError classを使用する

## 出力フォーマット

| ファイル | 行 | ルール | 修正案 |
|---------|---|--------|--------|

nameの制約: 小文字英数字とハイフンのみ(最大64文字)。anthropicclaudeは使用不可。

Progressive Disclosure 3段階設計の実践

Skillsの設計思想の核心がProgressive Disclosure(段階的情報開示)だ。コンテキストウィンドウを無駄に消費しないために、情報は必要なタイミングで段階的にロードされる。

Level ロードタイミング トークン消費 内容
Level 1 常時(起動時) ~100トークン/Skill namedescriptionのメタデータ
Level 2 Skill選択時 5kトークン未満 SKILL.md本文(手順・ルール・テンプレート)
Level 3+ 必要に応じて 実質無制限 バンドルリソース(bash経由で読み取り)

設計のコツ: Level 1のdescriptionで「何をするSkillか」と「いつ使うか」の両方を明記する。ここが曖昧だとセマンティックマッチングに失敗し、Skillが発火しない。

悪い例: description: コード関連の作業を行う — 範囲が広すぎてマッチ精度が低下する。

良い例: description: TypeScriptコードのコーディング規約準拠チェックを行い、違反箇所を修正案付きで報告する。コードレビュー依頼時に使用する — 具体的な動作とトリガー条件が明示されている。


Messages APIでカスタムSkillを統合する

Skill Upload APIの使い方

カスタムSkillをAPIで利用するには、SKILL.mdとバンドルファイルをアップロードしてSkill IDを取得する。

typescript
import Anthropic from "@anthropic-ai/sdk";
import { createReadStream } from "fs";

const client = new Anthropic();

// 1. カスタムSkillをアップロード(ZIPまたは個別ファイル)
const skill = await client.beta.skills.create(
  {
    display_title: "コーディング規約チェッカー",
    files: [
      await Anthropic.toFile(
        createReadStream("./my-skill/SKILL.md"),
        "my-skill/SKILL.md"
      ),
      await Anthropic.toFile(
        createReadStream("./my-skill/rules/typescript.json"),
        "my-skill/rules/typescript.json"
      ),
    ],
  },
  { betas: ["skills-2025-10-02"] }
);

console.log(skill.id); // "skill_01AbCdEfGh..."

// 2. プリビルト + カスタムSkillを組み合わせてリクエスト
const response = await client.beta.messages.create(
  {
    model: "claude-sonnet-4-6",
    max_tokens: 4096,
    tools: [{ type: "code_execution_20250825", name: "code_execution" }],
    container: {
      skills: [
        { type: "custom", skill_id: skill.id },
        { type: "anthropic", skill_id: "pdf", version: "latest" },
      ],
    },
    messages: [
      {
        role: "user",
        content: "src/配下のコードを規約チェックし、結果をPDFレポートにまとめてください",
      },
    ],
  },
  {
    betas: [
      "code-execution-2025-08-25",
      "skills-2025-10-02",
      "files-api-2025-04-14",
    ],
  }
);

カスタムSkillとプリビルトSkillはcontainer.skills配列内に並列で指定できる。上記の例ではコード規約チェック(カスタム)とPDF出力(プリビルト)を組み合わせている。

なお、アップロードしたカスタムSkillはワークスペース全体で共有される。チームメンバーが同じSkill IDを使ってAPIを呼び出せるため、ナレッジの横展開に便利だ。


ハマりポイントとデバッグ手法

セマンティックマッチング失敗の診断と対処

Skillが発火しない場合、まず以下を確認する。

  1. descriptionの具体性: 「何をするか」と「いつ使うか」の両方が含まれているか
  2. ユーザープロンプトとのキーワード乖離: descriptionに含まれる用語とユーザーの指示が意味的に近いか

よくあるエラーパターンと解決策

エラー 原因 対処
skills beta header required ベータヘッダー不足 3つのヘッダーすべてを指定する
max skills exceeded 9個以上のSkill指定 1リクエストあたり8個以内に抑える
file too large アップロードが8MB超過 バンドルファイルを分割し、不要なファイルを除外
Skillは発火するが期待通り動かない SKILL.md本文の手順が曖昧 手順をステップバイステップで明記する

デバッグワークフロー: Claude CodeでSkillの動作確認を済ませてからAPI統合に移行するのがおすすめだ。Claude Codeなら/コマンドでSkillを直接呼び出してトライ&エラーできるため、SKILL.mdの調整が格段に速い。個人的にはこのワークフローが一番効率的だと感じている。


まとめ — Skillsで広がるClaudeの実用性

Agent Skillsは、Claudeを単なるチャットAIから業務特化ツールへ進化させる機能だ。

  • プリビルトSkillは即戦力。Officeドキュメント処理をAPI一つで自動化できる
  • カスタムSkillはチームの知見を再利用可能な形でパッケージ化する手段。ワークスペース共有により横展開も容易
  • Progressive Disclosureの3段階設計を意識することが、コンテキストウィンドウを圧迫しない高品質なSkill設計の鍵になる

2026年3月時点でAPIはベータだが、コード実行やFiles APIなど周辺機能はGA化が進んでいる。Skills自体のGA化も遠くないだろう。今のうちに設計パターンを押さえておけば、本番運用への移行はスムーズになるはずだ。

もっと読む他の技術記事も読む