winmd-api-search について
winmd-api-searchは、Windows APIの検索や型シグネチャの確認に使う開発者向けスキルです。ローカルのWinMDメタデータキャッシュを検索し、Platform SDKとWinAppSDKを標準でカバーします。
主な機能
- 01API名とメンバーの検索
- 02型シグネチャと列挙値の確認
- 03名前空間、プロジェクト、パッケージの一覧
- 04SDK、NuGet、プロジェクトのWinMDメタデータ索引
活用シーン
- 01Windows機能に対応するAPIの特定
- 02コーディング前のメンバー確認
- 03列挙値の参照
- 04プロジェクトで利用可能なAPIの調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ github/ awesome-copilot --skill winmd-api-searchインストール後、Claude Code で/winmd-api-searchを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSE.txtscripts/Invoke-WinMdQuery.ps1Update-WinMdCache.ps1scripts/cache-generator/CacheGenerator.csprojDirectory.Build.propsDirectory.Build.targetsDirectory.Packages.propsProgram.cs詳細
WinMD API の検索
このスキルを使うと、機能に適した Windows API を見つけ、その詳細を確認できます。次のすべての WinMD メタデータを含むローカルキャッシュを検索します。
- Windows Platform SDK — すべての
Windows.*WinRT API(常に利用可能。復元は不要です) - WinAppSDK / WinUI — キャッシュ生成ツールのベースラインとして同梱(常に利用可能。復元は不要です)
- NuGet パッケージ — 復元済みプロジェクト内にある、
.winmdファイルを含む追加パッケージ - プロジェクト出力の WinMD — ビルド出力として
.winmdを生成するクラスライブラリ(C++/WinRT、C#)
クローン直後で復元やビルドを行っていない状態でも、Platform SDK と WinAppSDK の全 API を利用できます。
このスキルを使う場面
- ユーザーが機能の実装を希望しており、その機能を提供する API を見つける必要がある場合
- 「X を行う方法は?」という質問で、X がプラットフォーム機能(カメラ、ファイル、通知、センサー、AI など)に関わる場合
- コードを書く前に、型のメソッド、プロパティ、イベント、列挙値を正確に確認する必要がある場合
- UI やシステム関連のタスクで、どのコントロール、クラス、インターフェイスを使うべきか分からない場合
前提条件
- .NET SDK 8.0 以降 — キャッシュ生成ツールのビルドに必要です。利用できない場合は dotnet.microsoft.com からインストールしてください。
キャッシュのセットアップ(初回使用前に必須)
すべてのクエリと検索コマンドは、ローカルの JSON キャッシュを参照します。クエリを実行する前に、キャッシュを生成する必要があります。
# All projects in the repo (recommended for first run)
.\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1
# Single project
.\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1 -ProjectDir <project-folder>
ベースラインの対象(Platform SDK と WinAppSDK)には、プロジェクトの復元やビルドは不要です。追加の NuGet パッケージを対象にするには、プロジェクトで dotnet restore を実行して project.assets.json を生成するか、packages.config ファイルを用意する必要があります。
キャッシュは Generated Files\winmd-cache\ に保存され、パッケージとバージョンごとに重複が排除されます。
インデックス対象
| ソース | 利用可能になるタイミング |
|---|---|
| Windows Platform SDK | 常時(ローカルの SDK インストール先を参照) |
| WinAppSDK(最新) | 常時(キャッシュ生成ツールのベースラインとして同梱) |
| WinAppSDK Runtime | システムへのインストール後(Get-AppxPackage で検出) |
| プロジェクトの NuGet パッケージ | dotnet restore の実行後、または packages.config の使用時 |
プロジェクト出力の .winmd | プロジェクトのビルド後(WinMD を生成するクラスライブラリ) |
注: このキャッシュディレクトリは
.gitignoreに追加してください。ソースではなく、生成されるファイルです。
使い方
状況に合った方法を選んでください。
Discover — 「使用する API がわかりません」
ユーザーが必要な機能を自分の言葉で説明します。適切な API を見つける必要があります。
0. キャッシュが存在することを確認する
キャッシュがまだ生成されていない場合は、まず Update-WinMdCache.ps1 を実行してください。上記の キャッシュのセットアップ を参照してください。
1. ユーザーの言葉 → 検索キーワードに変換する
ユーザーの日常的な言葉をプログラミング用語に置き換えます。複数のバリエーションを試してください。
| ユーザーの表現 | 試す検索キーワード(順番どおり) |
|---|---|
| 「写真を撮る」 | camera、capture、photo、MediaCapture |
| 「ディスクから読み込む」 | file open、picker、FileOpen、StorageFile |
| 「中に何があるか説明する」 | image description、Vision、Recognition |
| 「ポップアップを表示する」 | dialog、flyout、popup、ContentDialog |
| 「ドラッグ&ドロップ」 | drag、drop、DragDrop |
| 「設定を保存する」 | settings、ApplicationData、LocalSettings |
まずは簡単で日常的な言葉から始めます。結果が乏しい、または無関係な場合は、より技術的な表現を試してください。
2. 検索を実行する
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action search -Query "<keyword>"
検索結果には、一致度の高い型と JSON ファイルのパスを含む、ランク付けされた名前空間が返されます。
結果の スコアが低い(60 未満)、または無関係な場合は、オンラインドキュメントの検索に切り替えます。
- Web 検索を使って、Microsoft Learn で適切な API を探します。例:
Windows.*API の場合はsite:learn.microsoft.com/uwp/api <capability keywords>Microsoft.*WinAppSDK API の場合はsite:learn.microsoft.com/windows/windows-app-sdk/api/winrt <capability keywords>
- ドキュメントのページを読み、ユーザーの要件に合う型を特定します。
- 型名がわかったら、戻って
-Action membersまたは-Action enumsを使い、正確なローカルシグネチャを取得します。
3. JSON を読んで適切な API を選ぶ
上位の検索結果にあるパスのファイルを読みます。JSON には、その名前空間のすべての型と、完全なメンバー、シグネチャ、パラメーター、戻り値の型、列挙値が含まれています。
ユーザーの要件に合う型とメンバーを読んで判断します。
4. 公式ドキュメントで背景情報を確認する
キャッシュにはシグネチャのみが含まれており、説明や使用方法に関するガイダンスはありません。説明、例、注記については、Microsoft Learn で型を調べてください。
| 名前空間のプレフィックス | ドキュメントのベース URL |
|---|---|
Windows.* | https://learn.microsoft.com/uwp/api/{fully.qualified.typename} |
Microsoft.* (WinAppSDK) | https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/{fully.qualified.typename} |
たとえば、Microsoft.UI.Xaml.Controls.NavigationView は次の URL に対応します。
https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.navigationview
5. API の知識を使って回答するか、コードを書く
Lookup — 「API はわかっているので、詳細を教えてください」
型名または名前空間名がすでにわかっている(または心当たりがある)場合は、直接調べます。
# Get all members of a known type
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action members -TypeName "Microsoft.UI.Xaml.Controls.NavigationView"
# Get enum values
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action enums -TypeName "Microsoft.UI.Xaml.Visibility"
# List all types in a namespace
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action types -Namespace "Microsoft.UI.Xaml.Controls"
# Browse namespaces
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action namespaces -Filter "Microsoft.UI"
-Action members で得られる情報より詳しい内容が必要な場合は、-Action search を使って JSON ファイルのパスを取得し、その JSON ファイルを直接読みます。
その他のコマンド
# List cached projects
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action projects
# List packages for a project
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action packages
# Show stats
.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action stats
キャッシュされたプロジェクトが 1 つだけの場合、
-Projectは自動的に選択されます。 複数のプロジェクトがある場合は、-Project <name>を追加してください(利用可能な名前は-Action projectsで確認できます)。 スキャンモードでは、マニフェスト名の衝突を避けるため、短いハッシュのサフィックスが付加されます。曖昧さがなければ、サフィックスなしのベースプロジェクト名を指定できます。
検索スコア
検索では、クエリに対する型名とメンバー名の一致度がランク付けされます。
| スコア | 一致の種類 | 例 |
|---|---|---|
| 100 | 名前が完全一致 | Button → Button |
| 80 | 先頭が一致 | Navigation → NavigationView |
| 60 | 含まれている | Dialog → ContentDialog |
| 50 | PascalCase の頭文字 | ASB → AutoSuggestBox |
| 40 | 複数キーワードの AND 検索 | navigation item → NavigationViewItem |
| 20 | 文字のあいまい一致 | NavVw → NavigationView |
結果は名前空間ごとにまとめられます。スコアの高い名前空間が先に表示されます。
トラブルシューティング
| 問題 | 修正方法 |
|---|---|
| 「キャッシュが見つかりません」 | Update-WinMdCache.ps1 を実行してください |
| 「複数のプロジェクトがキャッシュされています」 | -Project <name> を追加してください |
| 「名前空間が見つかりません」 | -Action namespaces を使用して利用可能な名前空間を一覧表示してください |
| 「型が見つかりません」 | 完全修飾名を使用してください(例: Microsoft.UI.Xaml.Controls.Button) |
| NuGet 更新後に古くなる | Update-WinMdCache.ps1 を再実行してください |
| キャッシュが git 履歴に入る | .gitignore に Generated Files/ を追加してください |
参考資料
- Windows Platform SDK API リファレンス —
Windows.*名前空間のドキュメント - Windows App SDK API リファレンス —
Microsoft.*WinAppSDK 名前空間のドキュメント