Microsoft 365 CopilotのCopilot Chatでも、スキルを作ったりアップロードしたりできるようになります。Microsoftの告知(MC1493223)では、全世界への展開は11月中旬に終わる予定です。Cowork、PowerPoint、Excel、Agent Builderのスキルも同じSKILL.md形式なので、ClaudeやCodex用に書いたスキルを職場のCopilotでも使えそうに見えます。
中身の書き直しはほとんど要りません。つまずくのは入れ物のほうです。Agent BuilderとCoworkにZIPでアップロードする場合、資料上の組み方はclaude.aiと逆で、最上位にフォルダーではなくSKILL.mdを置きます。また、Anthropicが公開しているスキル19個を各製品の公開制約に当てはめると、3製品の条件にすべて合ったのは11個でした。残る8個は、フォント・XMLスキーマ・圧縮ファイル・PDFといったファイル形式か、5段の入れ子、2万字を超える指示のどれかに引っかかります。
この検査は、2026年11月7日に確認したMicrosoftの公開資料に当てはめた静的なものです。Microsoft 365のテナントで実際にアップロードしてはいません。資料に書かれていることと、手元で実行したことを分けて書きます。
手直しが最も少ないのは、OneDriveにフォルダーごと置く方法
Cowork、PowerPoint、Excelは、OneDrive上のスキル用フォルダーに「スキル名のフォルダー+SKILL.md」を置く方式です。Claude Codeの~/.claude/skills/と同じ形なので、フォルダーを複製すれば済み、ZIPの組み方も気にしなくて済みます。
- Copilot Chatは、チャットで作成するか、アップロードします。展開は11月中旬に完了する予定です。告知にはファイル形式と上限の記載がなく、情報バリアを使うテナントでは自作スキルを共有できません。
- Coworkは、OneDriveの/Documents/Cowork/skills/スキル名/SKILL.mdに置くか、.md・.zip・.skillをアップロードします。50個まで、SKILL.mdは1MBまで、付属ファイルは20個・合計10MBまでで、モバイル版では使えません。
- PowerPointは、Copilotの設定から「スキルの管理」→「カスタムスキル」を開き、名前と同じフォルダーに置きます。PNG・PDF・入れ子のZIPは非対応で、アップロードしたスキルは自分専用です。
- Excelは、OneDriveのスキル用フォルダーに置きます。フォルダー名とnameが一致しないと認識されず、追加や名前の変更の後は「Refresh」を押します。
- Agent Builderは、最上位にSKILL.mdを置いたZIPをアップロードします。1エージェント8個、ZIPは50MB、全体で350ファイル、入れ子は3段まで、指示は2万字未満です。スクリプトは通信も追加パッケージの導入もできません。
これらの条件は、Coworkの使い方の資料、PowerPointのサポート記事、Excelのサポート記事、Agent Builderのスキルの資料から取りました。Coworkの付属ファイルは、別のアップロード手順では「アーカイブは100ファイル・展開後50MBまで」とも書かれていて、20個との関係は資料から読み取れません。検査には厳しいほうの20個を使っています。
ZIPで渡すなら、claude.ai用とAgent Builder・Cowork用で組み方を変える
claude.aiのヘルプは、ZIPの最上位にスキルのフォルダーを置くよう求めています。my-skill.zipを開くと、my-skill/SKILL.mdが入っている形です。ところがAgent Builderの追加手順の図はZIPの直下にSKILL.mdがあり、Coworkのアップロード手順も「最上位にSKILL.mdがある.zipか.skill」と書いています。
手元で確かめると、Anthropicのskill-creatorに含まれるpackage_skill.pyで作った.skillファイルも、中身はinternal-comms/SKILL.mdとフォルダーが先頭でした。claude.aiには正しい形ですが、Coworkの資料の条件とは合いません。Coworkが実際にこの形を受け付けるかは、テナントがないため確かめられていません。なお、Claude APIはどちらの形でも受け付けます。
macOSのターミナルなら、次のように作り分けられます。.DS_Storeと__pycache__は、Agent Builderの対応形式にないため除外しています。
# Claude(claude.ai)用:フォルダーごと圧縮する
zip -r my-skill-claude.zip my-skill -x '*.DS_Store' '*__pycache__*'
# Agent Builder・Coworkのアップロード用:フォルダーの中身を圧縮する
cd my-skill
zip -r ../my-skill-m365.zip . -x '*.DS_Store' '*__pycache__*'
cd ..
# 確かめる:SKILL.mdの前にフォルダー名が付くかを見る
unzip -Z1 my-skill-claude.zip
unzip -Z1 my-skill-m365.zip手元のmacOS 26.4.1で実行すると、claude.ai用はmy-skill/SKILL.md、Agent Builder・Cowork用はSKILL.mdと表示されました。SKILL.mdの前にフォルダー名が付いているかどうかが、見分けるポイントです。Windowsでは試していませんが、エクスプローラーで作る場合、Agent Builder・Cowork用ならフォルダーを開き、中のファイルをすべて選んでから圧縮します。フォルダーを丸ごと圧縮すると、claude.ai用の形になります。
公開スキル19個では、Office文書系とフォント入りのスキルが引っかかった
AnthropicがGitHubで公開しているスキル19個(2026年10月28日のコミット)に、上の制約を機械的に当てはめました。
- Agent Builderの条件に合ったのは12個。canvas-designは.ttfのフォントが54個、docx・pptx・xlsxは.xsdのスキーマと5段の入れ子、web-artifacts-builderは.tar.gzで引っかかりました。skill-creatorはSKILL.mdが32,987字、claude-apiは105,119字ありました。
- Coworkの付属ファイル20個を超えたのは5個。canvas-designが82個、claude-apiが95個、docx・pptx・xlsxが52〜60個です。
- PowerPointで非対応のPDFを含むのは、theme-factoryだけでした。
pptxのSKILL.mdは、前付けを含めると20,647字、本文だけなら19,821字です。どちらで数えるかは資料に書かれていません。ただしpptxはファイル形式と入れ子でも引っかかるので、結論は変わりません。
引っかかったものに、Word・PowerPoint・Excelのファイルを作るスキルが多いのは目を引きます。もっとも、CoworkにはWord・Excel・PowerPoint・PDFの組み込みスキルがあります。私なら、この種のスキルは持ち込まずに組み込みに任せます。持ち込む価値があるのは、社内の報告書の型や確認手順のように、自分たちの仕事のやり方を書いたスキルです。
スクリプトは「通信しない・追加で入れない」に書き直す
ファイル形式より見落としやすいのがスクリプトです。Agent Builderのスクリプトは、ネットワークに接続できず、実行中にパッケージを入れることもできません。使えるのは実行環境に最初から入っているものだけで、Microsoftはその有無を確かめずに頼らないよう書いています。
公開スキルでは7個のSKILL.mdやスクリプトに、pip installやnpm installなどの記述がありました。docxとxlsxは「通常は導入済み。読み込めなければ入れる」という書き方で、Claudeの実行環境を前提にしています。当サイトの記事作成に使っている自作スキルも、WordPressや画像生成APIと通信するため、Agent Builderでは動きません。外部と通信する仕事はClaude Codeに残し、Copilotへは手順と判断基準だけを持ち込むのが現実的です。CoworkとPowerPointのスクリプトが通信できるかは、読んだ資料には書かれていませんでした。
逆向きにも注意。Coworkの例どおりの名前は、Claude側の規則に合わない
Coworkで作ったスキルをClaude Codeやclaude.aiへ持っていくときにも、落とし穴があります。Coworkの手順にある例は、フォルダー名がweekly-reportなのに、SKILL.mdのnameは「Weekly Report」です。
Agent Skillsの仕様では、nameは英小文字・数字・ハイフンだけで書き、親フォルダー名と一致させます。Claude APIの規則も同じです。実際にこの例をAnthropicのpackage_skill.pyにかけると、「kebab-caseではない」という検証エラーで止まりました。claude.aiのヘルプは「人が読みやすい名前(64字以内)」とだけ書いていて、画面で受け付けるかは試していません。PowerPointとExcelもフォルダー名とnameの一致を求めているので、最初からname: weekly-reportのように書いておけば、どの製品でも同じフォルダーを使い回せます。
説明文(description)の長さも、製品によって書き方が違います。仕様の上限は1,024字、claude.aiのヘルプは200字以内です。Coworkは「上限を超えると読み込まれない」と書きながら、値を示していません。Anthropic自身の公開スキルは19個すべてが200字を超え、claude-apiは1,068字でした。いつ使うスキルなのかを先頭に書き、1,024字を確実に下回る長さにしておくのが安全です。
持ち込む前に回す検査スクリプト
上の検査に使ったスクリプトを、標準ライブラリだけで動く形にしたものです。Python 3.9以上で動き、スキルのフォルダーを引数に渡します。2026年11月7日時点の公開資料の条件に当てはめるだけで、製品が受け付けることを保証するものではありません。通信やパッケージ導入は文字列の一致で探しているので、「要確認」と出たらスクリプトの中身を読んで判断してください。
import re
import sys
from pathlib import Path
AB_TYPES = set('.json .xml .yaml .yml .ini .config .utf8 .docx .doc .docm .pdf .txt .rtf .md .ppt .pptx .ppsm '
'.xlsx .xls .xlsm .csv .tsv .html .htm .png .jpg .jpeg .gif .bmp .log '
'.py .js .mjs .cjs .ts .mts .sh .bash'.split())
PPT_NG = {'.png', '.pdf', '.zip'}
SCRIPTS = {'.py', '.js', '.mjs', '.cjs', '.ts', '.mts', '.sh', '.bash'}
NET = re.compile(r'requests\.|urllib\.request|http\.client|httpx|aiohttp|fetch\(|axios|curl |wget ')
INSTALL = re.compile(r'pip install|npm install|npx |apt-get|brew install')
def front(text):
head = text.split('\n---', 1)[0].removeprefix('---\n') if text.startswith('---\n') else ''
fields, key = {}, None
for line in head.splitlines():
m = re.match(r'^([A-Za-z0-9_-]+):\s*(.*)$', line)
if m:
key, value = m.group(1), m.group(2).strip()
fields[key] = '' if value in ('>', '|', '>-', '|-') else value.strip('"\'')
elif key and line.startswith((' ', '\t')):
fields[key] = (fields[key] + ' ' + line.strip()).strip()
return fields
def check(folder):
folder = Path(folder).resolve()
files = [p for p in folder.rglob('*')
if p.is_file() and '__pycache__' not in p.parts and p.name != '.DS_Store']
rel = [p.relative_to(folder) for p in files]
md = folder / 'SKILL.md'
text = md.read_text(encoding='utf-8') if md.exists() else ''
f = front(text)
name, desc = f.get('name', ''), f.get('description', '')
exts = {r.suffix.lower() or '(拡張子なし)' for r in rel}
depth = max((len(r.parts) - 1 for r in rel), default=0)
size = sum(p.stat().st_size for p in files)
code = [p for p in files if p.suffix.lower() in SCRIPTS]
issues = []
if not md.exists():
issues.append('SKILL.mdがない')
if not re.fullmatch(r'[a-z0-9]+(-[a-z0-9]+)*', name) or len(name) > 64:
issues.append(f'name「{name}」が英小文字・数字・ハイフンの64字以内でない')
if name != folder.name:
issues.append(f'nameとフォルダー名「{folder.name}」が違う')
if not desc or len(desc) > 1024:
issues.append(f'descriptionが空か1024字超({len(desc)}字)')
if len(text) >= 20000:
issues.append(f'Agent Builder: SKILL.mdが{len(text)}字(20,000字未満が条件)')
if exts - AB_TYPES:
issues.append(f'Agent Builder: 対応外の形式 {sorted(exts - AB_TYPES)}')
if depth > 3:
issues.append(f'Agent Builder: フォルダーの入れ子が{depth}段(上限3)')
if len(files) > 350:
issues.append(f'Agent Builder: {len(files)}ファイル(上限350)')
if len(files) - 1 > 20 or size > 10 * 1024 * 1024:
issues.append(f'Cowork: 付属{len(files) - 1}ファイル・計{size / 1024 / 1024:.1f}MB(上限20個・10MB)')
if exts & PPT_NG:
issues.append(f'PowerPoint: 対応外の形式 {sorted(exts & PPT_NG)}')
for p in code:
body = p.read_text(encoding='utf-8', errors='ignore')
if NET.search(body):
issues.append(f'要確認: {p.relative_to(folder)} が通信する可能性(Agent Builderの実行環境は通信不可)')
for p in [md, *code]:
if p.exists() and INSTALL.search(p.read_text(encoding='utf-8', errors='ignore')):
issues.append(f'要確認: {p.relative_to(folder)} にパッケージ導入の記述(Agent Builderは実行時の導入不可)')
return issues
for path in sys.argv[1:]:
found = check(path)
print(f'■ {Path(path).resolve().name}: ' + ('公開制約に該当なし' if not found else f'{len(found)}件'))
for item in found:
print(' - ' + item)Claude Codeの個人用スキルをまとめて調べるなら、次のように実行します。
python3 skillcheck.py ~/.claude/skills/*/公開スキル、Coworkの例、手元の試験用スキルに対して実行した結果の一部です。
■ docx: 4件
- Agent Builder: 対応外の形式 ['.xsd']
- Agent Builder: フォルダーの入れ子が5段(上限3)
- Cowork: 付属60ファイル・計1.1MB(上限20個・10MB)
- 要確認: SKILL.md にパッケージ導入の記述(Agent Builderは実行時の導入不可)
■ theme-factory: 1件
- PowerPoint: 対応外の形式 ['.pdf']
■ weekly-report: 2件
- name「Weekly Report」が英小文字・数字・ハイフンの64字以内でない
- nameとフォルダー名「weekly-report」が違う
■ my-skill: 公開制約に該当なし試す前に確かめたい契約と費用
Agent Builderの追加手順には、Microsoft 365 Copilotのライセンスか従量課金が前提と書かれています。Copilot Chatのスキルについては、告知が「Copilot Chatの利用者」が作れると書くだけで、必要なライセンスは示していません。自分のテナントに表示されるかで確かめるしかありません。
Coworkは従量課金で、スキルの呼び出しも消費に数えられます。管理者は利用者やグループごとに上限を決められます。また、Coworkの推論にはAnthropicのClaudeも使われるため、利用はAnthropicの対応地域に限られます。日本は対応地域に含まれています。PowerPointのカスタムスキルは、Windows・Mac・iPad版のPowerPoint for Microsoft 365が対象です。
私ならこの順で試す
- 手元のスキルに検査スクリプトをかけ、nameとフォルダー名をそろえる。
- 通信しない手順書型のスキルを1つ選び、OneDriveのCoworkかPowerPointのフォルダーに置いて動きを見る。
- スクリプトが必要なスキルは、通信も追加導入もしないことを確かめてから、Agent Builder用のZIPにする。
最初の1つは、Word・Excelの組み込みスキルと役割が重ならないものを選ぶと、自作スキルが使われたかを見分けやすくなります。同じSKILL.mdはGeminiにも取り込めます。取り込める場所と条件はGeminiのスキルとGemsの違いで扱いました。Coworkでどのモデルを選べるかはCopilotでGPT-6 Astraは使えるかの記事にまとめています。
