こんにちは、JS2IIUです。
近年、AIによるコーディング支援ツールは目覚ましい進化を遂げています。その中でも、Anthropic社の「Claude」やGitHub社の「Copilot」は、多くの開発者にとって不可欠な存在となりつつあります。そして今、これらのツールをさらに強力にする新たな拡張機能として「Agent Skills」が注目を集めています。
本記事では、この「Skills」が一体何であり、何ができて、どのように活用できるのかを、Pythonの実践的なコード例を交えて徹底的に解説します。Pythonの基本的な文法を理解し、さらに一歩進んだAI活用を目指す皆さんに向けた、ガイドです。今回もよろしくお願いします。
1. 「Skills」とは何か?AIエージェントの能力を拡張する新機軸
「Skills」とは、一言で言えば「AIエージェントに特定の専門知識やワークフローを教え込むための、構造化された手順書パッケージ」です。
これまでAIとのやり取りは、その場限りのプロンプトや、全体的なルールを決める「Custom Instructions」が中心でした。しかし、Agent Skillsはそれらとは一線を画します。これは、もともとAnthropic社が提唱したオープンスタンダード(公開仕様)に基づいており、Claude Codeだけでなく、GitHub Copilotもこの仕様を採用したことで、ツールを横断したエコシステムの形成が期待されています。
従来の拡張機能との違い
これまでもAIの振る舞いをカスタマイズする方法として、いくつかの手法が存在しました。Skillsの立ち位置を理解するために、その役割を整理してみましょう。
| 機能 | 役割(アナロジー) | 特徴 |
|---|---|---|
| Custom Instructions | 現場の基本ルール | 「安全第一」「敬語で話す」といった、AIの基本的な振る舞いやトーンを定義します。常に適用されるため、特定タスクには向きません。 |
| Tools (MCP等) | AIが使う「道具」 | ファイル操作、Web検索、データベース接続など、AIが実行できる「アクション」を増やします。ハンマーやノコギリに相当します。 |
| Skills | 専門家の「手順書」 | 「家を建てるための設計図と手順」に相当します。複雑なワークフローや専門知識をパッケージ化し、必要な時だけ動的に読み込ませます。 |
つまり、ToolsがAIに「できること」を与えるのに対し、Skillsは「どうやるか」という知恵を授けるものです。これらを組み合わせることで、AIエージェントはただのチャットボットから、自律的に動く「有能なアシスタント」へと進化します。
2. Skillsの核心:Progressive Disclosure(段階的開示)
Skillsの最大の特徴は、Progressive Disclosure(段階的開示)という考え方に基づいている点です。
従来のAI活用では、多くのコンテキスト(背景情報)を一度に与えようとして、トークン制限(AIが一度に扱える文字数)に達したり、指示が混同されて精度が落ちたりすることがありました。
Skillsでは、AIが必要なタスクに直面したとき、初めてそのSkillに関連する情報を読み込みます。これにより、以下のメリットが生まれます。
- コンテキストの節約: 必要な時に必要な情報だけを使うため、長いコードベースでも精度を維持できます。
- 精度の向上: 無関係な指示に惑わされることなく、そのタスクに特化した手順に従うことができます。
- 再利用性: 一度定義したSkillは、プロジェクトを跨いで、あるいはチーム内で共有可能です。
3. PythonプロジェクトにおけるSkillsの実装と活用
ここからは、実際にPythonプロジェクトでどのようにSkillsを活用するか、具体的なコードを交えて見ていきましょう。
今回は、「Pythonのコード品質を静的に解析し、特定の命名規則や型ヒントの欠落を自動で見つけ出す」というカスタムSkillを作成してみます。
3.1. 補助ツールの作成:Pythonによる静的解析スクリプト
Skillから呼び出される実体として、まずはPythonの抽象構文木(AST: Abstract Syntax Tree)を利用した簡単な解析ツールを用意します。このスクリプトは、関数の引数に型ヒントが欠けているものを検出し、修正案を提示する役割を担います。
import ast
import os
import sys
class TypeHintChecker(ast.NodeVisitor):
"""
Pythonコードを解析し、型ヒントが欠落している関数定義を検出するクラスです。
"""
def __init__(self):
self.violations = []
def visit_FunctionDef(self, node):
# 関数の引数をチェック
for arg in node.args.args:
# self や cls は除外(慣習的に型ヒントを省略することが多いため)
if arg.arg in ("self", "cls"):
continue
# 型ヒント(annotation)がない場合を記録
if arg.annotation is None:
self.violations.append({
"function": node.name,
"argument": arg.arg,
"line": node.lineno
})
self.generic_visit(node)
def check_file(filepath):
"""
指定されたファイルを解析し、結果を表示します。
"""
try:
with open(filepath, "r", encoding="utf-8") as f:
code = f.read()
# コードをパースしてAST(抽象構文木)を作成
tree = ast.parse(code)
checker = TypeHintChecker()
checker.visit(tree)
return checker.violations
except Exception as e:
return f"Error reading {filepath}: {str(e)}"
if __name__ == "__main__":
# コマンドライン引数からファイルパスを取得
if len(sys.argv) < 2:
print("Usage: python type_checker.py <filename>")
sys.exit(1)
target_file = sys.argv[1]
results = check_file(target_file)
if isinstance(results, list):
if not results:
print("Great! All arguments have type hints.")
for v in results:
print(f"Violation: Function '{v['function']}' has an argument '{v['argument']}' without a type hint at line {v['line']}.")
else:
print(results)このコードのポイントは、Python標準ライブラリのastモジュールを使用している点です。これにより、単なる文字列検索ではなく、Pythonプログラムの構造を論理的に理解した上での解析が可能になります。
3.2. Skillの定義:SKILL.md の作成
次に、このPythonスクリプトをAIエージェントに「どのように使うか」を教えるためのSkill定義ファイルを作成します。
ディレクトリ構造は以下のようになります。
.claude/
skills/
python-type-enforcer/
SKILL.md
type_checker.py (先ほど作成したスクリプト)SKILL.md の内容は以下の通りです。
---
name: python-type-enforcer
description: "Pythonコードの型ヒントが不足している箇所を検出し、修正案を提示します。新しい関数を作成した際や、コードレビュー時に自動的にトリガーされます。"
disable-model-invocation: false
---
# Python 型ヒント遵守ガイド
あなたはプロジェクトの品質管理担当者として、以下の手順で型ヒントのチェックを行ってください。
1. **ツールの実行**: `python3 .claude/skills/python-type-enforcer/type_checker.py <対象ファイル>` を実行してください。
2. **結果の分析**: ツールが違反(Violation)を報告した場合、その箇所を確認してください。
3. **修正案の提示**:
- コンテキストから推論できる最も適切な型(`int`, `str`, `List[str]`など)を選択してください。
- 修正後のコードブロックを提示してください。
4. **教育的なフィードバック**: なぜその箇所に型ヒントが必要なのか、型ヒントがあることでどのようなメリット(エディタの補完、保守性向上など)があるかを簡潔に説明してください。
型ヒントは、堅牢なPythonアプリケーション開発において不可欠です。妥協せずに指摘してください。設定項目の解説
- name: スラッシュコマンド(例:
/python-type-enforcer)としても機能する識別子です。 - description: 最も重要な項目です。AIはこの説明文を読み、「今、このSkillを呼び出すべきか?」を判断します。
- YAML Frontmatter:
---で囲まれた部分は、Skillのメタデータを定義します。ここでAIに「いつ」「何を」すべきかを教え込みます。
4. Skillsの設定と導入方法
Skillsを利用するための環境構築は非常にシンプルです。主要なツールの設定場所を確認しておきましょう。
Claude Code での利用
Claude Codeの場合、プロジェクトのルートディレクトリ、またはホームディレクトリに配置します。
- プロジェクト用:
リポジトリルート/.claude/skills/ - グローバル用:
~/.claude/skills/
配置後、Claude Codeを起動すると自動的にSkillが読み込まれます。
GitHub Copilot での利用
GitHub Copilot(特にAgent Mode)においても、同様の構造を採用しています。
- プロジェクト用:
.github/skills/または.claude/skills/ - 個人用:
~/.copilot/skills/
現時点では、VS Code Insiders版などの先行リリース機能として提供されている場合がありますが、今後標準的な機能として展開される予定です。
VSCodeでSkillsを有効にする方法
設定からchar.useAgentSkillsを検索し、機能を有効化して下さい

