Transcript
Page 1: Metro Style AppsでMSIL

Metro Style Appsで MSIL

terurou

Page 2: Metro Style AppsでMSIL

自己紹介

Page 3: Metro Style AppsでMSIL

自己紹介

どうもこんにちわ、 terurou です。

Page 4: Metro Style AppsでMSIL

DSTokaiの管理人やってます。

• 東海地方のメタコミュニティ

– IT系イベント情報の共有

–複数コミュニティへの共通連絡窓口

–DSは「でら すたでぃー」らしいです

–http://go.dstokai.info/

• クロスコミュニティイベントの企画

–NGK:名古屋 合同 懇親会

Page 5: Metro Style AppsでMSIL

Web技術を広く浅くやってます。

• フロントエンド

–JavaScript, Android, Silverlight

–最近 Metro Style Apps始めました。

• バックエンド

–Cassandra, 自作KVS, AWS

• フロント寄りのアーキテクチャ設計を割と得意としてます。

Page 6: Metro Style AppsでMSIL

今日のネタについて

Page 7: Metro Style AppsでMSIL

MSILネタを話すと宣言したものの…

MSILネタって、半年程前のイベントで桜花っていう幼女っぽい人が話をしてたじゃないですか、やだー

Page 8: Metro Style AppsでMSIL

マジで何を話すんや…

とりあえずプログラムを確認するためにML名古屋の告知ページを開いてみたら、

あなたの知らない世界セッション

っていうのに分類されていた。

Page 9: Metro Style AppsでMSIL

あなたの知らない世界

誰も思いついてもやろうとは思わないやったことのないネタを話せばOKと、 解釈致しました。

行間を読む力、 この業界では重要ですね。

Page 10: Metro Style AppsでMSIL

ということで

Metro Style AppsでMSILをごにょってEXE(.NETアプリ)を生成します。

Page 11: Metro Style AppsでMSIL

Metro Style Appsとは?

Page 12: Metro Style AppsでMSIL

Metro Style Apps

• Windows 8から導入される 新しいアプリケーションの種別

–旧来型アプリ=Desktop Apps

Page 13: Metro Style AppsでMSIL

Metro Style Apps

• WinRTという新たな基盤上で動作

• タッチ操作や視認性を強く意識

–カクカクして大きなボタン(タイル)

–単一色塗りつぶし

–大きな余白 など

• Windows Storeからインストール

–Store以外からのインストールはできない

• 拡張子は .appx

Page 14: Metro Style AppsでMSIL

WinRT

• Metro Style Apps専用API –MetroでWin32 APIは叩けません。

–Win32 APIはMetro用のサブセットです。

– .NET APIもMetro用の別物を使います。

• いろんなものが非同期API –File I/O APIとかDialogとか

• サンドボックスモデル –ユーザの同意なしでは全てのファイルや

デバイスを自由に触らせてくれません。

Page 15: Metro Style AppsでMSIL

WinRT

いろんな言語で開発できます。

• C++

–ゲーム開発ではこれ一択?

