Posts Tagged ‘WinRT’
DevSumi2012 OpenJam codeseek – Metro アプリ
Developers Summit 2012 にて、codeseek 枠で OpenJam セッションしてきました。
事前告知すっかり忘れていて、当日、直前くらいに twitter でつぶやいた程度、本セッションがたくさんある裏でのセッションだったわけですが。その割に、常時20名超、延べだと40名程度お越しいただけたようです。ありがとうございました。
OpenJam 運営の方の手により、録画&YouTube 公開されています。
スライドも、SkyDrive にアップロードしました。
https://skydrive.live.com/#!/view.aspx?cid=5C622397E11C979D&resid=5C622397E11C979D%214035
ちなみに、「100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊」にも寄稿していたりします。ほんとに名著が並ぶ中、自著(を書くにあたって込めた思いをつづっただけ)だったりしますが…
Windows 8時代のGUI開発/Windows 8時代の.NET
金曜日に、@ITで以下のような記事が公開されました。
そして、Silverlightを囲む会で以下のような発表をしてきました。
1万字程度の原稿に加えて、25分間のプレゼン発表って、何この学術発表スタイル。
公約数 VS プラットフォーム固有?
さて、お気づきかもしれませんが、実はこの話には落とし穴が一つありまして。公約数VSプラットフォーム固有という構図でお話しましたが、ここはほんとに対立すべきかという点。
原理的には、公約数な.NETがあってもいいと思うし、プラットフォーム固有なHTML5があってもいいはずなんです。それが、政治的な理由で分断されている。
プラットフォーム固有なら、Silverlightはまだまだ現役です。しかし、世の中の多くは公約数で十分というのも事実。
ギャップ問題
問題は、この2者の間に大きなギャップがあることなんですよねぇ。まさに、90年代のVB VS C++の構図そっくり。大半の案件はVBで十分だけど、あるラインを境にVBは破綻する。しかし、ギャップがある故にC++への移行はムリ。
開発者はVBの方が多く、案件も徐々にVBが増える。しかし、製作単価は据え置きで、破たんするラインを越えても同じ安いお値段で使われる。
そんな時代がありました。
製作単価安いから
そこに来て、こんなブログ記事もあるわけですよ。
比較項目の一番下、代理店の利益のところ。「製作単価が安いから」という理由で○が付いています。HTMLの方が開発者の単価安くてお得だと。つまるところ、ギャップを越えれない人を安く使う構図。破たんするライン(Canvas 使って高度なグラフィック表現してとか、WebGLを使って3D作ってとか)を超えてもお値段据え置きになりそうな恐怖。
時代はどこまでも繰り返すのか。
繰り返すのか…
かつて、VBを少しC++に寄せてC#を作ったように、HTML5をXAMLに寄せたような世界が来るんですかねぇ。
そしてそれは、標準ベースであり得るのか。
WinRTで、C++や.NETで作ったコンポーネントをJavaScriptから参照できるようにしてあるのは、1つの解決策ではあるんでしょうけども。
WinRT に関する誤解
まあ、ます先に、ダウンロード リンク一覧を
- Microsoft Visual Studio 11 Developer Preview (ISO)
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=415c1589-a7b1-4b25-93fa-11bb6f29a5be - Microsoft Visual Studio 11 Developer Preview (Web インストーラー)
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=99a58e56-fcb2-4264-bce7-3311cf0d1806 - Microsoft Visual Studio Team Foundation Server 11 Developer Preview
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=00b0d743-3c1a-40c3-b987-1b359f5ecc95 - Microsoft Visual Studio Agents 11 Developer Preview (ISO)
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=b31a460e-0420-4f62-8be6-e8ea814955e3 - Microsoft Visual Studio 11 Developer Preview リモート デバッガー
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=41b0f943-73a2-4924-89c2-95ef131925a3 - Microsoft .NET Framework 4.5 Developer Preview – 完全版
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=df739e1d-a2cb-4c44-a1a9-a6767b10d591 - Microsoft .NET Framework 4.5 Developer Preview – Web インストーラー
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=c78546a3-7906-44e8-a201-996b5e5c8198 - Microsoft .NET Framework 4.5 Developer Preview Language Pack
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=3aa87f95-340d-4741-b1f2-9970bac7f9cc
で、やっぱいろいろと誤解されてるなぁ。
【×】 HTML5+JavaScript で書かなきゃいけないのかな
今現在、.NET のスキルを持っている人が HTML5 で Metro アプリを書くメリットはほとんどないと思います。
逆に、今現在、HTML5 のスキルを持っている人なら、HTML5 で書く。
「両方できるけどしいて言うなら?」と聞かれたなら、まあ…
Anders Hejlsberg の Future directions for C# and Visual Basic で、Anders が、「JavaScript にあってうれしいものは、全部 C# にもあってうれしいよ」みたいなことを言った瞬間、会場が大喝采。
そして、WinRT は非同期 API だらけになります。処理に50ミリ秒以上かかる(可能性のある)ものは、基本的に非同期 API しか提供されないそうです。そのタイミングで、C# 5.0 の async が来る。.NET にだけ強いアドバンテージがあります。
【×】 Metro 版 IE でプラグインが使えないのは Adobe 排除だ
Adobe とマイクロソフト、密にやり取りして、Metro 版 AIR を作ってるんですって。
ブラウザー プラグインの時代は終わった(実際に終わるのはだいぶ先のことだと思いますが)ってことですかねぇ。
デスクトップ版の Silverlgiht も、どんどん Out of Browser 方面で強化されてますし。要は、デプロイが楽な Windows デスクトップ アプリ扱い。
ちなみに、デスクトップ版の IE は今までどおりです。ある日突然ブラウザー プラグインがなくなることはありえないです。
余談になりますけど、Youtube は普通に HTML5 video タグで動画が見えるみたいですねぇ。
【×】 C++/CLI かよ。WinRT は CLR か?
違うよ、全然違うよ。
WinRT はネイティブです。
.NET 側/ JavaScript 側から見て
.NET 側から見ると、普通に .NET のクラスに見えるネイティブです。
今までの P/Invoke とか、COM の ref Type.Missing 地獄がないのがいいところ。
なんかところどころ、規約ベースの暗黙的な型の置き換えやってますねぇ。WinRT 側だと IVector っていうインターフェイスが、.NET 側からは .NET 標準の IList に見えたり。
.NET 側で作ったクラスを C++ や JavaScript 側から使いたければ、いくつかのルール守れとか。ちなみに、ルールは例えば、
- public なクラスは sealed にしろ
- public なプロパティ、メソッドなどで使う型は WinRT 上で定義されているもの(と、それに暗黙的に変換できるもの)だけにしろ
- 構造体使うなら、public なフィールドだけにしろ
等々。
C++/CX
C++ 側、パッと見、C++/CLI に見えるデモ コード、実は C++ Component Extension (C++/CX)っていうらしい。
仕組み的には、ビルド時に標準 C++ なコードを生成するような感じで、WinRT の呼び出しコストはほとんどない(単に仮想関数呼ぶだけというレベル)とか。
TOOL-690: Under the covers with C++ for Metro style apps を参照:
ほぼ C++/CLI だけど微妙に“似て非なる”感あるのが嫌すぎるものの、.NET のクラスを呼び出すようなコストがかからない点は素敵。
WPF とはなんだったのか
ずっと WPF やってきた人間からすると、WPF で苦しみもがいて頑張ってたことが、ようやく実を結びそうだなぁという感慨深い気持ちなわけですが。
知らない人から見たら、「また既存技術捨てて新しいもん作るのかよ」にしか見えないのかなぁ。残念。
Windows 8 でしか動かないんだったら WinRT なんて流行るわけないよ
そんないきなりの置き換えを狙ってるわけないし。
各社 HTML5 推しだけど、IE6 がいまだ数%現役なのと一緒で、「WinRT 推しだけど、延々と Win32 が残る」みたいなもんだと思えば。
つくづく、iPhone の良さは、Mac 低迷期に既存のしがらみ捨てて作り直されてるとこだなぁと思う。
Windows 8、WinRT
BUILD、まだ基調講演くらいしか見れていませんが、それだけでもなかなかに素敵。
そして、公開されて間もないWindows 8の開発者プレビュー、さっそく使ってみているわけですが。
WinRT
開発者的に気になっていたのは、うわさのWinRT。
コードネームとかじゃなく、正式名称的にもこの名前でよかったわけですが、実物見るとなかなかに楽しそう。
Metroアプリ vs 既存デスクトップ
開発スタイル的には全く別系統でした。いわば、Silverlight と WPF みたいなもの。
- Metro アプリ
- タブレット向け、タッチUI
- たぶん、ARM版で快適に動かそうと思ったらこっち
- App Storeで配布できるのはこっちだけ
- WinRTを使って作る(ネイティブ、.NET、JavaScriptから使える)
- 感覚的に、一番近いのはWindows Phone 7向けSilverlight(が、.NET 4.5相当のクラスいろいろ取り入れた感じ)
- 既存デスクトップ
- まんま、今まで通り
- Win7タブレットを触ったことがある人なら、タッチに向かないことはご存じのとおり
- OSのかなり低層に触れてない限り、XPとかのアプリもバイナリそのままで動くのではないかと
- App Storeで配布できない(そもそもARM版で動くの?動くには動くみたいだけど、快適か?過去のアプリがどこまで互換性ある?)
- .NET Framwork 4.5が出ました
- WPFも強化されています
WinRTと.NET Core
さて、そもそもWinRTとは
- Win32の置き換えで、COM(の焼き直し)なネイティブAPI
- .NETから見ると、普通に単なる.NETのクラス ライブラリに見える(P/Invoke不要)
- ちなみに、名前空間はWindowsから始まる
- HTML5+JavaScriptなMetroアプリからも呼べる(まあ、昔でいうActiveXみたいな状態)
- クラスやメソッドの設計もかなりきれい。たとえばUI層なら、WPFを再設計した感じ
- どのクラスがどの名前空間にあるかはかなり再整理されてる
- たとえば、INotifyPropertyChangedはWindows.UI.Xaml.Data名前空間
- UIはXAMLで記述
- C++からもXAMLが使える
- コピペで動くレベルでかなりSilverlightなXAML
- サンドボックス化されてて、App Storeに登録するにあたって「このアプリはネットワークを使います」みたいなのが全部申告される
それで、ですよ。問題は、実は .NET Framework が2系統に分かれます。
- .NET Core: WinRT、つまり、Metroアプリから使える .NET
- パッと見た感じ、今現在 Portable Library で使える範囲(どこまで一緒かは要検証)
- async/awaitは使える状態になってる
- Metroアプリ = .NET Core + WinRT なので、感覚的には非常に Silverlight for WP7 に近い
- WinRTとの連携のために、メタデータの読み込み部分あたりに手が入ってるっぽい
- パッと見た感じ、今現在 Portable Library で使える範囲(どこまで一緒かは要検証)
- .NET Framework 4.5: デスクトップ版。
- 要するに、現在の .NET Framework の新バージョン
- 仮想マシン的には .NET 4 のものと一緒。ライブラリの追加
- async/awaitのための拡張(Task.GetAwaiterとか)
- TPL Dataflow 追加
- その他、WPF, WCF, WF なども色々更新あり
今の、Out-of-browser Silverlight VS WPF な構図とあまり変わらなかったり。
今から備えるMetroアプリ
WPFやSilverlightで、Portable Library使ってモデル書いてれば、かなり低コストで移行可能かと。
Windowsフォーム?てめぇはダメだ。(モデルに関してはそこまでダメでもないけども。)
Portable Libraryを使った開発については以下のスライド参照(Silverlightを囲む会で発表したもの)。
経験的には、コピペまで認めるなら、90%くらいコード共有可能。
これからのXAMLアプリ?
さて、ここからは推測まじり。
WPFとSilverlightとWinRTとWindows Phone 7と。9割方コピペで作れるXAMLファミリーがまた増えました。
まあ、世の中いきなり移行できるものなら幸せですよ。
WinRT は今のところ、Metroアプリ専用、つまり、ターゲットはタッチ操作UI。
(今の開発者プレビューで、「今のままだとマウスで使えた代物じゃねーよ」ってフィードバックが入りまくって、製品版までには、マウスとキーボードでもMetroアプリを快適に使えるようになる可能性も高いですが。)
据え置きPC
当然、現状のPCはマウスとキーボードが前提で、タッチ操作に最適化されたアプリだとかえって使いにくい。
なので、当面、引き続き普通にデスクトップ アプリ(WPF とか、OoB Silverlight とか)を書くことになると思います。そして、WPFとSilverlight、どっちがいいの?という悩みも消えません。両方に対して、引き続き改善が入っています。
とはいえ、Metroアプリがあることによって、タッチ操作な新入力デバイスが流行ってくれるかも。それに、Kinectにも期待。
タブレットPC
Atom搭載なタブレットは、たぶん、Metroアプリもデスクトップ アプリも両方動きます。
ただし、デスクトップ アプリの場合、右クリックがない前提でアプリを書かないと、タブレットでの利用はきつい。マウスでも使えて、タッチでも使えるぎりぎりの妥協案はリボンUIかもしれない(リボン化された Explorer を見ていて)。
ARM版は、ひょっとしたら、Metroオンリーで考えたほうがいいのかな?
タブレットPCからリモート デスクトップ接続
今後、増えていきそうな利用方法として、外出時にはノートPC持たず、タブレットのみ持ち歩き、そのタブレットからリモート デスクトップ接続して仕事ってのが考えられます。
サーバーOSであるWindows Server 8にすらMetro UIが搭載される理由。
こういう利用方法を考えると、「据え置きPCがターゲットだから、マウス前提でいいや」とは言いづらくなると思います。上記のとおり、マウス前提なんだけども、ぎりぎりタッチ操作できるUIを考えなきゃいけないという極めて面倒な事態に…
携帯電話
今回の発表を見て一番不透明(言及なし)なのはこれ。
Metroアプリは、Windows Phone 7アプリを参考に作られてるっぽい雰囲気なので、Windows 8上で現状のWindows Phone 7アプリを動かすのもそんなに苦ではなさそうな。
マイクロソフトの出している求人情報によれば、今、Windows Phone 8 と Windows 8のアプリ開発モデルの統合を研究中だそうで、Windows Phone 8が出るころには本当に統合されるかも。
ちなみに、上記の WinRT の説明のとおり、Windows Phone 7 のアプリから WinRT への移植はかなり簡単だと思います。
Windows 7以前
WinRT、Windows 8の上に載っている形になっているので、Windows 7にも拡張ランタイムとして載せれそうなもの。というか、うわさだと載せる?
Visual Studio 11
で、Visual Studio も開発者プレビューが出たわけですが。
11って数字は内部バージョン番号ですね。2005→8、2008→9、2010→10。なので、次は11。2011年中に出るって意味ではないです。時期はいまだ名言されていないので、2012とも限らず。まあ、大方の予想では2012年の春から夏にかけてだと思われていますが。
VS11単体ダウンロードもできるみたいですね。MSDNサブスクライバー向けにはすでにダウンロード提供されていて、一般にも数日中に公開予定。
Windows 7にもインストール可能です。ただし、この場合はMetroアプリの開発はできないみたいです。WinRTを触ってみたければ、Windows 8でないとダメっぽい。
普通に、次期バージョンのC#(async/await)を試してみたいだけとかならWindows 7へのインストールでいいと思います。