5. 応用編:より高度なAIアシスタントへの進化
Skillsの本当の力は、複数のツールやルールを組み合わせたときに発揮されます。
シナリオ:デプロイ前の自動チェックSkill
例えば、以下のような手順をSkillとして定義するとどうでしょうか。
- Pythonの単体テスト(pytest)を実行する。
- テストが成功したら、カバレッジ率を確認する。
- カバレッジ率が80%未満であれば、不足しているテストケースを提案する。
- すべての条件を満たしたら、プルリクエストの概要を自動生成する。
このような「一連の思考プロセス」をSkillに記述しておくことで、開発者は「デプロイ準備をして」とAIに一言伝えるだけで、複雑なチェックフローを正確に実行させることができます。
ここで、数学的なモデルの複雑度を考慮する場合の考え方を少し導入してみましょう。AIがSkillを選択する際の「関連度」を、ベクトル間の類似度として表現すると、以下のような概念になります。
$$
Similarity = \frac{\mathbf{A} \cdot \mathbf{B}}{|\mathbf{A}| |\mathbf{B}|}
$$
ここで、\(\mathbf{A}\) は現在の対話コンテキストのベクトル、\(\mathbf{B}\) は各Skillのdescriptionから生成されたベクトルです。AIはこのコサイン類似度が高いSkillを動的に選択し、実行します。私たちがdescriptionを丁寧に書くべき理由は、この計算精度を高めるためなのです。
6. まとめ:Skillsと共に進化する開発の未来
「Agent Skills」は、単なるAIのカスタマイズ機能に留まりません。それは、開発者の持つ専門知識やワークフローといった「暗黙知」を、AIが理解可能な「形式知」へと変換し、チーム全体で再利用可能にするための強力なプラットフォームです。
本記事で紹介したPythonによる型ヒントチェッカーの例は、あくまで入り口に過ぎません。皆さんのプロジェクト独自の規約、特定のライブラリの使いこなし、あるいはリリースプロセスの自動化など、活用の幅は無限に広がっています。
Claude CodeとGitHub Copilotがこの共通規格を採用したことで、今後Skillsのエコシステムは急速に拡大していくでしょう。まずは、自分が毎日行っているルーチン作業を一つ選び、小さなSkillとして定義することから始めてみてください。
その一歩が、AIと共創する未来の標準的な開発スタイルへの大きな足がかりとなるはずです。AIを単なる「相談相手」から、自分の意志を継ぐ「専門的なエージェント」へと育て上げましょう。
最後まで読んでいただきありがとうございます。

コメント