SlideShare a Scribd company logo
1 of 63
まもなくやってくる
Windows 8時代のアプリ開発
             岩永 信之
Windows 8

現在の状況と、来たるWindows 8
現在
   とにかく多様化
       ハードウェア
           x86/x64とARM
           デスクトップ/ノートPC、Slate、Phone
       標準 vs プラットフォーム固有
           間口の広さ ⇔ 表現力、性能、進化の速さ
       言語・フレームワーク
           .NET、ネイティブ(C++)、JavaScript
Windows 8/Windows RT
     ARM対応、Metro UI、WinRT
             UI
                    デスクトップ           Metro
       CPU


Windows 8         今まで通りのWindows    新環境
                  • Win32 APIを使う   • x86/x64/ARM共通
  x86/x64                          • ネイティブの場合、
                                     3バイナリ必要
                                   • WinRT APIを使う
                  提供はするものの…        • App Store配布
Windows RT • Officeなどバンドル品のみ
                                   • 審査あり
      ARM • 自由なアプリ配布無理
Metro: 新UI

             デスクトップ(今まで通
             り)
        OK
             • マウスとキーボード操作
             • タスク バーとウィンドウ


   Metro(新UI)
   • タッチ向けUI
   • 全画面、フリックで切り替え       1   ☎
Metro UIとWinRT

     デスクトップ                                Metro

            OK                         1     ☎


主にデスクトップ用        一部だけ許可        呼べなくはない             主にMetro用
                 (DirectXなど)   (あまり意味ない)


     Win32                           WinRT
   伝統のAPI                            新API

 C言語スタイル                         OOPスタイル
Metro: XAMLとHTML5
   XAMLかHTML5で開発

               XAML                         HTML5
       .NET             C++             JavaScript

               WinRT(Windows Runtime) API

                     Windows Kernel


      WPFやSilverlightと同じ
                                  標準+WinRT API
         開発スタイル

              多様化に対するささやかな抵抗
言語プロジェクション
   言語/フレームワークを超えてコンポーネント共有




                                 Projection
                                                       C++アプリ
       WinRT
     コンポーネント




                                 Projection
                                              CLR       C#/VBアプリ
       C++, C#, VB
        で書ける
                                                       HTML+JavaScript




                                 Projection


                                              Chakra
                                                          アプリ
                     Windows
                     Metadata


       C++で書かれていても、                 .NETのメタデータを
    .NETからは.NETクラスに見える          .NET以外の世界に広げたもの
WinRT

.NETの反省点と、WinRT
ネイティブと.NETとWinRT
   WinRT = 振り子の真ん中




    1990年代                              2000年代
    ネイティブ                               .NET
    C++                                 C#, VB, F#, …
    COM       2010年代
              WinRT
              ネイティブ/.NET/JavaScript連携
ネイティブ時代の課題
ネイティブ

• メモリ管理が大変
• セキュリティ保証が大
  変
• COM大変
• 複数CPU対応が大変


 全部をネイティブ
 で書きたくない
ネイティブ→.NET
 ネイティブ          .NET
 • メモリ管理が大変     • メタデータ
 • セキュリティ保証が大
   変
                • メモリ自動管理
 • 複数CPU対応が大変   • 中間コード
 • COM大変
.NET時代の課題
    .NET

    • メタデータ       手軽さを犠牲にしてでも
                  性能が欲しい場面は残る
    • メモリ自動管理
                   • メモリ手動管理したい
    • 中間コード        • CPU依存の最適化をしたい




   低層APIは必ずネイティブ
       連携が面倒
       .NET向けラッパーの登場までにタイムラグ
.NET→WinRT
   メタデータの適用範囲を拡大

    .NET                 ネイティブ      JavaScript

          メタデータ WinMD(Windows Matadata)
    • メタデータ
    • メモリ自動管理
                         ただし、現代風に再設計
    • 中間コード

       .NETとネイティブが対等
       ネイティブAPIが即.NETから使える
       JavaScriptにも対応
言語プロジェクション
   規約ベースで.NET/ネイティブ/JavaScript相互運用
       .NETのCTS(共通型システム)を、ネイティブと
        JavaScriptにも広げたもの
   WinMD(Windows Metadata)
       相互運用のために必要なメタデータ
       ファイル形式的には.NETのメタデータ仕様と同じ
       .NETと比べると使える型に制限あり
壁のない世界
   壁があっちゃいけない
       サーバーとクライアント開発で
       初心者とプロで

       言語が違うからできない
       フレームワークの作法が違うからできない


   言語やフレームワークを超えた相互運用
             WinMD(Windows Matadata)
Not Only "Win"
   壁があっちゃいけない
       サーバーとクライアント開発で
       初心者とプロで
            あまり名前が良くない
       言語が違うからできない
            • WinRT用なのは残念
           • Windowsに閉じていい技術じゃない
        フレームワークの作法が違うからできない
            • 壁のない世界をWindows以外にも欲しい

   言語やフレームワークを超えた相互運用
             WinMD(Windows Matadata)
現代風に再設計
   .NETを参考にしたオブジェクト指向API
       脱Win32
       脱Variant
   非同期API
   XAML UI
.NETを参考に
   言われなければ.NETのライブラリかと間違うレベル
    例
        using (IRandomAccessStream readStream =
                  await sampleFile.OpenAsync(FileAccessMode.Read))
        {
            using (var dataReader = new DataReader(readStream))
            {
                var size = (uint)readStream.Size;
                var bytesLoaded = await dataReader.LoadAsync(size);
                var fileContent = dataReader.ReadString(bytesLoaded);
            }
        }

                         ※IRandomAccessStreamやDataReaderがWinRTクラス

        型はしっかりしている(Variantとかない)
        P/Invoke不要
