Agent Skills 元年なのでオープンスタンダードになった Agent Skills について調べて使ってみた

Agent Skills 元年なのでオープンスタンダードになった Agent Skills について調べて使ってみた

世はまさに大 Agent Skills 時代なので、Agent Skillsについて調べて使ってみました。今度は作ってみます。
2025.12.24

こんにちは、AWS 事業本部@福岡オフィスのべこみん(@beco_minn)です。

突然ですが皆さん、普段の業務で AI エージェントを使ってますか?

クラスメソッドでは AI 駆動開発を推進するための取り組みを行っており、クラスメソッド社員も実際に日常的に AI を使って開発を行っています。

弊社メンバーが日常的に実践する AI 駆動開発のナレッジや Tips を共有するために、AI 駆動開発 Advent Calendar 2025を開催しています。

本ブログは、そんな企画の 24 日目の記事になります。

これまでにもたくさんの記事が上がっていますので、AI 駆動開発の最先端にご興味のある方は是非他の記事も見てみてください。


さて、本記事ではタイトルにもある通り、Agent Skills というオープンスタンダード化された機能についてお話しします。

冒頭でも聞きましたが、皆さんは普段の業務で AI エージェントを利用していますか?

私は普段の開発やドキュメント執筆作業などで Anthropic 社の Claude を利用していて、もう Claude なしでは仕事ができない体になってしまいました。

Agent Skills とは

実際に Claude などの AI エージェントを利用して業務を行っていると、こんな経験をしたことはないでしょうか?

  • 指示をしたものの想定の仕上がりとは異なり、何度か無駄なやり取りをする
  • 細かいフォーマットや書き方のルールを毎回説明するのが面倒
  • 同じような作業を繰り返すたびに、同じプロンプトを何度も書いている

こういう場合、CLAUDE.md に詳細なルールを書き込んだり、カスタムの Subagent を定義したりしていた人が多いのではないかと思います。

ただし、CLAUDE.md を肥大化させたり、Subagent の定義を詳細にしたりすると、常にコンテキストが増えてしまうというのも悩みの種です。

そんな悩みも解決する Claude の新機能として、今年 10 月にリリースされたのが Agent Skills です。

https://claude.com/blog/skills

Anthropic の方々が Agent Skills について解説しているこちらの動画もわかりやすいのでおすすめです。

https://youtu.be/CEvIs9y1uog

リリース当初この機能の存在は私も知っていましたが、「また Claude に独自の新機能が増えたのか〜」としか思わず後回しにしていました。ですが、今年 12 月に Anthropic は Agent Skills をオープンスタンダード化し、他社 AI エージェントも採用する動きを見せています。

実際に Agent Skills のサイトならびに GitHub リポジトリもできています。

Overview - Agent Skills

また、GitHub などよく使われている SaaS 製品でも Agent Skills が利用されています。それらの Skills についてはこちらの記事で解説されていますので、興味のある方はご参照ください。

https://dev.classmethod.jp/articles/claude-skill-directory/

Agent Skills の概要

Agent Skills(以下 Skills)とは、AI エージェントが特定のタスクを実行する際に読み込むことができる「指示・スクリプト・リソースをまとめたフォルダ」です。

Skills なしで AI エージェントを使おうとする場合、何かタスクを依頼すると何かしらのツールをエージェント自身が探して、その使い方も調べて使おうとします。なのでこちらの想定とは異なる使い方をしたり、その結果違和感のある仕上がりになってしまうことが多いです。

Skills には上述の通りツール(スクリプト・リソース)だけでなくそのツールの使い方(指示)も含まれます。なので、あるタスクを依頼すると指定されたツールを指定された使い方で適切に使ってくれるのです。そうすることで、エージェントはこちらの想定通りの作業をしてくれます。

実際に私が生成したスライドで Skills 利用の有用性を比較してみましょう。

以下のシンプルなプロンプトでスライド作成を依頼しました。

「AWSセキュリティベストプラクティス」というタイトルで5枚程度のプレゼン資料をpptx形式で作成してください。
- 表紙
- 目次
- IAMのベストプラクティス
- Security Hubの活用
- まとめ

Skills なしで生成したスライド:

Skills ありで生成したスライド:

同じプロンプトでも明確に違いがありますね。Skills なしでも悪くない結果になりましたが、Skills ありの方が視覚的に工夫されていることがわかります。

※スライド作成の詳細は、後述の「やってみた - Agent Skills を使ってみる」の章で解説します。

Agent Skills の特徴

Claude はタスクに取り組む際、利用可能な Skills をスキャンして関連するものを探します。マッチする Skill が見つかると、必要最小限の情報とファイルだけを読み込みます。これにより、専門知識にアクセスしながらも高速に動作します。

Skills には以下の 4 つの特性があります。

