Hatena::Groupsubtech

ういはるかぜの化学

Thursday, September 29, 2011

[][]HTML+CSS+JavaScriptで動くMetro style appsの話(実行環境周り) HTML+CSS+JavaScriptで動くMetro style appsの話(実行環境周り) - ういはるかぜの化学 を含むブックマーク はてなブックマーク - HTML+CSS+JavaScriptで動くMetro style appsの話(実行環境周り) - ういはるかぜの化学

Windows 8ではHTML+JavaScriptでネイティブ機能を使ったアプリケーションを開発できるようになるわけですが、どんな仕組みになっているのか調べたので簡単に書いてみようと思います。はじめはWinRTとは…WinMDが云々…といった感じで細かく書こうかと思ったのですがややこしいので(まとめてると調べるのが終わらない)おおざっぱに、です

あ、当たり前ですWindows Developer Previewという名の通り今後変更される可能性は多いにあるのでそこはご理解とご協力とお察しください。

Metro style apps

HTML+JavaScriptで作ることのできるアプリケーションMetro style appという新しいMetro UI対応したアプリケーションのみで、従来型のデスクトップアプリケーションを作ることはできません。

ちなみに従来型のデスクトップアプリケーションDesktop appsと呼ばれ、Metro style appのことはまれにImmersiveアプリケーションと呼ばれたりします。"Immersive"は「没入型の」ということですね。Building Windows 8ブログにしばしば出てきますし、API名前などは大体MetroではなくImmersiveと書かれています

そんなMetro style appはHTML+JavaScriptであろうと、C++であろうと、C#であろうと…WinRTと呼ばれるWindowsの新しいAPIセットの上で動きます。というよりMetro style appはWinRTの上以外では動きませんし、逆にWin32 APIも(一部を除いて)利用できません。

実行環境

さて、HTML+JavaScriptでもMetro style appを作れるということですがどんな形で動くのかというとこんな感じになっています

f:id:mayuki:20110929030756p:image:w640

HTML+JavaScriptでアプリケーションが作れて動く、といったところでいきなりWindowsが直接解釈できる実行形式になるわけではありません。

WWAHost.exeというWindowsの実行アプリケーションがあり、その中にInternet ExplorerTrident(レンダリングエンジン)とChakra(JavaScriptエンジン)が組み込まれています。そしてWWAHost.exeHTML+CSS+JavaScriptを読み込んでレンダリングエンジンJavaScriptエンジンを使ってアプリケーションとして動かすという形になっています

mshta.exeとかちょっと懐かしいですね(ほろり。

WWAHost.exeはただInternet Explorerエンジンを組み込むだけでなく、JavaScriptエンジン協調してWinRTのクラスライブラリJavaScript側へ公開してくれます。その結果JavaScriptからWinRTつまりWindowsネイティブ機能などを扱うことができるようになっているという感じです

たとえばwindowオブジェクト(グローバル)にWindowsなどが生えていて、Windows.Storage.KnownFolders.picturesLibrary.createFileAsync(...)といった感じで呼び出すことができるようになっています

アプリケーションの構成的はだいぶおおざっぱですがこんな感じですね。これに加えて周辺技術にWinRTをはじめとしてパッケージングのAppXやWinJSなどがあるのですがまあそれはまた後で書くかもしれません。

WinRTってなに

今までのWindowsではアプリケーションを作るためのAPIとしてWin32 APIというもの提供されていましたが、Metro style appのために新たにWindows Runtime(WinRT)というAPIというかライブラリ提供されています

WinRTはファイルデバイスネットワークなどへのアクセスといった様々なOSネイティブ機能オブジェクト指向的に整理して構築し直したものです。さらにネイティブライブラリでありメタデータを持つ規約のようなものでもあるので、C++C#JavaScriptなどさまざまな言語に公開できるようになっているのが特徴です

Windows Runtimeという名前です.NETCLR(Common Language Runtime)のような仮想マシン実行環境を持っていません。その意味では実装形態は問わずさまざまな言語から使うことを考慮した点など従来のCOMにだいぶ近いものといえそうです

トラックバック - http://subtech.g.hatena.ne.jp/mayuki/20110929