mcpField
W
winmd-api-search

winmd-api-search

github.com/github開発40.5k5.7k 回インストール今日更新
リポジトリ

winmd-api-search について

winmd-api-searchは、Windows APIの検索や型シグネチャの確認に使う開発者向けスキルです。ローカルのWinMDメタデータキャッシュを検索し、Platform SDKとWinAppSDKを標準でカバーします。

主な機能

  1. 01API名とメンバーの検索
  2. 02型シグネチャと列挙値の確認
  3. 03名前空間、プロジェクト、パッケージの一覧
  4. 04SDK、NuGet、プロジェクトのWinMDメタデータ索引

活用シーン

  1. 01Windows機能に対応するAPIの特定
  2. 02コーディング前のメンバー確認
  3. 03列挙値の参照
  4. 04プロジェクトで利用可能なAPIの調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/github/awesome-copilot --skill winmd-api-search

インストール後、Claude Code で/winmd-api-searchを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE.txt
scripts/
Invoke-WinMdQuery.ps1
Update-WinMdCache.ps1
scripts/cache-generator/
CacheGenerator.csproj
Directory.Build.props
Directory.Build.targets
Directory.Packages.props
Program.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 未満)、または無関係な場合は、オンラインドキュメントの検索に切り替えます。

  1. 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>
  2. ドキュメントのページを読み、ユーザーの要件に合う型を特定します。
  3. 型名がわかったら、戻って -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
50PascalCase の頭文字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/ を追加してください

参考資料

コメント