特性 説明
構成可能(Composable) 複数の Skills を組み合わせて使用可能。Claude が自動的に必要な Skills を特定し、連携させる
ポータブル(Portable) 同じフォーマットをどこでも使用可能。一度作成すれば、Claude.ai、Claude Code、API で利用できる
効率的(Efficient) 必要なものだけを、必要なときに読み込む。コンテキストの肥大化を防ぐ
強力(Powerful) 実行可能なコードを含めることができる。トークン生成よりも従来のプログラミングが適切なタスクに対応

Skills は「カスタムのオンボーディング資料」のようなものだと言われることがあります。作業に必要な専門知識をパッケージ化することで、AI エージェントを重要な分野のスペシャリストに変えることができます。

段階的な情報開示(Progressive Disclosure)

Skills の大きな特徴は「段階的な情報開示」です。Claude は事前にすべてのコンテキストを読み込むのではなく、必要に応じて段階的に情報を読み込みます。

レベル 読み込まれるタイミング トークンコスト
メタデータ 常に(スタートアップ時) Skill 当たり約 100 トークン
指示(SKILL.md 本文) Skill がトリガーされたとき 5,000 トークン未満
リソース(スクリプト等) 必要に応じて 実質的に無制限

この仕組みにより、多くの Skills をインストールしてもコンテキストを圧迫することがほとんどありません。CLAUDE.md のように常に全文が読み込まれるわけではないため、効率的にトークンを使用できます。

共有による価値の最大化

また、Skills の本質は 「専門知識のポータビリティ」 です。

上述の動画でも触れられていますが、Skills は共有されることでその価値を最大限に発揮します。

一度作成した Skill は、チーム内で共有したり、GitHub で公開したり、プラグインとして配布できます。つまり、あなたが試行錯誤して得たノウハウを、他の人がそのまま活用できるわけです。逆に、他の専門家が考え抜いたベストプラクティスをそのままあなたが活用することもできます。

MCP はツールの連携を標準化しましたが、Skills はツールとその使い方を標準化したと私は理解しています。

Agent Skills と他の機能との比較

ここまで Skills の特徴について話しましたが、Claude には機能がいくつかありますよね。私は他の機能の差異について混乱したので整理してみました。

機能 本質 提供するもの
CLAUDE.md プロジェクトの前提条件 背景知識(常にコンテキストに読み込まれる)
Skills タスクのベストプラクティス 手続き的知識(必要なときだけ読み込まれる)
Commands プロンプトのショートカット 定型プロンプトの呼び出し
Subagent 独立した実行主体 タスクの委譲(別コンテキストで実行)
MCP 外部サービス連携 ツール接続(GitHub、Slack、DB など)

それぞれのユースケースについてもまとめてみました。

  • CLAUDE.md

    • プロジェクト固有の前提、背景をエージェントに伝える目的で利用
    • 「技術スタックは Python 3.12、テストは pytest を使う」「このリポジトリでは PR は必ずレビューを通す」といった、常に意識してほしい情報を記載
    • システムプロンプトの一部として常に全文が読み込まれるため、肥大化するとコンテキストを圧迫する
  • Skills

    • 特定タスクのベストプラクティスを教える目的で利用
    • 「CloudFormation テンプレートはこう書くのがベスト」「このフォーマットでレポートを作成する」といった汎用的なノウハウをパッケージ化
    • CLAUDE.md と異なり、必要なときだけ読み込まれるためコンテキストを圧迫しない
  • Commands

    • 定型プロンプトをショートカット化する目的で利用
    • /security-review src/iam.py のように、よく使うプロンプトを Markdown ファイルとして保存し、スラッシュコマンドで呼び出す
    • Skills が「やり方を教える」のに対し、Commands は「決まった指示を素早く実行する」ためのもの
  • Subagent

    • コンテキストを分離したい場面で利用
    • メインの Claude とは別のコンテキストウィンドウで動作するため、大量のファイルを探索するタスクや、特定の制約を強制したいタスクを委譲できる
    • Skills とは異なり、独立した専門エージェントとして動作する
  • MCP

    • 外部サービスと連携する場面で利用
    • GitHub、Slack、データベースなどへの接続を標準化したプロトコル
    • Skills とは補完関係にあり、MCP が「ツールへの接続」を提供し、Skills が「そのツールの効果的な使い方」を提供する

個人的に Skills と Subagent はどうやって使い分ければ良いんだ?と考えていましたが、基本的にはメインエージェントから複数の Skills を呼び出す方式で良いと考えています。「全く別の作業をさせたいのでコンテキストを分離したい」、「メイン作業とは別で並列的に作業を依頼したい」などのケースでは Subagent を使えば良さそうですね。

Agent Skills の仕組み

フォルダ構造

Skill の基本構造は以下の通りです。最小構成は SKILL.md ファイル 1 つだけです。

