ニュース
Microsoft、JavaScriptからWinRT APIを直接呼び出せる仕組みをパブリックプレビュー
Electron/Node.jsアプリからローカルAIや通知を利用。動的な生成で従来の不便を解消
2026年7月29日 09:50
米Microsoftは7月27日(現地時間)、「Node.js」からネイティブな「Windows Runtime」(WinRT)APIへ直接アクセスできる新しい仕組み(a dynamic WinRT projection for Node.js)をパブリックプレビューとして公開した。たとえばJavaScript/TypeScriptで記述された「Electron」アプリから最新のOS機能を利用する際も、わざわざC++/C#ブリッジなどを介する必要がなくなる。
「Electron」「Node.js」は慣れ親しんだHTML、CSS、JavaScript/TypeScriptでアプリを開発できるとして人気を博しているが、WinRT APIを呼び出すのは容易ではない。C++やC#のアドオンを介して行う場合、関連コンポーネントの管理や互換性検証が必要となるし、WinRT APIのメタデータ(WinMD)をもとにしたラッパーを参照しようにも、保守が遅れがちで最新のAPIにアクセスできないことがある。
そこで今回、「WinMD」から動的にJavaScript/TypeScriptのラッパーを生成する仕組み(プロジェクション)が導入された。
このプロジェクションは、以下の3つの「npm」パッケージから成る。
- @microsoft/winappcli:Windowsアプリの開発に必要なSDK管理やパッケージング、アプリID・マニフェスト・証明書の生成などを、さまざまなフレームワークから扱えるようにするコマンドラインツール「Windows App Development CLI」(winapp CLI)
- @microsoft/dynwinrt-codegen:「WinMD」メタデータをもとにJavaScriptラッパー(.js)と対応するTypeScript宣言(.d.ts)を生成
- @microsoft/dynwinrt:アプリの実行時にWindows API呼び出しをディスパッチ(割り当て)するビルド済みのx64/arm64ランタイム
ユーザーがインストールするのは「@microsoft/winappcli」のみでよい。「dynwinrt」のコード生成とランタイムも同時に導入される。既存の「Electron」アプリへ導入する場合は、「WinApp CLI」をインストールしてプロジェクトを初期化すればよい。
npm install --save-dev @microsoft/winappcli
npx winapp init . --use-defaults --add-js-bindings
「winapp init」を実行すると、マニフェストの作成やSDKのセットアップ、必要パッケージの追加が行われ、「.winapp/bindings/」以下にJavaScriptラッパー(バインディング)が生成される(実験的な位置付けながらPythonバインディングも備える)。もし「WinMD」に変更があっても、ブリッジやラッパーのアップデートを待つ必要はない。バインディングを再生成するだけで変更に追従できる。
つまり、このプロジェクションがあればJavaScript/TypeScriptとWinRT APIの橋渡しが可能。WinRT APIが提供する以下のOS機能を簡単に利用できるようになるわけだ。
- オンデバイスAI:「Copilot+ PC」搭載のAIチップで「Phi Silica」モデルを実行。「Windows ML」モデルの実行も可能で、テキスト生成、要約、書き換え、テキストからテーブルへの変換、テキスト認識、画像スケーリング、オブジェクトの抽出・削除などが行える
- アプリおよびコンテンツAPI:通知、ファイル・フォルダーの選択、ストレージへのアクセス、画像デコード、さらにリッチクリップボードコンテンツ
- システムおよびデバイスAPI:ネットワーク、センサー、グローバリゼーション、暗号化アルゴリズムなど
なお、これらの一部はサンプルアプリ「Electron on Windows Gallery」で体験可能。このアプリ自身も「Electron」と本プロジェクションを用いて開発されており、ソースコードも公開されている。必ず開発の参考になるだろう。

















![1冊ですべて身につくHTML & CSSとWebデザイン入門講座[第2版] 製品画像:5位](https://m.media-amazon.com/images/I/51skMJ-OVcL._SL160_.jpg)




