metro style appsでmsil
DESCRIPTION
後日、最新情報に更新したスライドを公開しています http://www.slideshare.net/terurou/metro-style-appsmsilver20120609 @biacさんに誤っている箇所(Win32APIについて)を指摘いただいたので一部修正しました。ありがとうございました。TRANSCRIPT
Metro Style Appsで MSIL
terurou
自己紹介
自己紹介
どうもこんにちわ、 terurou です。
DSTokaiの管理人やってます。
• 東海地方のメタコミュニティ
– IT系イベント情報の共有
–複数コミュニティへの共通連絡窓口
–DSは「でら すたでぃー」らしいです
–http://go.dstokai.info/
• クロスコミュニティイベントの企画
–NGK:名古屋 合同 懇親会
Web技術を広く浅くやってます。
• フロントエンド
–JavaScript, Android, Silverlight
–最近 Metro Style Apps始めました。
• バックエンド
–Cassandra, 自作KVS, AWS
• フロント寄りのアーキテクチャ設計を割と得意としてます。
今日のネタについて
MSILネタを話すと宣言したものの…
MSILネタって、半年程前のイベントで桜花っていう幼女っぽい人が話をしてたじゃないですか、やだー
マジで何を話すんや…
とりあえずプログラムを確認するためにML名古屋の告知ページを開いてみたら、
あなたの知らない世界セッション
っていうのに分類されていた。
あなたの知らない世界
誰も思いついてもやろうとは思わないやったことのないネタを話せばOKと、 解釈致しました。
行間を読む力、 この業界では重要ですね。
ということで
Metro Style AppsでMSILをごにょってEXE(.NETアプリ)を生成します。
Metro Style Appsとは?
Metro Style Apps
• Windows 8から導入される 新しいアプリケーションの種別
–旧来型アプリ=Desktop Apps
Metro Style Apps
• WinRTという新たな基盤上で動作
• タッチ操作や視認性を強く意識
–カクカクして大きなボタン(タイル)
–単一色塗りつぶし
–大きな余白 など
• Windows Storeからインストール
–Store以外からのインストールはできない
• 拡張子は .appx
WinRT
• Metro Style Apps専用API –MetroでWin32 APIは叩けません。
–Win32 APIはMetro用のサブセットです。
– .NET APIもMetro用の別物を使います。
• いろんなものが非同期API –File I/O APIとかDialogとか
• サンドボックスモデル –ユーザの同意なしでは全てのファイルや
デバイスを自由に触らせてくれません。
WinRT
いろんな言語で開発できます。
• C++
–ゲーム開発ではこれ一択?
• .NET(C#, VB.NET)
–F#は今のところ無理だかんな。
• HTML/JavaScript
–少し検証したけど、個人的にはないわー
MSILとは?
MSIL
• CLI(.NETのVM)用の機械語
–コンパイルするとCIL用のバイトコードに
• MicroSoft Intermediate Language
– Intermediate Language = 中間言語
• ECMA CIL(Common IL)としても標準化されている
–MSILはCIL準拠/拡張という位置づけ
Metro Style AppsでMSIL生成
Reflection.Emit!
• .NETでMSILといえばReflection.Emit
–Reflection.Emitを使うとプログラム内で動的にMSIL/バイトコードを生成できる。
• さっそくコードを書こう
Reflection… Emit…?
• AssemblyBuilder#Save()が 存在しない…だと…?
Reflection.Emit 終了のお知らせ
• AssemblyBuilder#Save()がないと EXEを動的生成できない。
• ドキュメントやAPIを漁ってみたけど、それっぽい代替APIも存在しない。
• 本当にありがとうございました。 Reflection.Emit先生の次回作にg
そんなところに颯爽とMono.Cecilが!
Mono.Cecil
• Cecil is a library written by Jb Evain to generate and inspect programs and libraries in the ECMA CIL format.
• 要はCIL(MSIL)をごにょごにょする素敵ライブラリ。
Mono.Cecilの採用事例
• Mono Debugger
–Cecil自体がMonoプロジェクトだしね。
• ILSpy
– .NET逆アセンブリツール
–SharpDevelopのグループが作ってます。
• 各種weaving/AOPツール
てか、そもそも
• 1か月ぐらい前まで、今日のネタはMono.Cecilの紹介をする予定でした。
• そう、WDDに行くまではね。
–WDD:Windows Developers Days
MetroでMono.Cecilを使う
「NuGet(*)したら一発だよねー」
「…?」
「CecilのDLLがMetroプロジェクトで 参照できない…。」
「そういえば思い当たる節が…。」
(*)NuGet:.NETのパッケージマネージャ
WinRT
• Metro Style Apps専用API –MetroでWin32 APIは叩けません。
–Win32 APIはMetro用のサブセットです。
– .NET APIもMetro用の別物を使います。
• いろんなものが非同期API –File I/O APIとかDialogとか
• サンドボックスモデル –ユーザの同意なしでは全てのファイルや
デバイスを自由に触らせてくれません。
MetroでMono.Cecil使えないけど
• OSSだし改造したらいいんじゃね? .NETだし簡単に移植できるんじゃ。
• あまり簡単じゃないけど移植できた!
Mono.Cecil for Metro 改造点
• Metro Style Apps用の.csproj作成
– .NET用プロジェクトと共通化できない
• Type型のAPI差異を埋める
–GetTypeCode(), GetTypeInfo()
• System.Security.Cryptography → Windows.Security.Cryptography
• File I/Oは今回は未実装に…。
–非同期APIへの置き換えは影響が大きい
Mono.Cecil for Metro の注意点
• あくまでBeta版SDKでの話です。
• 過去の経験上、MSのBeta版SDKは 製品版と差異が結構出ます。
• 今回の改造はソース公開しません。
–製品版SDKリリースされても本家が 対応しなかったらPull Requestぐらいは送りたい気はする。
–Beta版SDK使ってるのでお察しください。
デモ
• コンパイルが通ったしデモができる!
• Metro Style AppsからDesktop用のコンソールアプリを動的生成します。
–まぁHello World的なことするだけです。
まとめ
• Mono.Cecilは強力なライブラリ
• 既存.NETライブラリのMetro移植は 結構めんどくさい。
–特にファイル回りは鬼門。
–Metroには存在しないAPIもあるし。
–C++でも同じことになるはず…。
• Metro Style Apps楽しい!
まとめ
Metro Style Appsで EXE出力して何が嬉しいのかは 私にもよくわからないですね。
ご清聴ありがとうございました