非同期API
   WinRTの方針:
        50ミリ秒以上かかる可能性のあるAPIは
        非同期APIしか提供しない

       スレッドをブロックするのは思った以上にコストになる
       UIスレッドを止めるとユーザーの印象悪い

       同期処理するとまずい
       まずいものは最初から提供しない
XAML UI: 登場以前
   プログラミング言語でのUI記述の限界
      private void UpdatePageData()
      {
          panel.RemoveAll();

     for (int i = 0; i < pageItems.Count; i++)
     {
         var item = pageItems[i];      前と変わってないものまで再生成
ビューに状態持っちゃってて、 = item.Card;
         var cardCharacter
         CardThumbnailView card = card = CreateCardThumbnail(item);
   仮想化†できない
         thumbnailList.Add(card);
         card.isDeckSet = item.IsDeckSet;

              card.gameObject.SetActiveRecursively(true);
              panel.AddItem(card.gameObject);
          }
      }   • どこで、だれが、何を生成しているか全然わからない
          • 実行してみるまで表示結果がわからない
          • きっちりしたコード書くの大変(不正になりがち)
                                       †画面に見えている分だけビューを生成
XAML UI: UIに特化した言語
   ということでXAML†
                             ツール連携:
       WPF/Silverlightの延長   表示結果が常に見える




                                HTML的な階層記述

    XAML
XAML UI: データ バインディング
   ビューからのデータ、ロジックの分離
        XAML                                            「ここにXを表示したい」
        ビュー(表示部分)を記述                                     という印だけを入れる
    <ItemsControl ItemsSource="{Binding CardList}">
      <ItemsControl.ItemTemplate>
        <DataTemplate>
          <Image Source="{Binding ImagePath}"
                 Width="168" Height="254" />
        </DataTemplate>
      </ItemsControl.ItemTemplate>
    </ItemsControl>


      +     View.DataContext = new CardListViewModel { … };

        C#など
        モデル(データ、ロジック)を記述
    public class CardViewModel
    {
        public string ImagePath { get; }
    }
    public class CardListViewModel
    {
        public IList<CardViewModel> CardList { get; }
    }
XAML UI: 共通型システム
   WinRTクラスを書けば、UI要素を増やせる
                        <ItemsControl ItemsSource="{Binding CardList}">
    単なるクラスの               <ItemsControl.ItemTemplate>
    インスタンス生成                <DataTemplate>
                              <Image Source="{Binding ImagePath}"
                                     Width="168" Height="254" />
                            </DataTemplate>
                          </ItemsControl.ItemTemplate>
                        </ItemsControl>



   WinMDを介して言語中立
       C++
       .NET: C#, VB, etc.
XAML UI: 共通型システム
   WinRTクラスを書けば、UI要素を増やせる


       ×コードでUI作ったり、
       ×独自属性増やしたりはどうかと思う
    div = body.appendChild(
        div = document.createElement( "div" ) );
                                          <div data-win-control="WinJS.Binding.Template">
    $.extend( div.style, {                    <div data-win-bind="style.backgroundColor: backgroundColo
        minHeight: "100px", height: "auto",   <div data-win-bind="textContent: title"></div>
        padding: 0, borderWidth: 0});         <div data-win-bind="textContent: description"></div>
                                          </div>
多様な選択肢

それぞれにとってのWinRT
   それぞれの利用場面
選択肢

Metro以外

   WebとMetro         デスクトップ


Metro


  .NET
          ネイティブ   HTML5        それぞれの利用場面は?
           C++    JavaScript   それぞれにとってWinRTとは?
選択肢

Metro以外

         Web            デスクトップ


Metro


  .NET
           ネイティブ     HTML5
               C++   JavaScript
Web = 標準ベース
   Web VS Metro

    標準 VS プラットフォーム固有

                                       高度なUIがほしければ
                           環境B
    クロス プラットフォーム     環境C               プラットフォーム固有
    を狙うなら標準ベースで                          機能を使う
                                 環境A
    標準化指向                              単一ベンダー指向
     •○ 広い窓口                            •○ 高機能
     •× 機能が限られる                         •○ 迅速な新機能提供
     •× 標準化に時間がかかる                      •× 狭い窓口
クロス プラットフォーム
   クロスに作るのはそう簡単じゃないけれども
       ブラウザー依存排し切れない
       どうせUIは作り直し
           タッチかマウスか、画面サイズどのくらいか



   やっぱりかなり間口が広い
       数倍大変でも、数倍以上のアクセス見込めるなら


        まず第一にMetroの「高機能」が必要かどうか要検討
                               必要ないならWeb
Metroに求める「高機能」
   パフォーマンス
       DirectX
   ユーザー データ
       Music/Pictures/Videos Library
   ハードウェア
       Microphone、Webcam、Location
   無制限の通信
       Proximity: 近距離デバイス間通信
   認証
       ドメイン参加
       スマート カードなどでのハードウェア認証
選択肢

Metro以外

         Web            デスクトップ


Metro


  .NET
           ネイティブ     HTML5
               C++   JavaScript
デスクトップ アプリ
   いきなりすべてのPCがタッチUIになるわけない
   段階移行?
       できるところからタッチ化
       今はマウス&キーボードで、将来タッチ化
   両方?
       出先ではタッチ、オフィスではマウス&キーボード



          今、デスクトップ アプリを作るなら?


           注意: ARM版(Windows RT)はMetroのみ。デスクトップ不可
Metroに近いのは?
   アセンブリ構造が一番近いのはSilverlight
       ただ、同じXAML UIなWPFも十分近い
   WinRT=脱Win32
       Win32が色濃いものはつらい
           ×Windowsフォーム
           ×MFC