my-skill/
├── SKILL.md           # メインの指示書(必須)
├── reference.md       # 参照用ドキュメント(オプション)
├── examples.md        # 使用例(オプション)
└── scripts/           # 実行可能なスクリプト(オプション)
    └── validate.py

SKILL.md の構造

agent-skills-simple-file.png

引用元: Skill authoring best practices - Claude Docs

SKILL.md は必ず YAML フロントマターから始まります。

---
name: my-skill(任意のSkill名)
description: このSkillが何をするか、いつ使うか
---

namedescription は必須フィールドで、以下の制約があります。

  • name

    • 最大 64 文字
    • 小文字のアルファベット、数字、ハイフンのみ使用可能
    • XML タグは使用不可
    • Claude の場合、予約語(anthropic, claude)は使用不可
  • description

    • 記載必須
    • 最大 1024 文字
    • XML タグは使用不可
    • Skill が何をするか、いつ使うかの両方を記載する

動的な読み込みの流れ

上述のように、Skills の大きな特徴は**段階的な情報開示(Progressive Disclosure)**です。

AI エージェントは以下の流れでファイルを読み込みます。

  1. エージェント起動時
    • 全 Skill のメタデータ(name/description)のみをシステムプロンプトに読み込む
  2. Skill が呼び出された時
    • SKILL.md 本文を読み込む
  3. 必要に応じて(SKILL.md からの呼び出し時)
    • 参照ファイル(reference.md 等)を読み込む
    • Claude の場合、スクリプトが実行され、出力のみがコンテキストに入る

Claude の公式ドキュメントには下図が紹介されていました。わかりやすいですね。

agent-skills-bundling-content.png

引用元: Skill authoring best practices - Claude Docs

このように SKILL.md に手順等を記載することで、必要に応じてエージェントがその都度必要なツールを呼び出して利用します。

やってみた

Agent Skills を使ってみる

Skill なしでプレゼンテーションを作成

まずは比較のために、Skill を使わずにプレゼンテーションを作成してみます。

以下のシンプルなプロンプトで依頼しました。モデルは Opus 4.5 を使用します。

「AWSセキュリティベストプラクティス」というタイトルで5枚程度のプレゼン資料をpptx形式で作成してください。
- 表紙
- 目次
- IAMのベストプラクティス
- Security Hubの活用
- まとめ

結果はこちらです。

シンプルなスライドが生成されました。内容は問題ありませんが、デザインはかなり質素ですね。

Skill なしで作成を依頼した場合、Claude は以下のような python ファイルを作成しました。

実際の出力ファイル
create_pptx.py
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE

# プレゼンテーション作成
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)

# 色定義
ORANGE = RGBColor(0xFF, 0x99, 0x00)  # AWS Orange
DARK_BLUE = RGBColor(0x23, 0x2F, 0x3E)  # AWS Dark Blue
WHITE = RGBColor(0xFF, 0xFF, 0xFF)

def add_title_slide(prs, title, subtitle):
    """表紙スライドを追加"""
    slide_layout = prs.slide_layouts[6]  # 空白レイアウト
    slide = prs.slides.add_slide(slide_layout)

    # 背景色を追加(図形で代用)
    background = slide.shapes.add_shape(
        MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, prs.slide_height
    )
    background.fill.solid()
    background.fill.fore_color.rgb = DARK_BLUE
    background.line.fill.background()

    # タイトル
    title_box = slide.shapes.add_textbox(Inches(0.5), Inches(2.5), Inches(12.333), Inches(1.5))
    tf = title_box.text_frame
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(54)
    p.font.bold = True
    p.font.color.rgb = WHITE
    p.alignment = PP_ALIGN.CENTER

    # サブタイトル
    subtitle_box = slide.shapes.add_textbox(Inches(0.5), Inches(4.2), Inches(12.333), Inches(0.8))
    tf = subtitle_box.text_frame
    p = tf.paragraphs[0]
    p.text = subtitle
    p.font.size = Pt(28)
    p.font.color.rgb = ORANGE
    p.alignment = PP_ALIGN.CENTER

    # フッター
    footer_box = slide.shapes.add_textbox(Inches(0.5), Inches(6.5), Inches(12.333), Inches(0.5))
    tf = footer_box.text_frame
    p = tf.paragraphs[0]
    p.text = "AWS事業本部 べこみん (@beco_minn)"
    p.font.size = Pt(18)
    p.font.color.rgb = WHITE
    p.alignment = PP_ALIGN.CENTER

