SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
Metro Style AppsでMSIL
ver. 2012/06/09
terurou
自己紹介
自己紹介
どうもこんにちわ、
terurou です。
DSTokaiの管理人やってます。
• 東海地方のメタコミュニティ
 – 複数コミュニティへの共通連絡窓口
 – IT系イベント情報の共有
 – DSTokaiカレンダー
 – http://go.dstokai.info/
• クロスコミュニティイベントの企画
 – NGK:名古屋 合同 懇親会
Web技術を広く浅くやってます。
• フロントエンド
 – Silverlight, JavaScript, Android
 – Tech Fielders Member(ページ消滅)
 – 最近 Metro Style Apps始めました。
• バックエンド
 – Cassandra, 自作KVS, AWS
• フロント寄りのアーキテクチャ設計を
  割と得意としてます。
今から話すネタについて
ML名古屋の発表スライドの流用です。
• ML名古屋?
 – 5/26に開催されたイベント
 – なごやこわい
• 6/1のWindows8 RPのリリースに
  合わせ、最新情報に更新しました。
このLTのゴール地点
Metro Style AppでEXE生成するよ、
デスクトップアプリ用のやつ。
過去の類似犯行
• Silverlight上でScalaプログラムを実行
 – Scala→MSIL + アセンブリバイナリ改変
• Silverlightアプリ(XAP)を動的に
  生成するWebサーバの作成
 – DSL→MSIL→XAP化
Metro Style Appsとは?
Metro Style Apps
• Windows 8から導入される
  新しいアプリケーションの種別
 – 旧来型アプリ=Desktop Apps
WinRT
• Metro Style Apps専用API
 – Win32 API と .NET Framework 共に
   Metro用のサブセットAPIとなっている。
• いろんなものが非同期API
 – File I/O APIとかDialogとか
• サンドボックスモデル
 – ユーザの同意なしには全てのファイルや
   デバイスを自由に操作できません。
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が存在しない…?
Reflection… Emit…?
がっつりAPIが削られてしまっていて、
ぺんぺん草すら生えていない…!
Reflection.Emit 完全終了のお知らせ
• Reflection.Emit(低レベルAPI)が
  隠ぺいされ、高レベルAPIのみ利用可
 – System.Linq.ExpressionTree
 – System.Dynamic
• でも、Reflection.EmitがないとEXEの
  出力/保存ができないのだけど…。
詰んだ?
そんなところに颯爽と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ツール
Mono.CecilをMetroに移植しよう
• Mono.CecilはMetroに対応してない。
 – Metro用の.NETはサブセット版だしね。
• Metro用クラスライブラリとして移植
 – 既存の.NETプロジェクトではMetroを
   ビルドターゲットに指定できないので、
   Metro用にプロジェクトを作り直す。
 – Portable Class Libraryでは多分無理。
    • Reflection APIが違いすぎる
Mono.Cecil 移植のポイント
• Reflection APIの差異を埋める
 – GetTypeInfo()への置き換えなど
• System.Security.Cryptography
  → Windows.Security.Cryptography
• File I/Oはサポートしない
 – StreamでのI/Oに限定
Mono.Cecil for Metro
• ソースをGitHubに置いておいた
 – https://github.com/terurou/cecil
 – とりあえずコンパイルを通したレベル
 – まだテストコードを移植してない
• Windows8 製品版で動作しなくなる
  可能性があるので注意。
デモ
• Metro Style AppsからDesktop用の
  コンソールアプリを動的生成します。
 – Hello World的なことするだけです。
まとめ
Metro Style Appsで
EXE出力して何が嬉しいのかは
私にもよくわからないですね。
少し真面目に利用用途を考える
• 動的生成したアセンブリをキャッシュ
 – 都度生成では性能問題が出るケースに
• Metro用DSL/コンパイラを実装
 – Metroアプリ内DSL
 – Desktopアプリの生成
 – Silverlightアプリ(XAP)の生成
    • SilverlightでXAP生成はできたので、
      9割方実現できるはず
ご清聴ありがとうございました

Más contenido relacionado

Similar a Metro Style AppsでMSIL ver.2012/06/09

開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能Masaki Suzuki
 
クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作
クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作
クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作yamahige
 
マイクロサービスとそれを支えるアーキテクチャー
マイクロサービスとそれを支えるアーキテクチャーマイクロサービスとそれを支えるアーキテクチャー
マイクロサービスとそれを支えるアーキテクチャーTsukasa Kato
 
Swiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考えるSwiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考えるTakuya Kitamura
 