ただ1つだけ言えること
   UIは陳腐化が激しい
       Viewは短めの周期で差し替わる
       Viewは極力小さく作るべき

   Viewを小さく作る工夫
       MVVMパターン
   異なるUIフレームワークでModelを共有
       Portable Class Library
       Project Linker         この辺りを押さえれば、
                               WPF/SilverlightからMetroへの移行
                               WPF/SilverlightとMetro同時開発
                               だいぶ楽
Portable Class Library
   異なるフレームワークで共通して使えるライブラリ
       使えるクラスは共通部分に限られる

                         ターゲットを切り替えること
                          で使えるクラスが変わる




                         ※ 現状だと「共通部分」が狭すぎて
                           使い勝手はあまり良くない。
                           本格化はもう1世代後かも。
Project Linker
   複数のプロジェクト間でソースコードを自動共有



                   共有元を指定




                   リンク




                     ※ 現状、VS 2010のみ
SilverlightかWPFか?
   要件次第

   Silverlight
       デプロイ簡単
       Smooth Streamingとかメディア系強い
   WPF
       フル機能の.NET
       Windows 8であれば.NET 4.5標準搭載
選択肢

Metro以外

         Web            デスクトップ


Metro


  .NET
           ネイティブ     HTML5
               C++   JavaScript
.NETにとって: デスクトップとMetro
 デスクトップ         OK
                        Metro    1    ☎

       アプリ                      アプリ

 標準ライブラリ              標準ライブラリ        WinRT
 • UI      •   LINQ   • LINQ         • UI
 • File    •   Task   • Task         • File
 • Network •   MEF    • MEF          • Network
           •   …      • …            • …

      CLR(.NETの実行環境)
                                      WinRTとの重複削除
                                     ついでにレガシー削除
 実行環境は共通
.NETにとって: WinRT
   かなり、Silverlightの延長
       Silverlightも、中身はかなりInternal Call
           つまり、中身はネイティブで、インターフェイスだけ.NET
           一般開発者もそれできるようにしたようなもの
   ネイティブだけど
                             結局、今まで通り
       ネイティブと意識せず
       タイムラグ0で利用可能            むしろ恩恵

                      なんだかんだ言って.NETは一番恩恵受けてる
.NETにとって: WinMD/言語プロジェクション
                                     デスクトップと同じ実行環境
                   .NET
ネイティブやJavaScript
 から使いたければ                      CLR
                                        ネイティブ/JavaScript
プロジェクト タイプを        winmd
   WinMDに                    *.winmd       *.exe
                   *.cs                    *.dll
                                            *.js
.NETアプリ/ライブラリ      exe/lib
                              *.exe
                                          *.winmd
                              *.dll
                   *.cs

                             .NET for
                                          WinRT
                              Metro
.NET for Metro Style
   WinRTとの重複削除
       UI、ファイル操作、通信ソケット、etc.
   レガシー削除
       非ジェネリック コレクション → ジェネリック版のみ
       XmlSerializer → LINQ to XMLのみ


   元々ポータビリティを考えて作らないと、デスク
    トップ版からの移植そこそこ大変
       Viewからの分離
       レガシーは使わない
       まず、Portable Class Library化を考える
WinRT→.NET
   WinMDを介して通常の.NET型に見える
       WinRT型→.NET型に、規約ベースで置き換え

         対応表(一部)
          .NETの型             WinRTの型
          IList<T>           IVector<T>
          IReadOnlyList<T>   IVectorView<T>
          IEnumerable<T>     IIteratable<T>
          IDictionary<T>     IMap<T>
.NET→WinRT
   利用可能な型
       プリミティブ(intとか)、string
       TimeSpan、DateTimeOffsetなど
   利用可能なユーザー定義型
       classはsealed(継承不可)なもののみ
       structはpublicなフィールドだけ持つもののみ
       ジェネリックは、IVector<T>など、決まった型のみ
選択肢

Metro以外

         Web            デスクトップ


Metro


  .NET
           ネイティブ     HTML5
               C++   JavaScript
ネイティブにとって: WinRT
   基本的にCOM
       C++/CXを使えば、自前実装不要
   Win32 APIの呪縛からの脱却
       WinRTは、現代的なすっきりしたクラス ライブラリに
        なってる
   WPF的なUIのネイティブ実装
       C++からWPF的なものが使える
       ある意味ではWPFのパフォーマンス改善
ネイティブの位置づけ
   .NETでできることをネイティブでやっても意味ない



                                  標準C++
                                                   DirectX
全部をネイティブ
                                                                   性能が欲しければ
                                                                   性能が欲しければ
 でやらない
                                  ネイティブ                              GPUを活用
                                                                     GPUを活用
    .NET/
                    C++ /CX                  C++ AMP                      GPU
    JavaScript
                                                                          利用
    連携
                 Component Extensions   Accelerated Massive Parallelism
C++/CX (1)
   WinRTは内部的にはCOMなのだけども
       COMめんどくさい


   C++ with Component Extensions(C++/CX)
       C++/CLIに似た構文で、COMコードを生成
        (あくまでネイティブ)
    public ref class ImageWithLabelControl sealed
        : public Windows::UI::Xaml::Controls::Control
    {
    public:
        property Platform::String^ Label
        {
          Platform::String^ get() { return (Platform::String^)GetValue(LabelProperty); }
          void set(Platform::String^ value) { SetValue(LabelProperty, value); }
        }
    };


                      ※ WRLというライブラリを使って、自前でCOM実装も可能
C++/CX (2)
   オーバーヘッドを最小に
          *.winmd   .NETやJavaScriptと相互運用可能
         メタデータ      (メタデータのみ。実際に呼ばれるのは
                      ↓のCOM)
 CX
          COM相当の
                    他のCOMコンポーネントと相互運用可能
        ネイティブ コード