def add_toc_slide(prs):
    """目次スライドを追加"""
    slide_layout = prs.slide_layouts[6]
    slide = prs.slides.add_slide(slide_layout)

    # ヘッダーバー
    header = slide.shapes.add_shape(
        MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, Inches(1.2)
    )
    header.fill.solid()
    header.fill.fore_color.rgb = DARK_BLUE
    header.line.fill.background()

    # タイトル
    title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.3), Inches(12.333), Inches(0.8))
    tf = title_box.text_frame
    p = tf.paragraphs[0]
    p.text = "目次"
    p.font.size = Pt(40)
    p.font.bold = True
    p.font.color.rgb = WHITE

    # 目次内容
    toc_items = [
        "1. IAMのベストプラクティス",
        "2. Security Hubの活用",
        "3. まとめ"
    ]

    content_box = slide.shapes.add_textbox(Inches(1.5), Inches(2), Inches(10), Inches(4))
    tf = content_box.text_frame

    for i, item in enumerate(toc_items):
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = item
        p.font.size = Pt(32)
        p.font.color.rgb = DARK_BLUE
        p.space_after = Pt(24)

def add_content_slide(prs, title, content_items):
    """コンテンツスライドを追加"""
    slide_layout = prs.slide_layouts[6]
    slide = prs.slides.add_slide(slide_layout)

    # ヘッダーバー
    header = slide.shapes.add_shape(
        MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, Inches(1.2)
    )
    header.fill.solid()
    header.fill.fore_color.rgb = DARK_BLUE
    header.line.fill.background()

    # タイトル
    title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.3), Inches(12.333), Inches(0.8))
    tf = title_box.text_frame
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(36)
    p.font.bold = True
    p.font.color.rgb = WHITE

    # コンテンツ
    content_box = slide.shapes.add_textbox(Inches(0.8), Inches(1.6), Inches(11.733), Inches(5.5))
    tf = content_box.text_frame
    tf.word_wrap = True

    for i, item in enumerate(content_items):
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = "• " + item
        p.font.size = Pt(24)
        p.font.color.rgb = DARK_BLUE
        p.space_after = Pt(16)

def add_summary_slide(prs):
    """まとめスライドを追加"""
    slide_layout = prs.slide_layouts[6]
    slide = prs.slides.add_slide(slide_layout)

    # ヘッダーバー
    header = slide.shapes.add_shape(
        MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, Inches(1.2)
    )
    header.fill.solid()
    header.fill.fore_color.rgb = DARK_BLUE
    header.line.fill.background()

    # タイトル
    title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.3), Inches(12.333), Inches(0.8))
    tf = title_box.text_frame
    p = tf.paragraphs[0]
    p.text = "まとめ"
    p.font.size = Pt(40)
    p.font.bold = True
    p.font.color.rgb = WHITE

    # まとめ内容
    summary_items = [
        "IAMは最小権限の原則を徹底し、MFAを必須化する",
        "Security Hubでセキュリティ状況を継続的にモニタリング",
        "セキュリティは「設定して終わり」ではなく継続的な改善が重要",
        "AWSのセキュリティサービスを活用して多層防御を実現"
    ]

    content_box = slide.shapes.add_textbox(Inches(0.8), Inches(1.8), Inches(11.733), Inches(4))
    tf = content_box.text_frame
    tf.word_wrap = True

    for i, item in enumerate(summary_items):
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = ">>> " + item
        p.font.size = Pt(26)
        p.font.color.rgb = DARK_BLUE
        p.space_after = Pt(20)

    # フッターメッセージ
    footer_box = slide.shapes.add_textbox(Inches(0.5), Inches(6), Inches(12.333), Inches(0.8))
    tf = footer_box.text_frame
    p = tf.paragraphs[0]
    p.text = "ご清聴ありがとうございました!"
    p.font.size = Pt(28)
    p.font.bold = True
    p.font.color.rgb = ORANGE
    p.alignment = PP_ALIGN.CENTER

# スライド作成
# 1. 表紙
add_title_slide(prs, "AWSセキュリティ\nベストプラクティス", "~ 安全なクラウド環境を構築するために ~")

# 2. 目次
add_toc_slide(prs)

# 3. IAMのベストプラクティス
iam_content = [
    "ルートユーザーは日常的に使用しない(MFA必須、アクセスキー削除)",
    "最小権限の原則(必要最小限の権限のみを付与)",
    "IAMユーザーよりIAM Identity Center(SSO)を活用",
    "長期認証情報より短期認証情報(IAMロール)を優先",
    "強力なパスワードポリシーの設定とMFAの必須化",
    "定期的な認証情報のローテーションと棚卸し",
    "IAM Access Analyzerで未使用のアクセス権限を検出"
]
add_content_slide(prs, "IAMのベストプラクティス", iam_content)

# 4. Security Hubの活用
securityhub_content = [
    "AWS Security Hubでセキュリティ状況を一元管理",
    "セキュリティ基準(AWS基礎セキュリティのベストプラクティス等)を有効化",
    "GuardDuty、Inspector、IAM Access Analyzerと統合",
    "セキュリティスコアで現状を可視化(目標: 90%以上)",
    "検出結果に優先度をつけて計画的に是正",
    "自動修復アクションの設定で運用負荷を軽減",
    "Organizations連携でマルチアカウント環境を統合管理"
]
add_content_slide(prs, "Security Hubの活用", securityhub_content)