20130202 ドメイン駆動設計読書会at名古屋のお誘い β
20130202 ドメイン駆動設計読書会at名古屋のお誘い β20130202 ドメイン駆動設計読書会at名古屋のお誘い β
20130202 ドメイン駆動設計読書会at名古屋のお誘い βRyo RKTM
 
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ典子 松本
 
さくらのIoT Platformを使ってみよう
さくらのIoT Platformを使ってみようさくらのIoT Platformを使ってみよう
さくらのIoT Platformを使ってみよう法林浩之
 
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けてHironori Washizaki
 
使ってみよう、WebMatrix3
使ってみよう、WebMatrix3使ってみよう、WebMatrix3
使ってみよう、WebMatrix3Narami Kiyokura
 
ちょっとした冬休み準備をしよう
ちょっとした冬休み準備をしよう ちょっとした冬休み準備をしよう
ちょっとした冬休み準備をしよう はなずきん Hana
 
210917 オープンセミナー@広島のこれまでとこれから
210917 オープンセミナー@広島のこれまでとこれから210917 オープンセミナー@広島のこれまでとこれから
210917 オープンセミナー@広島のこれまでとこれからTakuya Nishimoto
 
キャリアコンサルタント向け「企業で求められるITスキルの実態」と実践スキル向上研修
キャリアコンサルタント向け「企業で求められるITスキルの実態」と実践スキル向上研修キャリアコンサルタント向け「企業で求められるITスキルの実態」と実践スキル向上研修
キャリアコンサルタント向け「企業で求められるITスキルの実態」と実践スキル向上研修Daiyu Hatakeyama
 
X pages day発表_20141118 final
X pages day発表_20141118 finalX pages day発表_20141118 final
X pages day発表_20141118 finalFumiko Yamamoto
 
NTTデータグループウェブサイトのマルチデバイス対応
NTTデータグループウェブサイトのマルチデバイス対応NTTデータグループウェブサイトのマルチデバイス対応
NTTデータグループウェブサイトのマルチデバイス対応力也 伊原
 
東京では語れないHTML5[仮題]
東京では語れないHTML5[仮題]東京では語れないHTML5[仮題]
東京では語れないHTML5[仮題]Yu Morita
 
さくらのIoTプラットフォーム「sakura.io」を使ってみよう
さくらのIoTプラットフォーム「sakura.io」を使ってみようさくらのIoTプラットフォーム「sakura.io」を使ってみよう
さくらのIoTプラットフォーム「sakura.io」を使ってみよう法林浩之
 
非プログラマ指向学生向けのアプリ作成演習
非プログラマ指向学生向けのアプリ作成演習非プログラマ指向学生向けのアプリ作成演習
非プログラマ指向学生向けのアプリ作成演習Kimiya Fujisawa
 
LODとシビックテック
LODとシビックテックLODとシビックテック
LODとシビックテックShun Shiramatsu
 
香川支部キックオフ 香川支部について
香川支部キックオフ 香川支部について香川支部キックオフ 香川支部について
香川支部キックオフ 香川支部についてyohei iwakura
 

Similar a Metro Style AppsでMSIL ver.2012/06/09 (20)

開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能
 
クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作
クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作
クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作
 
Devsumi2013 community
Devsumi2013 communityDevsumi2013 community
Devsumi2013 community
 
マイクロサービスとそれを支えるアーキテクチャー
マイクロサービスとそれを支えるアーキテクチャーマイクロサービスとそれを支えるアーキテクチャー
マイクロサービスとそれを支えるアーキテクチャー
 
Swiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考えるSwiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考える
 
20130202 ドメイン駆動設計読書会at名古屋のお誘い β
20130202 ドメイン駆動設計読書会at名古屋のお誘い β20130202 ドメイン駆動設計読書会at名古屋のお誘い β
20130202 ドメイン駆動設計読書会at名古屋のお誘い β
 
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
 
さくらのIoT Platformを使ってみよう
さくらのIoT Platformを使ってみようさくらのIoT Platformを使ってみよう
さくらのIoT Platformを使ってみよう
 
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
新しいソフトウェアエンジニアリングのためのパターンランゲージに向けて
 
使ってみよう、WebMatrix3
使ってみよう、WebMatrix3使ってみよう、WebMatrix3
使ってみよう、WebMatrix3
 
ちょっとした冬休み準備をしよう
ちょっとした冬休み準備をしよう ちょっとした冬休み準備をしよう
ちょっとした冬休み準備をしよう
 
210917 オープンセミナー@広島のこれまでとこれから
210917 オープンセミナー@広島のこれまでとこれから210917 オープンセミナー@広島のこれまでとこれから
210917 オープンセミナー@広島のこれまでとこれから
 