*.cpp               (プレーンなネイティブ コードのラッパー)
          プレーンな
        ネイティブ コード
               オーバーヘッドなしで参照可能
               (単なる仮想関数呼び出しに)
 通常の
          プレーンな
        ネイティブ コード
*.cpp
C++ AMP
   C++ Accelerated Massive Parallelism
       C++でGPGPU†するための拡張
       構文的にはrestrict句の追加のみ
       ほとんどライブラリ
               int aCPP[] = {1, 2, 3, 4, 5};
               int bCPP[] = {6, 7, 8, 9, 10};
               int sumCPP[5] = {0, 0, 0, 0, 0};

               array_view<int, 1> a(5, aCPP);
               array_view<int, 1> b(5, bCPP);
    ライブラリ      array_view<int, 1> sum(5, sumCPP);
      提供       parallel_for_each(sum.extent,
                   [=](index<1> idx) restrict(amp)   CPU実行かGPU実行か
                   {                                   をrestrict句で指定
                       sum[idx] = a[idx] + b[idx];
                   });


          † General-purpose computing on GPU(GPUによる汎用目的計算)
選択肢

Metro以外

         Web            デスクトップ


Metro


  .NET
           ネイティブ     HTML5
               C++   JavaScript
JavaScriptにとって: WinRT
   WinRTのUI(要するにXAML)は使わない
       IEと同じ描画エンジン(Trident)で
       IEと同じJavaScript実行エンジン(Chakra)
                             JavaScript
                                                  あくまで標準
               .NET/ネイティブ
                              Trident/Chakra       HTML5 +
                   *.winmd                         JavaScript



     WinRTの        WinRT       *.js *.html
    XAML UIは        UI
                                       WinJS
     使わない            File                         +α
                                    (JavaScript
                   Network          ライブラリ)

                        +α
標準+α (1): Metroに求める「高機能」
   ユーザー データ
       Music/Pictures/Videos Library
   ハードウェア
       Microphone、Webcam、Location
   無制限の通信
       Proximity: 近距離デバイス間通信
   認証
       ドメイン参加
       スマート カードなどでのハードウェア認証
標準+α (2 ): WinJS
   XAML相当のUIを書くためのJavaScriptライブラリ
       ↓こんなHTMLを書く
    <div data-win-control="WinJS.Binding.Template">
        <div data-win-bind="style.backgroundColor: backgroundColor"></div>
        <div data-win-bind="textContent: title"></div>
        <div data-win-bind="textContent: description"></div>
    </div>

   data-なんとか属性…
       独自属性使ってデータ バインディング
           Blend5で編集可能
           処理を行ってくれてるのはWinJS中のJavaScript
       一応は、HTML5の規格の範囲
HTML5+JavaScriptの位置づけ
   UI用
       +αがある時点で“別物”とはいえ…
       HTML5とJavaScriptになじんだUIデザイナーは多い
   ロジックは…
       ViewModelまで.NETで作って、WinMD経由で参照するの
        がよいかも
WinJSを使うかどうか
   WinJSを使わない
       UI部分に関しては完全に「標準」
       UIガイドラインに沿ったUIを1から自前で作る必要あり
           沿っていないと審査で落ちる可能性あり
           ゲームならあまりうるさく言われない
   WinJSを使う
       ガイドライン通りのUIに
       +αの部分を覚えるのはそれなりの負担
           ならXAMLでいいのでは…
まとめ

Metro以外

         Web            デスクトップ


Metro


  .NET
           ネイティブ     HTML5
               C++   JavaScript
Web VS Metro
   フル機能使いたかったらMetroで
       GPU
       Music/Pictures/Videos Library
       Microphone、Webcam、Location
       Proximity: 近距離デバイス間通信
       ドメイン参加
       スマート カードなどでのハードウェア認証
   そんなの要らなかったらWebで
デスクトップ
   段階移行 or 同時開発
       同じXAML UIのSilverlightかWPFならそこそこ楽
   確実に言えること:
       UI技術は陳腐化が激しい
       Viewを極力小さく
   SilverlightかWPFか
       要件次第。それぞれの特徴を活かして