# 5. まとめ
add_summary_slide(prs)

# ファイル保存
output_path = "/Users/*****/*****/work/AWSセキュリティベストプラクティス.pptx"
prs.save(output_path)
print(f"プレゼンテーションを作成しました: {output_path}")

かなり強引な感じがしますねw

1 つの python ファイルで全てのスライド内容を定義しているようです。これでスライドを作成しているのはそれはそれで凄い...ですが、人間には到底扱える代物じゃないですし再度 Claude に同じことを依頼してもまた違った生成物を出してきそうです。

Skills のインストール

それでは実際に Skills を使ってみましょう。便利な機能ですし、使ってみないと勿体ないですね。

とはいえ、Skills を作るのは大変そうです。

そこでまずは Anthropic が提供している公式の Skills を使ってみたいと思います。

https://github.com/anthropics/skills

Anthropic は上記リポジトリにて、Claude で利用可能な Skills を公開しています。

その中でも今回は視覚的な差異がわかりやすいものとして、pptx ファイルの生成 Skill「pptx」を Claude Code で使ってみます。

Claude での Skills は ~/.claude/skills に追加することで利用できるのですが、公式サンプルの Skills を Claude Code で使う場合は上記リポジトリの README にもあるように Plugin としてインストールできます。

Claude Code を起動し、以下のコマンドを実行します。

/plugin marketplace add https://github.com/anthropics/skills

これで Anthropic の公式 Skills リポジトリがマーケットプレイスに追加されます。

次に、以下のコマンドで Skills そのものをインストールします。

/plugin install document-skills@anthropic-agent-skills

一点注意として、VSCode をご利用の場合、これらのコマンドは VSCode 上の統合された Claude Code コンソールではなく、ターミナル(Claude Code CLI)上で実行してください。

インストールが完了したら、Skills が使えるようになります。実際に Claude に Skill が利用可能か確認してみましょう。

ちなみに上記の方法でインストールした場合、 ~/.claude/plugins/cache/anthropic-agent-skills というディレクトリに公式 Skills が入ります。

Skill ありでプレゼンテーションを作成

それでは、pptx Skill を有効にした状態で同じプロンプトを実行します。プロンプト内で Skill を使用するように明示していませんが、これでもちゃんと目的の Skill を使ってくれました。こちらもモデルは Opus 4.5 を使用します。

「AWSセキュリティベストプラクティス」というタイトルで5枚程度のプレゼン資料をpptx形式で作成してください。
- 表紙
- 目次
- IAMのベストプラクティス
- Security Hubの活用
- まとめ

結果はこちらです。

同じプロンプトにも関わらず、視覚的に工夫されたスライドが生成されました!

表紙などは少し残念ですが、レイアウトの工夫、視覚的な階層構造など明らかに視覚的に工夫されているなという差異が見られます。

ちなみに Skill を利用した場合、資料以外に以下 6 つのファイルが生成されました。

  • create-pptx.js
  • slide1-cover.html
  • slide2-toc.html
  • slide3-iam.html
  • slide4-securityhub.html
  • slide5-summary.html
実際の出力ファイル
create-pptx.js
const pptxgen = require('pptxgenjs');
const html2pptx = require('/Users/*****/.claude/plugins/cache/anthropic-agent-skills/document-skills/69c0b1a06741/skills/pptx/scripts/html2pptx.js');
const path = require('path');

async function createPresentation() {
    const pptx = new pptxgen();
    pptx.layout = 'LAYOUT_16x9';
    pptx.author = 'AWS事業本部';
    pptx.title = 'AWSセキュリティベストプラクティス';
    pptx.subject = 'クラウド環境を安全に保つために';

    const workDir = '/Users/*****/*****/work';
    const slides = [
        'slide1-cover.html',
        'slide2-toc.html',
        'slide3-iam.html',
        'slide4-securityhub.html',
        'slide5-summary.html'
    ];

    for (const slideFile of slides) {
        const htmlPath = path.join(workDir, slideFile);
        console.log(`Processing: ${slideFile}`);
        await html2pptx(htmlPath, pptx);
    }

    const outputPath = path.join(workDir, 'AWSセキュリティベストプラクティス.pptx');
    await pptx.writeFile({ fileName: outputPath });
    console.log(`Presentation created: ${outputPath}`);
}