キャリアコンサルタント向け「企業で求められるITスキルの実態」と実践スキル向上研修
キャリアコンサルタント向け「企業で求められるITスキルの実態」と実践スキル向上研修キャリアコンサルタント向け「企業で求められるITスキルの実態」と実践スキル向上研修
キャリアコンサルタント向け「企業で求められるITスキルの実態」と実践スキル向上研修
 
X pages day発表_20141118 final
X pages day発表_20141118 finalX pages day発表_20141118 final
X pages day発表_20141118 final
 
NTTデータグループウェブサイトのマルチデバイス対応
NTTデータグループウェブサイトのマルチデバイス対応NTTデータグループウェブサイトのマルチデバイス対応
NTTデータグループウェブサイトのマルチデバイス対応
 
東京では語れないHTML5[仮題]
東京では語れないHTML5[仮題]東京では語れないHTML5[仮題]
東京では語れないHTML5[仮題]
 
さくらのIoTプラットフォーム「sakura.io」を使ってみよう
さくらのIoTプラットフォーム「sakura.io」を使ってみようさくらのIoTプラットフォーム「sakura.io」を使ってみよう
さくらのIoTプラットフォーム「sakura.io」を使ってみよう
 
非プログラマ指向学生向けのアプリ作成演習
非プログラマ指向学生向けのアプリ作成演習非プログラマ指向学生向けのアプリ作成演習
非プログラマ指向学生向けのアプリ作成演習
 
LODとシビックテック
LODとシビックテックLODとシビックテック
LODとシビックテック
 
香川支部キックオフ 香川支部について
香川支部キックオフ 香川支部について香川支部キックオフ 香川支部について
香川支部キックオフ 香川支部について
 

Más de terurou

Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話terurou
 
自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話terurou
 
Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxeterurou
 
デンキヤギの採用の考え方
デンキヤギの採用の考え方デンキヤギの採用の考え方
デンキヤギの採用の考え方terurou
 
Vue.jsをhaxeで
Vue.jsをhaxeでVue.jsをhaxeで
Vue.jsをhaxeでterurou
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 
altJSの選び方
altJSの選び方altJSの選び方
altJSの選び方terurou
 
DataGridを自前実装する話
DataGridを自前実装する話DataGridを自前実装する話
DataGridを自前実装する話terurou
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeterurou
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集terurou
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話terurou
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話terurou
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例terurou
 
CommonJSの話
CommonJSの話CommonJSの話
CommonJSの話terurou
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
クラウドGPS(仮)
クラウドGPS(仮)クラウドGPS(仮)
クラウドGPS(仮)terurou
 
IronRuby on Silverlight っておいしいの?
IronRuby on Silverlight っておいしいの?IronRuby on Silverlight っておいしいの?
IronRuby on Silverlight っておいしいの?terurou
 
Dynamic Language による Silverlight2 アプリケーション開発
Dynamic Language による Silverlight2 アプリケーション開発Dynamic Language による Silverlight2 アプリケーション開発
Dynamic Language による Silverlight2 アプリケーション開発terurou
 

Más de terurou (18)

Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
 
自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話自社サービスでDurable Functionsを採用した話
自社サービスでDurable Functionsを採用した話
 
Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxe
 
デンキヤギの採用の考え方
デンキヤギの採用の考え方デンキヤギの採用の考え方
デンキヤギの採用の考え方
 
Vue.jsをhaxeで
Vue.jsをhaxeでVue.jsをhaxeで
Vue.jsをhaxeで
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
altJSの選び方
altJSの選び方altJSの選び方
altJSの選び方
 
DataGridを自前実装する話
DataGridを自前実装する話DataGridを自前実装する話
DataGridを自前実装する話
 
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxeオブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
オブジェクト指向の皮をかぶった関数型プログラミング言語 Haxe
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
CommonJSの話
CommonJSの話CommonJSの話
CommonJSの話
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
クラウドGPS(仮)
クラウドGPS(仮)クラウドGPS(仮)
クラウドGPS(仮)
 
IronRuby on Silverlight っておいしいの?
IronRuby on Silverlight っておいしいの?IronRuby on Silverlight っておいしいの?
IronRuby on Silverlight っておいしいの?
 
Dynamic Language による Silverlight2 アプリケーション開発
Dynamic Language による Silverlight2 アプリケーション開発Dynamic Language による Silverlight2 アプリケーション開発
Dynamic Language による Silverlight2 アプリケーション開発
 

Metro Style AppsでMSIL ver.2012/06/09