Metro: .NET
   SilverlightかWPFの経験者なら苦もなく作れる
       XAML: Silverlightの延長線上
       WinMD: .NETのメタデータの延長線上
   開発しやすさは.NETが一番
       特に非同期処理にはasync/await(C# 5.0)
       サーバーとのコード共有の要求もたぶん出てくる
           2重開発避けるためにも、サーバー側でも使える.NET
Metro: ネイティブ
   .NETでできることをネイティブでやっても意味ない

   ハイ パフォーマンス
   特にゲームや大規模データ処理
       DirectX, C++ AMP   GPUの活用
Metro: HTML5+JavaScript
   UI用
       ロジックは.NETやC++で書いてしまう
           WinMD経由で参照
       利点はUIデザイナー人口多いこと
   Metro HTMLは標準+αだけど…
       +αある時点で…

More Related Content

Similar to Windows 8時代のアプリ開発

わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」Yasuhiko Yamamoto
 
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!Akira Inoue
 
スマ研第2回レポート
スマ研第2回レポートスマ研第2回レポート
スマ研第2回レポートShinpei Niiyama
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Yoshito Tabuchi
 
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~decode2016
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発Fujio Kojima
 
Net advantage 2012 volume2 最新情報 xaml プラットフォーム編
Net advantage 2012 volume2 最新情報 xaml プラットフォーム編Net advantage 2012 volume2 最新情報 xaml プラットフォーム編
Net advantage 2012 volume2 最新情報 xaml プラットフォーム編Daizen Ikehara
 
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~Akira Inoue
 
Windowsストアアプリ開発 オープンセミナー広島
Windowsストアアプリ開発 オープンセミナー広島Windowsストアアプリ開発 オープンセミナー広島
Windowsストアアプリ開発 オープンセミナー広島Akira Onishi
 
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~Akira Inoue
 
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメXamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメYoshito Tabuchi
 
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~Akira Inoue
 
.NET Conf 2017 Japan Keynote ".NET Everywhere!"
.NET Conf 2017 Japan Keynote ".NET Everywhere!".NET Conf 2017 Japan Keynote ".NET Everywhere!"
.NET Conf 2017 Japan Keynote ".NET Everywhere!"Akira Inoue
 

Similar to Windows 8時代のアプリ開発 (20)

Bar Vsug04 Masami Suzuki Windows7 UI
Bar Vsug04 Masami Suzuki Windows7 UIBar Vsug04 Masami Suzuki Windows7 UI
Bar Vsug04 Masami Suzuki Windows7 UI
 
Silverlightの今
Silverlightの今Silverlightの今
Silverlightの今
 
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
 
20021007
2002100720021007
20021007
 
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
 
20050903
2005090320050903
20050903
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
スマ研第2回レポート
スマ研第2回レポートスマ研第2回レポート
スマ研第2回レポート
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版
 
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
DEV-022_これから始める Xamarin ~環境構築から iOS/Android/UWP アプリのビルドまで~
 
2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山
 
20010127
2001012720010127
20010127
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
 
Net advantage 2012 volume2 最新情報 xaml プラットフォーム編
Net advantage 2012 volume2 最新情報 xaml プラットフォーム編Net advantage 2012 volume2 最新情報 xaml プラットフォーム編
Net advantage 2012 volume2 最新情報 xaml プラットフォーム編
 
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
One ASP.NET ~ 今、ASP.NET に何が起こっているのか? ~
 
Windowsストアアプリ開発 オープンセミナー広島
Windowsストアアプリ開発 オープンセミナー広島Windowsストアアプリ開発 オープンセミナー広島
Windowsストアアプリ開発 オープンセミナー広島
 
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
 
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメXamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
 
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~
 
.NET Conf 2017 Japan Keynote ".NET Everywhere!"
.NET Conf 2017 Japan Keynote ".NET Everywhere!".NET Conf 2017 Japan Keynote ".NET Everywhere!"
.NET Conf 2017 Japan Keynote ".NET Everywhere!"
 

More from 信之 岩永

YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話信之 岩永
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話信之 岩永
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理信之 岩永
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム信之 岩永
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)信之 岩永
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#信之 岩永
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方信之 岩永
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6信之 岩永
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に信之 岩永
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3信之 岩永
 
Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4信之 岩永
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 

More from 信之 岩永 (20)

YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
 
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
それっぽく、適当に
それっぽく、適当にそれっぽく、適当に
それっぽく、適当に
 
Modern .NET
Modern .NETModern .NET
Modern .NET
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Deep Dive C# 6.0
Deep Dive C# 6.0Deep Dive C# 6.0
Deep Dive C# 6.0
 
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
 
Code Contracts in .NET 4
Code Contracts in .NET 4Code Contracts in .NET 4
Code Contracts in .NET 4
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 

Recently uploaded

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (9)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