createPresentation().catch(err => {
    console.error('Error:', err);
    process.exit(1);
});
slide1-cover.html
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
  width: 720pt; height: 405pt; margin: 0; padding: 0;
  background: #232F3E; font-family: Arial, sans-serif;
  display: flex; flex-direction: column; justify-content: center; align-items: center;
}
.accent-bar {
  position: absolute; top: 0; left: 0; width: 100%; height: 8pt;
  background: #FF9900;
}
.title {
  color: #FFFFFF; font-size: 42pt; font-weight: bold;
  text-align: center; margin: 0 40pt;
}
.subtitle {
  color: #FF9900; font-size: 24pt; margin-top: 20pt;
  text-align: center;
}
.author {
  color: #AAAAAA; font-size: 14pt; margin-top: 40pt;
  text-align: center;
}
</style>
</head>
<body>
<div class="accent-bar"></div>
<h1 class="title">AWSセキュリティベストプラクティス</h1>
<p class="subtitle">クラウド環境を安全に保つために</p>
<p class="author">AWS事業本部</p>
</body>
</html>
slide2-toc.html
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
  width: 720pt; height: 405pt; margin: 0; padding: 0;
  background: #FFFFFF; font-family: Arial, sans-serif;
  display: flex; flex-direction: column;
}
.header {
  background: #232F3E; padding: 20pt 40pt;
}
.header-title {
  color: #FFFFFF; font-size: 28pt; font-weight: bold; margin: 0;
}
.content {
  padding: 30pt 60pt; flex: 1;
}
.toc-item {
  display: flex; align-items: center; margin-bottom: 25pt;
}
.number {
  background: #FF9900; color: #FFFFFF; font-size: 18pt; font-weight: bold;
  width: 36pt; height: 36pt; border-radius: 50%;
  display: flex; justify-content: center; align-items: center;
  margin-right: 20pt;
}
.toc-text {
  color: #232F3E; font-size: 20pt; margin: 0;
}
</style>
</head>
<body>
<div class="header">
  <h1 class="header-title">目次</h1>
</div>
<div class="content">
  <div class="toc-item">
    <div class="number"><p>1</p></div>
    <p class="toc-text">IAMのベストプラクティス</p>
  </div>
  <div class="toc-item">
    <div class="number"><p>2</p></div>
    <p class="toc-text">Security Hubの活用</p>
  </div>
  <div class="toc-item">
    <div class="number"><p>3</p></div>
    <p class="toc-text">まとめ</p>
  </div>
</div>
</body>
</html>
slide3-iam.html
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
  width: 720pt; height: 405pt; margin: 0; padding: 0;
  background: #FFFFFF; font-family: Arial, sans-serif;
  display: flex; flex-direction: column;
}
.header {
  background: #232F3E; padding: 20pt 40pt;
}
.header-title {
  color: #FFFFFF; font-size: 28pt; font-weight: bold; margin: 0;
}
.content {
  padding: 25pt 40pt; flex: 1; display: flex; gap: 30pt;
}
.left-col {
  flex: 1;
}
.right-col {
  flex: 1;
}
.section-title {
  color: #FF9900; font-size: 16pt; font-weight: bold; margin: 0 0 12pt 0;
}
.list-item {
  color: #333333; font-size: 13pt; margin: 0 0 8pt 0; line-height: 1.4;
}
.highlight-box {
  background: #FFF3E0; border-left: 4pt solid #FF9900;
  padding: 12pt 15pt; margin-top: 15pt;
}
.highlight-text {
  color: #232F3E; font-size: 12pt; margin: 0;
}
</style>
</head>
<body>
<div class="header">
  <h1 class="header-title">IAMのベストプラクティス</h1>
</div>
<div class="content">
  <div class="left-col">
    <h2 class="section-title">認証の強化</h2>
    <ul>
      <li class="list-item">ルートアカウントにMFAを設定</li>
      <li class="list-item">IAMユーザーにもMFAを必須化</li>
      <li class="list-item">長期認証情報の使用を避ける</li>
      <li class="list-item">IAM Identity Centerの活用</li>
    </ul>
    <div class="highlight-box">
      <p class="highlight-text"><b>重要:</b> ルートアカウントは日常業務で使用しない</p>
    </div>
  </div>
  <div class="right-col">
    <h2 class="section-title">最小権限の原則</h2>
    <ul>
      <li class="list-item">必要最小限の権限のみ付与</li>
      <li class="list-item">IAM Access Analyzerで未使用権限を特定</li>
      <li class="list-item">定期的な権限レビューの実施</li>
      <li class="list-item">ポリシーの条件キーを活用</li>
    </ul>
    <h2 class="section-title">監査とモニタリング</h2>
    <ul>
      <li class="list-item">CloudTrailでAPI操作を記録</li>
      <li class="list-item">IAM認証情報レポートの確認</li>
    </ul>
  </div>
