9月 15th, 2011のアーカイブ
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へのインストールでいいと思います。
C#でゲーム開発
また思い切ったなぁ。
まあ、アメリカだと日本ほどXboxもXNAも不人気ではないというか、普通に任天堂/Sonyといい勝負ですしねぇ。
そういや、最近、Unity もすごい勢いで利用者伸びてるそうで。 GREE のせいか!まあ、タイミングが良かったんでしょうねぇ、日本展開してた時期に、ちょうどスマートフォンが伸びてたんで。
Unity、クロスプラットフォームでやってるとやっぱりプラットフォームごとの癖でかなり悩まされるんですけども、まあ、ないよりはだいぶマシですねぇ。
あとは、Windows Phone 7どうなるかなぁ。普通に初代Xboxよりハードウェア性能よく、Xboxに載ってるCPUよりは、WP7のARMの方がまだ.NETの仮想マシンと相性よく。それでXNAが動くんだから、普及さえしてくれればいいゲーム機だと思うんですけども。
コンシューマー機が支配的だったころ、やっぱ日本でゲーム作りって言ったらNintendo DSだったわけで、メモリ4MB環境でC言語で組み込み開発な感じでした。
それが、急激にスマートフォン市場が伸びたとはいえ、ここまで一気にC#みたいな高水準言語が伸びるとは、2年も前には想像しなかったですねぇ。
もちろん、実機の方じゃなくて、社内ツールなんかでは結構C#使われてたんですけどもね、日本のゲーム会社でも。
意外と知られてない?
そういや、Twitterで話題に出てたんですけど、意外と知られてないようで:
UnityはMono
UnityはMonoを使っているっての、意外と知られていないとか。
MonoはクロスプラットフォームなC#クローンです。
C#は当然まあ、Mono版C#なわけですけども、JavaScriptもいわば、JScript.NETみたいなものだそうで、Mono。
C#は標準化されてる
なんか、マイクロソフトだからというだけでクローズドなイメージ持たれるようですが、C#はいろんなとこで標準化されています。
- Standard ECMA-334 C# Language Specification
- ISO/IEC 23270:2003 C# Language Specification
- JIS X 3015 プログラミング言語C#
というか、あれだけプロプライエタリであることが警戒されると、何やるにしてもまず仕様をオープンにして、標準化しないと誰も使ってくれないんで、2000年代に入ってからは逆にむちゃくちゃオープンな会社。
一方、Javaの方こそ、標準化一切してないんですよねぇ。そのくせ、いろんなベンダーがJava実装持ってる(元締めたる、旧SUN、現Oracleによる検証があるんだっけ?)のが恐ろしい限り。