1
2

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 Agent SDKで自分のAgentアプリからSkillsを使う

Last updated at Posted at 2026-01-11

概要

Claude Agent SDK を使って自前のエージェントアプリからSkillsを試してみます。

Skills は、2026/1/8時点でまだ対応しているフレームワークが少なく、Claude Code 等のコーディングエージェントからの利用例が中心です。
Anthropic が公開している Claude Agent SDK(旧Claude Code SDK) は Skills にいち早く対応していますのでこれを使ってみます。

環境・前提

  • Python 3.13.9
  • uv 0.9.16
  • claude-agent-sdk: 0.1.19
  • AWS CLI は設定済み
  • Bedrock API経由で Anthropic モデルを利用可能

この記事では、AWS Bedrock経由でClaudeを利用します。

試してみる

公式ドキュメントのクイックスタートをベースに試してみます。

環境準備

# 作業フォルダ作成
mkdir my-agent && cd my-agent

# claude-agent-sdk のインストール
uv init && uv add claude-agent-sdk

同じフォルダに .env を作成

  • .envを作成すると、SDKが自動で読み込んでくれます。地味に便利です。
  • 今回はモデルにSonnet 4.5を利用していますが、軽く動かすくらいであれば Haiku でも問題ありません
  • AWS_PROFILE には自身のプロファイル名を設定してください。
.env
ANTHROPIC_MODEL=jp.anthropic.claude-sonnet-4-5-20250929-v1:0
AWS_REGION=ap-northeast-1
AWS_PROFILE=${your-profile-name}
CLAUDE_CODE_USE_BEDROCK=1
CLAUDE_CODE_MAX_OUTPUT_TOKENS=4096
MAX_THINKING_TOKENS=1024

Skillsを用意

Skillsの実体は、指示、スクリプト、リソースを含むフォルダです。
Anthropicが公開しているSkills のサンプルリポジトリにも、skillsのフォルダが存在します。

このリポジトリを clone してきて、使うものをローカルにコピーします。今回は、スライド作成のスキルを試してみます。コピー後は以下のように .claude/skills/ に配置します。

コピー後のフォルダ構成
$ tree -a -F -L 3
./
├── .claude/
│   └── skills/
│       └── pptx/ # pptx の skill
# 他は省略

agent.py を作成

SDK では allowed_tools として Skill を設定を設定します。これにより、LLMが skills フォルダを確認して、適切と考えるツールを利用します。

import asyncio

from claude_agent_sdk import AssistantMessage, ClaudeAgentOptions, ResultMessage, query


async def main():

    async for message in query(
        prompt="Claude Codeについてまとめたスライドをpptxで作成してください。レイアウトは16:9、作成したファイルは ./tmp に保存してください",
        options=ClaudeAgentOptions(
            cwd="/path/to/project/my-agent",  # プロジェクトフォルダを設定
            setting_sources=["project"],
            allowed_tools=["Skill", "Read", "Write", "Bash"],  # ツールとしてSkillを設定
        ),
    ):
        # エージェントの経過と最終結果を抜粋して出力
        if isinstance(message, AssistantMessage):
            for block in message.content:
                if hasattr(block, "text"):
                    print(block.text)  # Claude の推論
                elif hasattr(block, "name"):
                    print(f"\n🔧 Tool: {block.name}")  # 呼び出されるツール
                    # ツールの入力情報を表示
                    if hasattr(block, "input"):
                        tool_input = block.input
                        # Bashコマンドの場合
                        if block.name == "Bash" and "command" in tool_input:
                            print(f"   Command: {tool_input['command']}")
                            if "description" in tool_input:
                                print(f"   Description: {tool_input['description']}")
                        # Write/Editの場合
                        elif (
                            block.name in ["Write", "Edit"]
                            and "file_path" in tool_input
                        ):
                            print(f"   File: {tool_input['file_path']}")
                        # Readの場合
                        elif block.name == "Read" and "file_path" in tool_input:
                            print(f"   File: {tool_input['file_path']}")
        elif isinstance(message, ResultMessage):
            print(f"\n✅ Done: {message.subtype}")  # 最終結果