</div>
</body>
</html>
slide4-securityhub.html
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
  width: 720pt; height: 405pt; margin: 0; padding: 0;
  background: #FFFFFF; font-family: Arial, sans-serif;
  display: flex; flex-direction: column;
}
.header {
  background: #232F3E; padding: 18pt 40pt;
}
.header-title {
  color: #FFFFFF; font-size: 26pt; font-weight: bold; margin: 0;
}
.content {
  padding: 20pt 40pt 30pt 40pt; flex: 1; display: flex; gap: 30pt;
}
.left-col {
  flex: 1;
}
.right-col {
  flex: 1;
}
.section-title {
  color: #FF9900; font-size: 14pt; font-weight: bold; margin: 0 0 8pt 0;
}
.list-item {
  color: #333333; font-size: 12pt; margin: 0 0 6pt 0; line-height: 1.3;
}
.feature-box {
  background: #F5F5F5; border-radius: 6pt; padding: 10pt; margin-bottom: 12pt;
}
.feature-title {
  color: #232F3E; font-size: 12pt; font-weight: bold; margin: 0 0 5pt 0;
}
.feature-desc {
  color: #666666; font-size: 11pt; margin: 0;
}
</style>
</head>
<body>
<div class="header">
  <h1 class="header-title">Security Hubの活用</h1>
</div>
<div class="content">
  <div class="left-col">
    <h2 class="section-title">Security Hubとは</h2>
    <p class="list-item">AWSのセキュリティ状況を一元管理</p>
    <div class="feature-box">
      <p class="feature-title">主要機能</p>
      <p class="feature-desc">検出結果の集約、コンプライアンスチェック、自動修復</p>
    </div>
    <h2 class="section-title">対応セキュリティ標準</h2>
    <ul>
      <li class="list-item">AWS基礎セキュリティベストプラクティス</li>
      <li class="list-item">CIS AWS Foundations Benchmark</li>
      <li class="list-item">PCI DSS</li>
    </ul>
  </div>
  <div class="right-col">
    <h2 class="section-title">効果的な活用方法</h2>
    <ul>
      <li class="list-item">全リージョンで有効化</li>
      <li class="list-item">GuardDuty、Inspectorと連携</li>
      <li class="list-item">重要度に応じた対応優先度設定</li>
      <li class="list-item">自動修復ワークフローの構築</li>
    </ul>
    <h2 class="section-title">スコア改善のポイント</h2>
    <ul>
      <li class="list-item">CRITICALとHIGHを優先対応</li>
      <li class="list-item">定期的なスコアレビュー</li>
      <li class="list-item">抑制ルールの適切な活用</li>
    </ul>
  </div>
</div>
</body>
</html>

slide5-summary.html
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
  width: 720pt; height: 405pt; margin: 0; padding: 0;
  background: #232F3E; font-family: Arial, sans-serif;
  display: flex; flex-direction: column;
}
.header {
  padding: 25pt 40pt 15pt 40pt;
}
.header-title {
  color: #FF9900; font-size: 30pt; font-weight: bold; margin: 0;
}
.content {
  padding: 0 40pt; flex: 1;
}
.summary-item {
  display: flex; align-items: flex-start; margin-bottom: 18pt;
}
.check-icon {
  background: #FF9900; color: #FFFFFF; font-size: 13pt; font-weight: bold;
  width: 24pt; height: 24pt; border-radius: 50%;
  display: flex; justify-content: center; align-items: center;
  margin-right: 12pt; flex-shrink: 0;
}
.summary-text {
  color: #FFFFFF; font-size: 16pt; margin: 0; line-height: 1.4;
}
.footer {
  padding: 15pt 40pt 40pt 40pt; text-align: center;
}
.footer-text {
  color: #AAAAAA; font-size: 13pt; margin: 0;
}
.cta {
  color: #FF9900; font-size: 15pt; margin: 8pt 0 0 0;
}
</style>
</head>
<body>
<div class="header">
  <h1 class="header-title">まとめ</h1>
</div>
<div class="content">
  <div class="summary-item">
    <div class="check-icon"><p>1</p></div>
    <p class="summary-text">IAMは最小権限の原則を徹底し、MFAを必須化する</p>
  </div>
  <div class="summary-item">
    <div class="check-icon"><p>2</p></div>
    <p class="summary-text">Security Hubでセキュリティ状況を可視化・一元管理する</p>
  </div>
  <div class="summary-item">
    <div class="check-icon"><p>3</p></div>
    <p class="summary-text">継続的なモニタリングと改善サイクルを回す</p>
  </div>
</div>
<div class="footer">
  <p class="footer-text">セキュリティは継続的な取り組みが重要です</p>
  <p class="cta">Thank you!</p>
</div>
</body>
</html>

Skill を利用した場合、全てのスライドを一度 html で作成し、html → pptx の変換を js で行っているようですね。これなら人間が見てもわかりやすいですし、修正箇所も各 html ファイルを弄るだけなので後続のエージェントへの指示も通りやすそうです。

なぜ Skills が優れた出力を生むのか

pptx Skill は以下のような構造になっています。(一部省略)

