UWPとWin32のギャップをなくそうとしているMicrosoft


Build 2019 の期間前後でやっぱりKevin Gallo から情報が出てきたこの話。ZD Net で日本語訳として記事になっていますね。まずは発表の大枠はこれで捉えられますね。

UWPとWin32のギャップをなくし”Windowsアプリ”に?–MS幹部が方向性など語る

それについて自分なりに、解釈してみました。というのもこれを理解するのには、UWPとWin32アプリの違いとか、これまでの経緯とかそういうのが結構いろいろ知識として必要だったりするんですよね。

UWPとWin32のギャップって?

そもそも、ここで Microsoft が言っている「UWPとWin32のギャップ」というのは、「UWPはWindows 10の新機能をアプリでもそのまま使えるけど、WinFormとかWPFとかWin32アプリでは、使えないんだよね。」と言うこと。

なので「ギャップをなくす」というのは、言い換えれば「できる限りWin32アプリをそのままの形態を保ちつつ、Windows 10の機能を使えるようにする」ということですね。 で、Windows 10 の機能を使うための仕組みはすでにUWPで出来上がっているので、最終的にまとめると「Win32アプリから、すんなりUWPの機能を呼べるようにしよう」ということに、これが多分「ギャップをなくす」ためにやろうとしていること。

なので、たぶんWin32のセキュリティ的な部分とかに触れているわけではないと思う。このへんは MSIXかその先の進化系、まぁ全部コンテナの上で動かすという方法でやるんでしょうね。

Xaml Island

そんでもって、まず去年打ち出してきたのが Xaml Islandという技術。

「WinForm や WPFから、XAMLにアクセスできるようになる」とか描いてあったりしますが、「おいおいWPFはもともとXAMLやないかい!」という突っ込みが当然あるので、正確に言えば UWPの コントロールにアクセスできるようにする仕組み。実際名前も UWP XAML Island なんだよね。まぁラッパーというか、HWNDを持つ独立したUWPホストの小型ウィンドウですよね。

実際に Windows Community Toolkit v5.0 で実装サンプルが公開されていますが、上で言う小型ウィンドウにあたる WIndowsXamlHostコントロール上で、いくつかのUWPで使えているWindows 10の機能を使ったコントロールが使えるようになっている。WebViewを使えば Edge のエンジンを使ったWebコンテンツを表示できる。

今度はサードパーティー製のDLL?

ZDNetの記事にはこの辺の件が書いてい無い様に見えるのですが、ブログにはそれっぽいことが書いてあります。

「Windows 10 1903では、これまで UWP かUWP パッケージ化したアプリでなければ使えなかった、サードパーティ製(ユーザーが作成した)UWPのコンポーネントを、UWP パッケージ化していないアプリ≒ Win32アプリ?から呼べるようにしました」というのが新しい発表。

こんな感じ?、なんで今度はUWPの標準UWPコントロールだけじゃなく、誰かが作った UWPのコンポーネントも Win32 からそのまま呼べるようになるよ、ということのように見えます。

そのために、新しい宣言を アプリケーションマニフェストに書く必要はありますが、マニフェストファイルなので本体への影響は皆無です(勿論利用するためのコード実装は必要w)

結局?

結局まとめるとこんな感じなのでしょうか?間違ってたら誰か指摘お願い。

Win32からUWPのAPI呼べるようにしよう!

  1. UWPのコントロールを呼べるようにしよう→Xaml Island
  2. サードパーティ製のコンポーネントも使えるようにしよう→ 1903

ということでしょうかね。

この話に関係ない人

なので、これってWin32アプリをどうこうしようとしている話なのでUWPアプリ開発者にとってはなんにも関係ない話です、多分。

追記:なるほど、UWPのコンポーネントを作っている人にとっては、それをWin32アプリの開発者に使ってもらえる、という意味では確かに関係ある話ですね。お客さんが広がるということです。山本さんありがとうございます。

また、Win32アプリを開発している方でも「特にWindows10の新機能を使う予定はなし」というのであればまぁ特に気にすることはないわけで。

それよりもWin32アプリを開発されている方は今後統一されそうな、MSIXへうまく対応できるのか、そのへんを見ておくほうが良いような気がします。IntuneとかでもWin32ネイティブよりも先に対応してたり、UWPも巻き込むみたいなのでして結構本気ですから。

改めて誰得?

なので考え得る対象者はwindows10の機能をWin32アプリに取り込みたい開発者。

では使いたいWindows10の機能やコントロールってなんだろう?って考えたときに、はじめに思いつくのがやっぱりEdgeのエンジンを使える、WebViewコントロール。しかし、そう思っていた矢先にEdgeのChromium対応が発表され、更にはIE11モードも内包するとまで出てきて「今後WebControl や WebViewコントロールはいったいどのエンジンで動くのかしら?」と混迷の予感。(仕様発表されれば問題解決ですが)

他で考えたらペン対応、Windows Hello対応などがまず挙げられると思います。

これがあったらいいのに、って考えてみると3Dモデルを表示して動かすためのコントロールなどが出てくると使いたくなるかもしれません。もしくは機械学習したモデルONNXをアプリで使えるWinMX など。もしかしてこれはコンポーネント化したら1903から使えるのか?

追記:かずきさんが作ってできたって!記事はこちら。

まぁ、1つでもちょっと使ってみたい、ってときにWin32のコントロールやサードパーティ製のコントロールを追加する間隔で、UWPのコントロールやコンポーネントを使えるなら勿論素晴らしいです。そう考えればギャップは確実に縮まっています。

UWPは?

ちなみにUWPで足りない機能の方はどうなの?というと .NET Core の拡張によって UWPで出来なかったことが少しずつ減ってきているように見えます。これもギャップの縮小といえばそうかも♪

今後の情報は?

まずは、米国マイクロソフトの Windows Blog のWindows Developer をチェックしておきましょうね。ほとんど日本語訳されることはないと思うので、個々をチェックです。英語ダメでも、Google や Bing がだいぶ賢くなったのでかなり楽になったと思いますよ。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

WordPress.com Blog.

ページ先頭へ ↑

%d人のブロガーが「いいね」をつけました。