asyncio.run(main())

デフォルトでは、SDKはskillsフォルダを読み込みません。そのため、setting_sources で利用するskillsの場所を設定します。今回は、プロジェクトフォルダのみを利用しています。

  • "project": .claude/skills/が利用される
  • "user": ~/.claude/skills/が利用される

実行

agentの実行
uv run agent.py

以下の通り、Skillを使ってpptxのスライドを作ろうとします。

実行結果(抜粋)
Claude Codeについてのプレゼンテーションを作成します。pptxスキルを使用して、16:9レイアウトのスライドを作成し、./tmpディレクトリに保存します。

🔧 Tool: Skill
Claude Codeについてのプレゼンテーションを作成します。まず、html2pptx.mdファイルを読み込んで、プレゼンテーション作成の詳細な手順を確認します。

🔧 Tool: Read
   File: /path/to/project/my-agent/.claude/skills/pptx/html2pptx.md
html2pptx.mdの内容を理解しました。次に、Claude Codeについての魅力的なプレゼンテーションを作成します。

(略)

プレゼンテーションファイルは `./tmp/claude-code.pptx` に保存されています。PowerPointまたは互換ソフトで開いてご確認ください!

✅ Done: success
実行結果の全量はこちら
 $ uv run ./agent.py
Claude Codeについてのプレゼンテーションを作成します。pptxスキルを使用して、16:9レイアウトのスライドを作成し、./tmpディレクトリに保存します。

🔧 Tool: Skill
Claude Codeについてのプレゼンテーションを作成します。まず、html2pptx.mdファイルを読み込んで、プレゼンテーション作成の詳細な手順を確認します。

🔧 Tool: Read
   File: /path/to/project/my-agent/.claude/skills/pptx/html2pptx.md
html2pptx.mdの内容を理解しました。次に、Claude Codeについての魅力的なプレゼンテーションを作成します。

まず、デザインアプローチを説明します:

**デザインコンセプト**:
- **テーマ**: テクノロジー・AI・開発ツール
- **カラーパレット**: Claude Codeの先進性と信頼性を表現するため、**Deep Purple & Emerald**パレットを採用
  - Purple (#B165FB): AIの革新性を象徴
  - Dark Blue (#181B24): 技術的な深みと信頼性
  - Emerald (#40695B): 生産性と成長
  - White (#FFFFFF): クリーンで読みやすいコントラスト
- **フォント**: Arial(web-safe、モダンで読みやすい)
- **レイアウト**: 16:9、シンプルで情報を効果的に伝える構成

それでは、プレゼンテーションを作成します。

🔧 Tool: Bash
   Command: mkdir -p ./tmp/claude-code-slides
   Description: Create directory for slides

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide1.html
CSS gradientは使えないので、背景画像を作成する必要があります。修正します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/create-gradient.js

🔧 Tool: Bash
   Command: node tmp/claude-code-slides/create-gradient.js
   Description: Create gradient background image

🔧 Tool: Edit
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide1.html

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide1.html

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide3.html

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide4.html

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide5.html

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide6.html
次に、これらのHTMLスライドをPowerPointに変換するJavaScriptファイルを作成します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/create-presentation.js

🔧 Tool: Bash
   Command: cd /path/to/project/my-agent/tmp/claude-code-slides && node create-presentation.js
   Description: Create PowerPoint presentation from HTML slides
スライド2でオーバーフローが発生しています。コンテンツを調整します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
さらに余白を調整します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
さらに下部の余白を増やします。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
さらに調整します。bottom paddingを増やし、間隔を減らします。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
9ptのオーバーフローがあります。さらに調整します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
まだ9ptのオーバーフローがあります。テキストを短縮します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
まだ同じオーバーフローです。bottom paddingをさらに増やします。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
オーバーフローが増えました。padding-bottomを90ptから85ptに変更します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
もう少しです。95ptに変更します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
逆にオーバーフローが増えました。87ptが適切そうです。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
さらに調整が必要です。99ptを試します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
layout-heightを減らして、top paddingも削減します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
スライド2は成功しました!次はスライド4です。調整します。

🔧 Tool: Read
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide4.html

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide4.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
スライド4は成功しました!次はスライド5です。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide5.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
成功しました!次に、サムネイルを生成して、視覚的に確認します。

🔧 Tool: Bash
   Command: python /path/to/project/my-agent/.claude/skills/pptx/scripts/thumbnail.py /path/to/project/my-agent/tmp/claude-code.pptx /path/to/project/my-agent/tmp/thumbnails --cols 3
   Description: Generate thumbnail preview of presentation
PILがインストールされていないようです。スキップして、ファイルの存在確認と最終的な通知を行います。

🔧 Tool: Bash
   Command: ls -lh /path/to/project/my-agent/tmp/claude-code.pptx
   Description: Verify presentation file was created

🔧 Tool: Bash
   Command: osascript -e 'display notification "Claude Codeプレゼンテーションを作成しました(6スライド、171KB)" with title "Claude Code" sound name "Funk"'
   Description: Notify user of completion
Claude Codeについてのプレゼンテーション(PPTX形式)を作成しました!

## 作成内容

**ファイルパス**: `./tmp/claude-code.pptx`  
**スライド数**: 6枚  
**ファイルサイズ**: 171KB  
**レイアウト**: 16:9

## スライド構成

1. **タイトルスライド** - 「AIペアプログラミングの新時代」
2. **Claude Codeとは?** - 4つの主要な特徴を紹介
3. **主要な機能** - コード操作と高度な支援機能を2列で表示
4. **作業フロー** - 4ステップの開発プロセスを視覚的に説明
5. **活用シーン** - 実際の利用場面を具体例で紹介
6. **まとめ** - 次世代の開発体験へのメッセージ

## デザイン

- **カラーパレット**: Deep Purple & Emerald(AI・技術・生産性をイメージ)
  - Purple (#B165FB): 革新性
  - Dark Blue (#181B24): 信頼性
  - Emerald (#40695B): 成長
  - White (#FFFFFF): クリーンさ
- **フォント**: Arial(読みやすさ重視)
- **スタイル**: モダンで洗練されたデザイン

プレゼンテーションファイルは `./tmp/claude-code.pptx` に保存されています。PowerPointまたは互換ソフトで開いてご確認ください!

✅ Done: success
~/Practice/LLM/claude-agent-sdk/my-agent $ 

こんなスライドが作成されました。

16:9でスライド生成を依頼すると、LLMがレイアウト調整でかなり思考錯誤します。
その分トークンも増えるので、特に指定せずに依頼した方が良いかもしれません。

🔧 Tool: Bash
   Command: cd /path/to/project/my-agent/tmp/claude-code-slides && node create-presentation.js
   Description: Create PowerPoint presentation from HTML slides
スライド2でオーバーフローが発生しています。コンテンツを調整します。

🔧 Tool: Write
   File: /path/to/project/my-agent/tmp/claude-code-slides/slide2.html

🔧 Tool: Bash
   Command: node create-presentation.js
   Description: Retry creating PowerPoint presentation
さらに余白を調整します。

(以下繰り返し)

試してみての感想

サンプルスキルの多くには、Bashやコード実行などの強い権限が伴うことがわかりました。
例えば、pptxのスキルで新規にスライドを作成する場合、一度HTMLを生成してそれをJSで変換する処理を行うことで、pptxファイルを作成しているためです。実際、先ほどのログを見ても、JSを実行していますし、試す中ではnpm installを行おうとすることもありました。
これは、非決定論的なLLMの推論をコードにより決定論的に行うための工夫と考えられます。

エージェントのツールでコード実行が伴う場合、Code Interpreter 系のツール(E2B, Bedrock AgentCore Code Interpreterなど)を使い、隔離された環境で実行することが推奨されます。
今回実行されたコードは、スキルフォルダに事前用意されたものでしたが、Code Interpreterと連携することも、今後は必要になるのではと感じました。

参考

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?