• .NET(C#, VB.NET)

–F#は今のところ無理だかんな。

• HTML/JavaScript

–少し検証したけど、個人的にはないわー

Page 16: Metro Style AppsでMSIL

MSILとは?

Page 17: Metro Style AppsでMSIL

MSIL

• CLI(.NETのVM)用の機械語

–コンパイルするとCIL用のバイトコードに

• MicroSoft Intermediate Language

– Intermediate Language = 中間言語

• ECMA CIL(Common IL)としても標準化されている

–MSILはCIL準拠/拡張という位置づけ

Page 18: Metro Style AppsでMSIL

Metro Style AppsでMSIL生成

Page 19: Metro Style AppsでMSIL

Reflection.Emit!

• .NETでMSILといえばReflection.Emit

–Reflection.Emitを使うとプログラム内で動的にMSIL/バイトコードを生成できる。

• さっそくコードを書こう

Page 20: Metro Style AppsでMSIL

Reflection… Emit…?

• AssemblyBuilder#Save()が 存在しない…だと…?

Page 21: Metro Style AppsでMSIL

Reflection.Emit 終了のお知らせ

• AssemblyBuilder#Save()がないと EXEを動的生成できない。

• ドキュメントやAPIを漁ってみたけど、それっぽい代替APIも存在しない。

• 本当にありがとうございました。 Reflection.Emit先生の次回作にg

Page 22: Metro Style AppsでMSIL

そんなところに颯爽とMono.Cecilが!

Page 23: Metro Style AppsでMSIL

Mono.Cecil

• Cecil is a library written by Jb Evain to generate and inspect programs and libraries in the ECMA CIL format.

• 要はCIL(MSIL)をごにょごにょする素敵ライブラリ。

Page 24: Metro Style AppsでMSIL

Mono.Cecilの採用事例

• Mono Debugger

–Cecil自体がMonoプロジェクトだしね。

• ILSpy

– .NET逆アセンブリツール

–SharpDevelopのグループが作ってます。

• 各種weaving/AOPツール

Page 25: Metro Style AppsでMSIL

てか、そもそも

• 1か月ぐらい前まで、今日のネタはMono.Cecilの紹介をする予定でした。

• そう、WDDに行くまではね。

–WDD:Windows Developers Days

Page 26: Metro Style AppsでMSIL

MetroでMono.Cecilを使う

「NuGet(*)したら一発だよねー」

「…?」

「CecilのDLLがMetroプロジェクトで 参照できない…。」

「そういえば思い当たる節が…。」

(*)NuGet:.NETのパッケージマネージャ

Page 27: Metro Style AppsでMSIL

WinRT

• Metro Style Apps専用API –MetroでWin32 APIは叩けません。

–Win32 APIはMetro用のサブセットです。

– .NET APIもMetro用の別物を使います。

• いろんなものが非同期API –File I/O APIとかDialogとか

• サンドボックスモデル –ユーザの同意なしでは全てのファイルや

デバイスを自由に触らせてくれません。

Page 28: Metro Style AppsでMSIL

MetroでMono.Cecil使えないけど

• OSSだし改造したらいいんじゃね? .NETだし簡単に移植できるんじゃ。

• あまり簡単じゃないけど移植できた!

Page 29: Metro Style AppsでMSIL

Mono.Cecil for Metro 改造点

• Metro Style Apps用の.csproj作成

– .NET用プロジェクトと共通化できない

• Type型のAPI差異を埋める

–GetTypeCode(), GetTypeInfo()

• System.Security.Cryptography → Windows.Security.Cryptography

• File I/Oは今回は未実装に…。

–非同期APIへの置き換えは影響が大きい

Page 30: Metro Style AppsでMSIL

Mono.Cecil for Metro の注意点

• あくまでBeta版SDKでの話です。

• 過去の経験上、MSのBeta版SDKは 製品版と差異が結構出ます。

• 今回の改造はソース公開しません。

–製品版SDKリリースされても本家が 対応しなかったらPull Requestぐらいは送りたい気はする。

–Beta版SDK使ってるのでお察しください。

Page 31: Metro Style AppsでMSIL

デモ

• コンパイルが通ったしデモができる!

• Metro Style AppsからDesktop用のコンソールアプリを動的生成します。

–まぁHello World的なことするだけです。

Page 32: Metro Style AppsでMSIL

まとめ

• Mono.Cecilは強力なライブラリ

• 既存.NETライブラリのMetro移植は 結構めんどくさい。

–特にファイル回りは鬼門。

–Metroには存在しないAPIもあるし。

–C++でも同じことになるはず…。

• Metro Style Apps楽しい!

Page 33: Metro Style AppsでMSIL

まとめ

Metro Style Appsで EXE出力して何が嬉しいのかは 私にもよくわからないですね。

Page 34: Metro Style AppsでMSIL

ご清聴ありがとうございました


Top Related