Windows 8時代のアプリ開発

  • 3. 現在  とにかく多様化  ハードウェア  x86/x64とARM  デスクトップ/ノートPC、Slate、Phone  標準 vs プラットフォーム固有  間口の広さ ⇔ 表現力、性能、進化の速さ  言語・フレームワーク  .NET、ネイティブ(C++)、JavaScript
  • 4. Windows 8/Windows RT  ARM対応、Metro UI、WinRT UI デスクトップ Metro CPU Windows 8 今まで通りのWindows 新環境 • Win32 APIを使う • x86/x64/ARM共通 x86/x64 • ネイティブの場合、 3バイナリ必要 • WinRT APIを使う 提供はするものの… • App Store配布 Windows RT • Officeなどバンドル品のみ • 審査あり ARM • 自由なアプリ配布無理
  • 5. Metro: 新UI デスクトップ(今まで通 り) OK • マウスとキーボード操作 • タスク バーとウィンドウ Metro(新UI) • タッチ向けUI • 全画面、フリックで切り替え 1 ☎
  • 6. Metro UIとWinRT デスクトップ Metro OK 1 ☎ 主にデスクトップ用 一部だけ許可 呼べなくはない 主にMetro用 (DirectXなど) (あまり意味ない) Win32 WinRT 伝統のAPI 新API C言語スタイル OOPスタイル
  • 7. Metro: XAMLとHTML5  XAMLかHTML5で開発 XAML HTML5 .NET C++ JavaScript WinRT(Windows Runtime) API Windows Kernel WPFやSilverlightと同じ 標準+WinRT API 開発スタイル 多様化に対するささやかな抵抗
  • 8. 言語プロジェクション  言語/フレームワークを超えてコンポーネント共有 Projection C++アプリ WinRT コンポーネント Projection CLR C#/VBアプリ C++, C#, VB で書ける HTML+JavaScript Projection Chakra アプリ Windows Metadata C++で書かれていても、 .NETのメタデータを .NETからは.NETクラスに見える .NET以外の世界に広げたもの
  • 10. ネイティブと.NETとWinRT  WinRT = 振り子の真ん中 1990年代 2000年代 ネイティブ .NET C++ C#, VB, F#, … COM 2010年代 WinRT ネイティブ/.NET/JavaScript連携
  • 11. ネイティブ時代の課題 ネイティブ • メモリ管理が大変 • セキュリティ保証が大 変 • COM大変 • 複数CPU対応が大変 全部をネイティブ で書きたくない
  • 12. ネイティブ→.NET ネイティブ .NET • メモリ管理が大変 • メタデータ • セキュリティ保証が大 変 • メモリ自動管理 • 複数CPU対応が大変 • 中間コード • COM大変
  • 13. .NET時代の課題 .NET • メタデータ 手軽さを犠牲にしてでも 性能が欲しい場面は残る • メモリ自動管理 • メモリ手動管理したい • 中間コード • CPU依存の最適化をしたい  低層APIは必ずネイティブ  連携が面倒  .NET向けラッパーの登場までにタイムラグ
  • 14. .NET→WinRT  メタデータの適用範囲を拡大 .NET ネイティブ JavaScript メタデータ WinMD(Windows Matadata) • メタデータ • メモリ自動管理 ただし、現代風に再設計 • 中間コード  .NETとネイティブが対等  ネイティブAPIが即.NETから使える  JavaScriptにも対応
  • 15. 言語プロジェクション  規約ベースで.NET/ネイティブ/JavaScript相互運用  .NETのCTS(共通型システム)を、ネイティブと JavaScriptにも広げたもの  WinMD(Windows Metadata)  相互運用のために必要なメタデータ  ファイル形式的には.NETのメタデータ仕様と同じ  .NETと比べると使える型に制限あり
  • 16. 壁のない世界  壁があっちゃいけない  サーバーとクライアント開発で  初心者とプロで  言語が違うからできない  フレームワークの作法が違うからできない  言語やフレームワークを超えた相互運用 WinMD(Windows Matadata)
  • 17. Not Only "Win"  壁があっちゃいけない  サーバーとクライアント開発で  初心者とプロで あまり名前が良くない  言語が違うからできない • WinRT用なのは残念  • Windowsに閉じていい技術じゃない フレームワークの作法が違うからできない • 壁のない世界をWindows以外にも欲しい  言語やフレームワークを超えた相互運用 WinMD(Windows Matadata)
  • 18. 現代風に再設計  .NETを参考にしたオブジェクト指向API  脱Win32  脱Variant  非同期API  XAML UI
  • 19. .NETを参考に  言われなければ.NETのライブラリかと間違うレベル 例 using (IRandomAccessStream readStream = await sampleFile.OpenAsync(FileAccessMode.Read)) { using (var dataReader = new DataReader(readStream)) { var size = (uint)readStream.Size; var bytesLoaded = await dataReader.LoadAsync(size); var fileContent = dataReader.ReadString(bytesLoaded); } } ※IRandomAccessStreamやDataReaderがWinRTクラス  型はしっかりしている(Variantとかない)  P/Invoke不要
  • 20. 非同期API  WinRTの方針: 50ミリ秒以上かかる可能性のあるAPIは 非同期APIしか提供しない  スレッドをブロックするのは思った以上にコストになる  UIスレッドを止めるとユーザーの印象悪い  同期処理するとまずい  まずいものは最初から提供しない
  • 21. XAML UI: 登場以前  プログラミング言語でのUI記述の限界 private void UpdatePageData() { panel.RemoveAll(); for (int i = 0; i < pageItems.Count; i++) { var item = pageItems[i]; 前と変わってないものまで再生成 ビューに状態持っちゃってて、 = item.Card; var cardCharacter CardThumbnailView card = card = CreateCardThumbnail(item); 仮想化†できない thumbnailList.Add(card); card.isDeckSet = item.IsDeckSet; card.gameObject.SetActiveRecursively(true); panel.AddItem(card.gameObject); } } • どこで、だれが、何を生成しているか全然わからない • 実行してみるまで表示結果がわからない • きっちりしたコード書くの大変(不正になりがち) †画面に見えている分だけビューを生成
  • 22. XAML UI: UIに特化した言語  ということでXAML† ツール連携:  WPF/Silverlightの延長 表示結果が常に見える HTML的な階層記述 XAML
  • 23. XAML UI: データ バインディング  ビューからのデータ、ロジックの分離 XAML 「ここにXを表示したい」 ビュー(表示部分)を記述 という印だけを入れる <ItemsControl ItemsSource="{Binding CardList}"> <ItemsControl.ItemTemplate> <DataTemplate> <Image Source="{Binding ImagePath}" Width="168" Height="254" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> + View.DataContext = new CardListViewModel { … }; C#など モデル(データ、ロジック)を記述 public class CardViewModel { public string ImagePath { get; } } public class CardListViewModel { public IList<CardViewModel> CardList { get; } }
  • 24. XAML UI: 共通型システム  WinRTクラスを書けば、UI要素を増やせる <ItemsControl ItemsSource="{Binding CardList}"> 単なるクラスの <ItemsControl.ItemTemplate> インスタンス生成 <DataTemplate> <Image Source="{Binding ImagePath}" Width="168" Height="254" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>  WinMDを介して言語中立  C++  .NET: C#, VB, etc.
  • 25. XAML UI: 共通型システム  WinRTクラスを書けば、UI要素を増やせる  ×コードでUI作ったり、  ×独自属性増やしたりはどうかと思う div = body.appendChild( div = document.createElement( "div" ) ); <div data-win-control="WinJS.Binding.Template"> $.extend( div.style, { <div data-win-bind="style.backgroundColor: backgroundColo minHeight: "100px", height: "auto", <div data-win-bind="textContent: title"></div> padding: 0, borderWidth: 0}); <div data-win-bind="textContent: description"></div> </div>
  • 27. 選択肢 Metro以外 WebとMetro デスクトップ Metro .NET ネイティブ HTML5 それぞれの利用場面は? C++ JavaScript それぞれにとってWinRTとは?
  • 28. 選択肢 Metro以外 Web デスクトップ Metro .NET ネイティブ HTML5 C++ JavaScript
  • 29. Web = 標準ベース  Web VS Metro 標準 VS プラットフォーム固有 高度なUIがほしければ 環境B クロス プラットフォーム 環境C プラットフォーム固有 を狙うなら標準ベースで 機能を使う 環境A 標準化指向 単一ベンダー指向 •○ 広い窓口 •○ 高機能 •× 機能が限られる •○ 迅速な新機能提供 •× 標準化に時間がかかる •× 狭い窓口
  • 30. クロス プラットフォーム  クロスに作るのはそう簡単じゃないけれども  ブラウザー依存排し切れない  どうせUIは作り直し  タッチかマウスか、画面サイズどのくらいか  やっぱりかなり間口が広い  数倍大変でも、数倍以上のアクセス見込めるなら まず第一にMetroの「高機能」が必要かどうか要検討 必要ないならWeb
  • 31. Metroに求める「高機能」  パフォーマンス  DirectX  ユーザー データ  Music/Pictures/Videos Library  ハードウェア  Microphone、Webcam、Location  無制限の通信  Proximity: 近距離デバイス間通信  認証  ドメイン参加  スマート カードなどでのハードウェア認証
  • 32. 選択肢 Metro以外 Web デスクトップ Metro .NET ネイティブ HTML5 C++ JavaScript
  • 33. デスクトップ アプリ  いきなりすべてのPCがタッチUIになるわけない  段階移行?  できるところからタッチ化  今はマウス&キーボードで、将来タッチ化  両方?  出先ではタッチ、オフィスではマウス&キーボード 今、デスクトップ アプリを作るなら? 注意: ARM版(Windows RT)はMetroのみ。デスクトップ不可
  • 34. Metroに近いのは?  アセンブリ構造が一番近いのはSilverlight  ただ、同じXAML UIなWPFも十分近い  WinRT=脱Win32  Win32が色濃いものはつらい  ×Windowsフォーム  ×MFC
  • 35. ただ1つだけ言えること  UIは陳腐化が激しい  Viewは短めの周期で差し替わる  Viewは極力小さく作るべき  Viewを小さく作る工夫  MVVMパターン  異なるUIフレームワークでModelを共有  Portable Class Library  Project Linker この辺りを押さえれば、 WPF/SilverlightからMetroへの移行 WPF/SilverlightとMetro同時開発 だいぶ楽
  • 36. Portable Class Library  異なるフレームワークで共通して使えるライブラリ  使えるクラスは共通部分に限られる ターゲットを切り替えること で使えるクラスが変わる ※ 現状だと「共通部分」が狭すぎて 使い勝手はあまり良くない。 本格化はもう1世代後かも。
  • 37. Project Linker  複数のプロジェクト間でソースコードを自動共有 共有元を指定 リンク ※ 現状、VS 2010のみ
  • 38. SilverlightかWPFか?  要件次第  Silverlight  デプロイ簡単  Smooth Streamingとかメディア系強い  WPF  フル機能の.NET  Windows 8であれば.NET 4.5標準搭載
  • 39. 選択肢 Metro以外 Web デスクトップ Metro .NET ネイティブ HTML5 C++ JavaScript
  • 40. .NETにとって: デスクトップとMetro デスクトップ OK Metro 1 ☎ アプリ アプリ 標準ライブラリ 標準ライブラリ WinRT • UI • LINQ • LINQ • UI • File • Task • Task • File • Network • MEF • MEF • Network • … • … • … CLR(.NETの実行環境) WinRTとの重複削除 ついでにレガシー削除 実行環境は共通
  • 41. .NETにとって: WinRT  かなり、Silverlightの延長  Silverlightも、中身はかなりInternal Call  つまり、中身はネイティブで、インターフェイスだけ.NET  一般開発者もそれできるようにしたようなもの  ネイティブだけど 結局、今まで通り  ネイティブと意識せず  タイムラグ0で利用可能 むしろ恩恵 なんだかんだ言って.NETは一番恩恵受けてる
  • 42. .NETにとって: WinMD/言語プロジェクション デスクトップと同じ実行環境 .NET ネイティブやJavaScript から使いたければ CLR ネイティブ/JavaScript プロジェクト タイプを winmd WinMDに *.winmd *.exe *.cs *.dll *.js .NETアプリ/ライブラリ exe/lib *.exe *.winmd *.dll *.cs .NET for WinRT Metro
  • 43. .NET for Metro Style  WinRTとの重複削除  UI、ファイル操作、通信ソケット、etc.  レガシー削除  非ジェネリック コレクション → ジェネリック版のみ  XmlSerializer → LINQ to XMLのみ  元々ポータビリティを考えて作らないと、デスク トップ版からの移植そこそこ大変  Viewからの分離  レガシーは使わない  まず、Portable Class Library化を考える
  • 44. WinRT→.NET  WinMDを介して通常の.NET型に見える  WinRT型→.NET型に、規約ベースで置き換え 対応表(一部) .NETの型 WinRTの型 IList<T> IVector<T> IReadOnlyList<T> IVectorView<T> IEnumerable<T> IIteratable<T> IDictionary<T> IMap<T>
  • 45. .NET→WinRT  利用可能な型  プリミティブ(intとか)、string  TimeSpan、DateTimeOffsetなど  利用可能なユーザー定義型  classはsealed(継承不可)なもののみ  structはpublicなフィールドだけ持つもののみ  ジェネリックは、IVector<T>など、決まった型のみ
  • 46. 選択肢 Metro以外 Web デスクトップ Metro .NET ネイティブ HTML5 C++ JavaScript
  • 47. ネイティブにとって: WinRT  基本的にCOM  C++/CXを使えば、自前実装不要  Win32 APIの呪縛からの脱却  WinRTは、現代的なすっきりしたクラス ライブラリに なってる  WPF的なUIのネイティブ実装  C++からWPF的なものが使える  ある意味ではWPFのパフォーマンス改善
  • 48. ネイティブの位置づけ  .NETでできることをネイティブでやっても意味ない 標準C++ DirectX 全部をネイティブ 性能が欲しければ 性能が欲しければ でやらない ネイティブ GPUを活用 GPUを活用 .NET/ C++ /CX C++ AMP GPU JavaScript 利用 連携 Component Extensions Accelerated Massive Parallelism
  • 49. C++/CX (1)  WinRTは内部的にはCOMなのだけども  COMめんどくさい  C++ with Component Extensions(C++/CX)  C++/CLIに似た構文で、COMコードを生成 (あくまでネイティブ) public ref class ImageWithLabelControl sealed : public Windows::UI::Xaml::Controls::Control { public: property Platform::String^ Label { Platform::String^ get() { return (Platform::String^)GetValue(LabelProperty); } void set(Platform::String^ value) { SetValue(LabelProperty, value); } } }; ※ WRLというライブラリを使って、自前でCOM実装も可能
  • 50. C++/CX (2)  オーバーヘッドを最小に *.winmd .NETやJavaScriptと相互運用可能 メタデータ (メタデータのみ。実際に呼ばれるのは ↓のCOM) CX COM相当の 他のCOMコンポーネントと相互運用可能 ネイティブ コード *.cpp (プレーンなネイティブ コードのラッパー) プレーンな ネイティブ コード オーバーヘッドなしで参照可能 (単なる仮想関数呼び出しに) 通常の プレーンな ネイティブ コード *.cpp
  • 51. C++ AMP  C++ Accelerated Massive Parallelism  C++でGPGPU†するための拡張  構文的にはrestrict句の追加のみ  ほとんどライブラリ int aCPP[] = {1, 2, 3, 4, 5}; int bCPP[] = {6, 7, 8, 9, 10}; int sumCPP[5] = {0, 0, 0, 0, 0}; array_view<int, 1> a(5, aCPP); array_view<int, 1> b(5, bCPP); ライブラリ array_view<int, 1> sum(5, sumCPP); 提供 parallel_for_each(sum.extent, [=](index<1> idx) restrict(amp) CPU実行かGPU実行か { をrestrict句で指定 sum[idx] = a[idx] + b[idx]; }); † General-purpose computing on GPU(GPUによる汎用目的計算)
  • 52. 選択肢 Metro以外 Web デスクトップ Metro .NET ネイティブ HTML5 C++ JavaScript
  • 53. JavaScriptにとって: WinRT  WinRTのUI(要するにXAML)は使わない  IEと同じ描画エンジン(Trident)で  IEと同じJavaScript実行エンジン(Chakra) JavaScript あくまで標準 .NET/ネイティブ Trident/Chakra HTML5 + *.winmd JavaScript WinRTの WinRT *.js *.html XAML UIは UI WinJS 使わない File +α (JavaScript Network ライブラリ) +α
  • 54. 標準+α (1): Metroに求める「高機能」  ユーザー データ  Music/Pictures/Videos Library  ハードウェア  Microphone、Webcam、Location  無制限の通信  Proximity: 近距離デバイス間通信  認証  ドメイン参加  スマート カードなどでのハードウェア認証
  • 55. 標準+α (2 ): WinJS  XAML相当のUIを書くためのJavaScriptライブラリ  ↓こんなHTMLを書く <div data-win-control="WinJS.Binding.Template"> <div data-win-bind="style.backgroundColor: backgroundColor"></div> <div data-win-bind="textContent: title"></div> <div data-win-bind="textContent: description"></div> </div>  data-なんとか属性…  独自属性使ってデータ バインディング  Blend5で編集可能  処理を行ってくれてるのはWinJS中のJavaScript  一応は、HTML5の規格の範囲
  • 56. HTML5+JavaScriptの位置づけ  UI用  +αがある時点で“別物”とはいえ…  HTML5とJavaScriptになじんだUIデザイナーは多い  ロジックは…  ViewModelまで.NETで作って、WinMD経由で参照するの がよいかも
  • 57. WinJSを使うかどうか  WinJSを使わない  UI部分に関しては完全に「標準」  UIガイドラインに沿ったUIを1から自前で作る必要あり  沿っていないと審査で落ちる可能性あり  ゲームならあまりうるさく言われない  WinJSを使う  ガイドライン通りのUIに  +αの部分を覚えるのはそれなりの負担  ならXAMLでいいのでは…
  • 58. まとめ Metro以外 Web デスクトップ Metro .NET ネイティブ HTML5 C++ JavaScript
  • 59. Web VS Metro  フル機能使いたかったらMetroで  GPU  Music/Pictures/Videos Library  Microphone、Webcam、Location  Proximity: 近距離デバイス間通信  ドメイン参加  スマート カードなどでのハードウェア認証  そんなの要らなかったらWebで
  • 60. デスクトップ  段階移行 or 同時開発  同じXAML UIのSilverlightかWPFならそこそこ楽  確実に言えること:  UI技術は陳腐化が激しい  Viewを極力小さく  SilverlightかWPFか  要件次第。それぞれの特徴を活かして
  • 61. Metro: .NET  SilverlightかWPFの経験者なら苦もなく作れる  XAML: Silverlightの延長線上  WinMD: .NETのメタデータの延長線上  開発しやすさは.NETが一番  特に非同期処理にはasync/await(C# 5.0)  サーバーとのコード共有の要求もたぶん出てくる  2重開発避けるためにも、サーバー側でも使える.NET
  • 62. Metro: ネイティブ  .NETでできることをネイティブでやっても意味ない  ハイ パフォーマンス  特にゲームや大規模データ処理  DirectX, C++ AMP GPUの活用
  • 63. Metro: HTML5+JavaScript  UI用  ロジックは.NETやC++で書いてしまう  WinMD経由で参照  利点はUIデザイナー人口多いこと  Metro HTMLは標準+αだけど…  +αある時点で…