skills/pptx/
├── SKILL.md           # メインの指示書
├── html2pptx.md       # HTML→PPTX変換の詳細ガイド
├── ooxml.md           # Office Open XML編集の詳細ガイド
├── scripts/           # 実行可能なスクリプト
│   ├── html2pptx.js
│   ├── thumbnail.py
│   ├── inventory.py
│   ├── replace.py
│   └── rearrange.py
└── ooxml/
    └── scripts/
        ├── ...
        ├── ...

https://github.com/anthropics/skills/tree/main/skills/pptx

パッと構成を見ただけでも、html2pptx を行うような指示がされていたんだな、ということがわかりますね。

より具体的に SKILL.md を見てみます。SKILL.md には 500 行ほどの指示が書かれていますが、冒頭(50 行目付近)に以下のような指示が含まれています。

**CRITICAL**: Before creating any presentation, analyze the content and choose appropriate design elements:
1. **Consider the subject matter**: What is this presentation about? What tone, industry, or mood does it suggest?
2. **Check for branding**: If the user mentions a company/organization, consider their brand colors and identity
3. **Match palette to content**: Select colors that reflect the subject
4. **State your approach**: Explain your design choices before writing code

「プレゼンテーションを作成する前に、まずコンテンツを分析し、適切なデザイン要素を選択する」という明確なワークフローが定義されています。

さらに、18 種類ものカラーパレットの例が用意されています。

1. **Classic Blue**: Deep navy (#1C2833), slate gray (#2E4053), silver (#AAB7B8), off-white (#F4F6F6)
2. **Teal & Coral**: Teal (#5EA8A7), deep teal (#277884), coral (#FE4447), white (#FFFFFF)
3. **Bold Red**: Red (#C0392B), bright red (#E74C3C), orange (#F39C12), yellow (#F1C40F), green (#2ECC71)
...

その他にも、レイアウトの Tips、タイポグラフィ、チャートのスタイリングなど、プレゼンテーション作成に必要なノウハウが網羅されているようです。

つまり、pptx Skill は「プロのプレゼンテーションデザイナーが持つノウハウ」をパッケージ化したものと言えます。この Skill を読み込むことで、Claude は単なるコード生成ではなく、デザインの観点を持った上でプレゼンテーションを作成できるようになったんですね。

Agent Skills を自作する場合

次のステップとして、自分なりの Skill を作ってみたくなります。

とはいえ 1 から作るのは大変...という方には、Anthropic が提供する Skill「skill-creator」がおすすめです。

skill-creator は対話的に Skill を作成するための Skill です。

実は先ほど紹介した GitHub リポジトリに skill-creator も含まれています。

https://github.com/anthropics/skills/tree/main/skills/skill-creator

上記のプラグインによるインストール手順を実施した方は、すでに Claude Code で skill-creator が使えるはずです。

Claude に「新しい Skill を作りたい」と伝えると、skill-creator が起動し、以下のような流れで Skill 作成をサポートしてくれます。

  1. ユースケースのヒアリング: どんなタスクに使う Skill か
  2. 具体例の収集: 実際にどのような入出力を期待するか
  3. フォルダ構造の生成: SKILL.md と必要なファイルの自動生成
  4. テストと改善: 生成した Skill の動作確認

例えば、「CloudFormation テンプレートのレビューをする Skill を作りたい」と伝えると、skill-creator がいくつかの質問をした上で、適切な SKILL.md を生成してくれます。

手動で Skill を作成する場合

skill-creator を使わずに手動で作成する場合は、以下の最小構成から始められます。

---
name: my-skill-name
description: このSkillが何をするか、いつ使うか
---

# My Skill Name

## Overview
このSkillの概要を記載

## Instructions
具体的な手順を記載

## Examples
使用例を記載

このファイルを my-skill-name/SKILL.md として保存し、.claude/skills/ ディレクトリに配置すれば、Skill として認識されます。

より複雑な Skill を作成する場合は、公式の pptx Skill や docx Skill を参考にすると良いでしょう。

例えば、Composio という統合 AI ツールを開発している企業が以下のリポジトリで有用な Skills を公開しています。

https://github.com/ComposioHQ/awesome-claude-skills

ただし MCP の際にも話題になりましたが、第三者が作成した Skill を利用する際には悪意のある挙動を含んだものではないか十分にご確認ください。

参考資料

最後に

お恥ずかしい話ですが、自分は今回の Skills 含め AI エージェントを便利にする新機能を使いこなせてはいません。毎セッション、プロンプトでちまちまお願いして軌道修正しています。

ただ、MCP がそうであるように Skills は今後様々な AI エージェントや SaaS で利用されるオープンスタンダードであるため、自分もしっかりと理解しないとな、と思い本記事を執筆してみました。

まだ発表されたばかりの機能ですが、今後コミュニティで様々な Skill が共有されていくことで、AI エージェントの活用の幅がさらに広がっていくのではないでしょうか。

私も自分なりの Skill を作成し、日々の業務に役立てたいと思います。

以上、べこみんでした。

この記事をシェアする

FacebookHatena blogX

関連記事