SlideShare uma empresa Scribd logo
1 de 58
JavaScript + HTML5 と C# + XAML で作る
Windows 8 アプリ

                    小島 富治雄


                   Community Open Day 2012
自己紹介
•   小島 富治雄
•   @Fujiwo
• 福井コンピュータ株式会社
• Microsoft MVP C# (2005-2012)




                                 2
アジェンダ


 1. Windows 8    3. WinRT とは何か



 2. Metro スタイル   4. デモ
Windows 8
Windows 8

二本立て!
• Metro スタイル UI
• 従来デスクトップ
Windows 8
4エディション
 Windows 8
                        x86
 Windows 8 Pro
                        x64
 Windows 8 Enterprise
 Windows RT             ARM
Windows 8 と Windows RT
             従来デスクトップ アプリ    Metro スタイル アプリ



Windows 8    • 従来通り          • 全画面
x86/x64        Win32 API     • 新 API “WinRT”
             • .NET
             • Silverlight
                             • C#/VB+XAML
             • ほとんどそのまま動作    • JavaScript+HTML5
                             • C++ + XAMLで
Windows RT                     ネイティブ アプリも可
ARM          ×               • Market Place で配布
                                • 審査あり
Windows RT
 何それ?
 他の Windows 8 と互換性ある?
Windows RT
よりタブレットに特化
した Windows 8

※ 後述の “WinRT” とは別もの
Windows RT

ARM用
タブレットに特化
 薄型軽量、省電力
Windows RT
パッケージ販売されない
  iOS や Android と同様
  タブレットなどに
   プリインストールされる
Windows RT
Metro スタイル アプリのみ!
•   従来のデスクトップアプリは動作しない
•   Metro アプリの多くは 「そのまま」動く
•   Office は Metro 版 が提供される
         タッチ用の Word、Excel、
    PowerPoint、OneNote
•     “Office 15” (コードネーム)
Windows RT
「Metro スタイルアプリなら全て
他の Windows 8 と互換性がある」
わけではない
  ○ HTML + JavaScript で作ったもの
  ○ C# + XAML で作ったもの
  × C++ + XAML
Metro スタイル
Metro スタイル



大きく GUI の考え方を変える必要
これまでの GUI と混ぜられない
Metro スタイル
タッチ & マウス/キーボード
基本フルスクリーン
 カスケード ウィンドウじゃない
 タイトルバー、従来のメニューがない
横長
 横スクロール
Metro スタイル アプリ
新たな GUI への対応
ライブタイル
 バッチ
チャーム
アプリ バー
トースト通知
セマンティック ズーム
Metro スタイル
通常明示的に「終了」しない
 裏に回ってもサスペンド状態で継続
 (メモリ不足になったときなどに)
      不意に終了される
 他のタブレットやスマートフォン同様
 状態保存のタイミングも 変わってくる
   「サスペンド時に状態保存」
Metro アプリ ライフサイクル
  実行開始
 (Activate)
                 アクティブ


      一時停止               実行再開
     (Suspend)           (Resume)

                 非アクティブ
要状態の保存                        終了
                           (Terminate)
Metro スタイル アプリ
コントラクト (他アプリとの連携)
        の対応
タッチへの対応
 指で隠れない大きさの UI

アニメーション
Metro スタイル アプリ
解像度
 1024×768以上
 1366×768以上でスナップ対応
 画像は SVG か3種類のビットマップ
スナップへの対応
ランドスケープと
 ポートレートのレイアウト
参考: Metro スタイルアプリのガイドライン
•   Metro スタイルの設計原則
    http://msdn.microsoft.com/library/ja-
    jp/windows/apps/hh781237
•   Metro スタイル アプリのナビゲーション デザイン
    http://msdn.microsoft.com/ja-
    jp/library/windows/apps/hh761500.aspx
•   Metro スタイル アプリの UX ガイドライン
    http://msdn.microsoft.com/ja-
    jp/library/windows/apps/hh465424.aspx
Metro スタイル アプリ
          – 移植性
Metro スタイル – 移植性
従来デスクトップアプリからの
  移植は容易?
 UI が全然違うので困難
 API が異なるので困難
Windows Phone 7 アプリからの
    移植は容易?
 XAML 部分は可能
 将来は可能に?
Metro スタイル – 移植性
Windows RT では
 CPU が異なる
  x86/x64 ではなく ARM
 x86/x64 ネイティブ コードは
          動かない
 開発言語を選ぶ必要性
どちらも Metro UI だが…
Windows Phone 7
 Silverlight for Windows Phone
   .NET 4相当

 XNA (Xbox と共通)
Windows 8
 WinRT + DirectX
 .NET 4、4.5
Windows Phone 8 で
統合化の動き?
タブレットとスマートフォン
でコードの共通化?
 iOS や Android と同様
参考: デスクトップアプリ – 互換性
Vista/XP 以降用のアプリは
    基本的に動作するはず
 Windows 7 で XP モードでないと
    動かないようなものは難しい
メモリ使用可能量は増加
32ビットと64ビットがあるのも同様
WinRT とは何か?
WinRT


 何それ?
 .NET と何が違うの?
WinRT とは何か?

デスクトップアプリ用
 従来の Win32 API
Merto スタイル アプリ用
 “WinRT”
WinRT とは何か?
Win32 API とは別の
 Windows RunTime
 Win32 API を置き換える
 Metro アプリ用
.NET とは別もの
 .NET は API ではない
Win 32 API と WinRT の比較

Win 32 API    WinRT
従来の API       新 API
C スタイル        OOP スタイル
主に デスクトップ     主に Metro スタイ
アプリ用          ル アプリ用
WinRT とは何か?

COM ベースの API
 .NET ではない
 Win32 API よりはオブジェクト指向
 C++ で書かれている
Metro アプリの開発環境
HTML5/CSS3 + JavaScript
                            New!


C#, VB + XAML        New!
  Silverlight 感覚
C++ + XAML        New!




WinRT 上で動作
HTML5/CSS3 + JavaScript ?

•   描画エンジンは Internet
    Explorer と同じ (Trident)
•   WinJS で WinRT が使える
C++ + XAML?
•    ネイティブ コード + XAML
•    C++ とは言っても、従来の C++ を
     拡張したもの


C++/CX
    C++/CLI ではない
    C++11 ではない
WinRT とは何か?
C#/VB から呼べる
 CLI から呼ぶ仕組みがある
 型は自動変換
JavaScript から呼べる
 JavaScript から WinRT の API
           をコール可能
 “WinJS”
言語プロジェクション

      C++                     WinRT
   (ネイティブ)
                           (COMベース
                           ネイティブ)
 C#/VB       CLR
(マネージ)



JavaScript   Chakra     WinMD
                      Windows MetaData
                          (型情報)
WinRT と .NET
WinRT 自体はネイティブ コード
WinRT と .NET は似ているが型が少し違う
  IIterable<T> ⇔ IEnumerable<T>
 参考: .NET 4.5 で Metro アプリ向けに非同
 期が強化
  Windows 8 は .NET 3.5 が入っていない
  .NET 4.5 は Windows Vista に対応しない
Metro アプリ

従来の Win32 API は呼べるの?
 DirectX は呼べる

             DirectX 11.1
参考: デスクトップ アプリの開発環境
従来通り
 C++ + Win32API
 C#, VB + .NET 4, 4.5

Win32 API, .NET, Silverlight 上で動作
WinRT での開発の特徴

• 非同期プログラミング
• UI コードの分離
非同期?
•   UI スレッドで重い処理を行うと
    UI が固まる
        同期処理    UIスレッド

        イベント
               イベントハンドラ
                   で
       イベント
                時間の掛かる
                  処理
非同期

 非同期処理
            UIスレッド   別スレッド


 イベント 1   イベントハンドラ
              1
                     時間の掛かる
 イベント 2   イベントハンドラ
                       処理
              2

            1 の続き
WinRT では多くの API が非同期に
•        非同期呼び出しだらけ
    •     タブレット等のデバイスで有効
    •     50ms 以上掛かる可能性がある API は非同期版のみ
•       非同期呼び出し?
    •    APIの機能リクエストと結果受け取りが別

※ これまでのプログラミング方法では複雑なコードに
        → async/await が有効
    var client = new SyndicationClient();
    var feed = await client.RetrieveFeedAsync(new Uri(feedUri));
UI コードの分離
•       XAML + C#/VB
    •   MVVM パターンが有効
•       XAML + C++
•       HTML5/CSS3 + JavaScript
Visual Studio 2012 RC
Visual Studio 2012 RC
JavaScript + HTML5/CSS3

DEMO
 •   ファイル構成
WinJS のコントロール
•   ボタン
•   アプリバー
•   グリッドビュー
等
参考: Promise による非同期処理
参考: データバインド
C# + XAML

DEMO
 •   ファイル構成
 •   データバインド
 •   スナップ
Metro アプリ ライフサイクル
  実行開始
 (Activate)
                 アクティブ


      一時停止               実行再開
     (Suspend)           (Resume)

                 非アクティブ
要状態の保存                        終了
                           (Terminate)
参考資料:
•   Windows8 | 眠るシーラカンスと水底のプログラマー
    http://coelacanth.heteml.jp/blog/category/windows8/
•   Windows 8 Metro Style App samples
    http://code.msdn.microsoft.com/windowsapps/
•   Programming Windows®, 6th Edition By Charles Petzold
    http://shop.oreilly.com/product/0790145369079.do
JavaScript+HTML5とC#+XAMLで作るWindows8アプリ

Mais conteúdo relacionado

Mais de Fujio Kojima

Mais de Fujio Kojima (20)

.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
 
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
 
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
 
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
 
機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編
 
機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編
 
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
 
機械学習入門
機械学習入門機械学習入門
機械学習入門
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
 
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
 
.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分
 
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
 
HTML5 on ASP.NET
HTML5 on ASP.NETHTML5 on ASP.NET
HTML5 on ASP.NET
 
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
C# 6.0 Preview
C# 6.0 PreviewC# 6.0 Preview
C# 6.0 Preview
 
Microsoft .NET 入門
Microsoft .NET 入門Microsoft .NET 入門
Microsoft .NET 入門
 

Último

Último (12)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

JavaScript+HTML5とC#+XAMLで作るWindows8アプリ