$30 off During Our Annual Pro Sale. View Details »

デスクトップ アプリがこの先生きのこるには (2016)

デスクトップ アプリがこの先生きのこるには (2016)

まどすた #1 で発表した際の資料です。
https://roommetro.doorkeeper.jp/events/44062

//build/ 2016 で発表され、5/21 現在 Windows 10 Insider Preview で試すことができる「Desktop App Converter」について、その概要と、デスクトップ アプリ開発者への影響について解説。

Grabacr07

May 21, 2016
Tweet

More Decks by Grabacr07

Other Decks in Technology

Transcript

  1. デスクトップ
    アプリがこの先生
    きのこるには //2016
    2016/05/21 Madosta #1 / CSUG
    Manato KAMEYA (@Grabacr07)

    View Slide

  2. Agenda
    Goal
    Project Centennial (Desktop App Converter) の概要
    Windows Desktop App -> UWP App への移行パス
     Desktop App Converter が与える影響

    View Slide

  3. Self Introduction
    亀谷学人 (かめやまなと)
    • 1987年生まれ
    • 仙台出身 / 東京在住
    Windows Study Meeting (まどすた) staff
    Microsoft MVP for Visual Studio and Development Technologies 長いよ。
    • ソフトウェア エンジニア
    • クライアント設計 / C# / XAML
    Twitter: @Grabacr07
    Facebook: manato.kameya
    Blog: http://grabacr.net/

    View Slide

  4. My Apps
    KanColleViewer
    「艦これ」 プレイング ツール
    C# + WPF (.NET Framework 4.6.2)
    SylphyHorn
    仮想デスクトップ ツール
    アクティブ ウィンドウごと移動

    View Slide

  5. Windows Bridge の行方
    //build/ 2015 ~

    View Slide

  6. 遡ること 1 年前…

    View Slide

  7. //build/ 2015
    Windows Store
    Universal Windows Platform
    .NET & Win32
    Web Android (Java/C++) iOS (Objective C)
    Windows Bridge

    View Slide

  8. Windows Bridge
    既存アプリの UWP 化
    Windows 10 (UWP) で動作する形式に変換する技術、およびツール群
    Windows Bridge for Android (Project Astoria)
    Windows Bridge for iOS (Project Islandwood)
    Windows Bridge for Classic Windows apps (Project Centennial)
    Windows Bridge for Web apps (Project Westminster)

    View Slide

  9. Windows Bridge
    既存アプリの UWP 化
    Windows 10 (UWP) で動作する形式に変換する技術、およびツール群
    Windows Bridge for Android (Project Astoria)
    Windows Bridge for iOS (Project Islandwood)
    Windows Bridge for Classic Windows apps (Project Centennial)
    Windows Bridge for Web apps (Project Westminster)
    このあと話すやつ

    View Slide

  10. 特に続報もなく、時は過ぎる
    (その間、@Grabacr07 は迷走)

    View Slide

  11. Kind of Windows app
    Classic Desktop app
    従来のアプリケーション (.exe で実行するやつ)
    基本的になんでもできる
    Universal Windows Platform app
    Windows ストアで配布されるアプリケーション
    いろんなデバイスで動く

    View Slide

  12. My Apps
    WPF, IE Shell, Key hook, etc.
    やりたい放題系アプリ
    Kind of Windows app
    Classic Desktop app
    従来のアプリケーション (.exe で実行するやつ)
    基本的になんでもできる
    Universal Windows Platform app
    Windows ストアで配布されるアプリケーション
    いろんなデバイスで動く

    View Slide

  13. Distribution
    アプリの配布をどうするか
    Classic Windows app の悩みどころ
    UWP だったら 配布はストアにお任せカンタン
    やりたい放題系なので UWP になるわけがない

    View Slide

  14. Distribution
    アプリの配布をどうするか
    Classic Windows app の悩みどころ
    UWP だったら 配布はストアにお任せカンタン
    やりたい放題系なので UWP になるわけがない
    KanColleViewer の思い出
    レンサバ追い出されたり (アクセス過多)
    MSDN 無料枠使い切って課金されたり
    公開から 2 年半
    約 350 万 DL

    View Slide

  15. TouchMe Gesture Studio
    自力解決してるアプリ
    Windows Store 8.1 + Classic Desktop
    Project Centennial には頼っていない
    主機能・動作エンジンは
    Classic Desktop app として提供
    主機能インストーラー DL、
    課金、ユーザー設定の UI を
    Windows Store app として提供

    View Slide

  16. UWP + .NET
    その手があったか…!
    UWP (フロントエンド) + .NET (エンジン) はアリなのか ?
     ストアで検索してインストールして設定するまで UWP
     実際にバックグラウンドで動作しているのは .NET
    SylphyHorn app SylphyHorn.exe

    View Slide

  17. UWP + .NET
    SylphyHorn でやってみた
    UWP アプリを起動して、
    エンジンのインストーラーを
    ダウンロードさせる

    View Slide

  18. UWP / .NET Bridge
    両アプリの繋ぎこみ
    ストア アプリのデータは %LocalAppData%¥Packages へ
    アプリのパッケージ名が判れば保存先が確定する
    SylphyHorn app SylphyHorn.exe
    Settings.xml
    Write
    Read
    Read
    FileSystemWatcher

    View Slide

  19. UWP / .NET Bridge
    両アプリの繋ぎこみ
    SylphyHorn app SylphyHorn.exe
    Settings.xml
    Write
    Read
    Read
    FileSystemWatcher
    await ApplicationData.Current
    .LocalFolder
    .GetFileAsync("Settings.xml");
    var path = Path.Combine(
    Environment.GetFolderPath(
    Environment.SpecialFolder.LocalApplicationData),
    "Packages",
    "46846grabacr.net.SylphyHorn_vwznf8jfphrrc",
    "LocalState",
    "Setting.xml");

    View Slide

  20. UWP + .NET
    結論
    申請通った(機械審査)
    bit.ly/SylphyHornApp
    Project Centennial は
    生きてるのかわからんし…
    UWP + WPF は
    存在が許された!

    View Slide

  21. この話をサトヤ仙台で発表 (3 月下旬)
    この数日後に…

    View Slide

  22. デスクトップ アプリを UWP へ
    Project Centennial

    View Slide

  23. Project Centennial は生きていた!

    View Slide

  24. Project Centennial
    UWP パッケージ化
    既存の Win32 / .NET アプリを UWP と同じパッケージ化する
    パッケージ化だけで、中身は元のバイナリのまま … なので当然 10 Mobile では動作不可

    View Slide

  25. Desktop App Converter
    Desktop app -> AppX 変換ツール
    Windows 10 Insider Preview 14316 で提供開始
    インストーラーから AppX (UWP 配布パッケージ) を生成
    .msi をサイレント モードで動作させ、展開されたファイルをパッケージ化する感じ
    MSI AppX
    ※ //build/ 2016 資料から引用

    View Slide

  26. WiX Toolset
    モダンなインストーラー
    Windows Installer (.msi) を作る
    Bootstrapper (.exe) を作る
    .msi をサイレント モードで
    カスタム UI を内臓
    (なので WPF 等々ご自由に)
    WPF + MVVM library (Livet) + Custom theme (MetroRadiance)、やりたい放題!!!

    View Slide

  27. Desktop App Converter
    Windows 10 Insider Preview (Fast Ring)
    14316 (4/7) … Bash、仮想デスクトップ改善、Dark テーマ
    14328 (4/22) … UI 刷新 (Start menu, UAC ダイアログがキモい)
    14332 (4/26) … あんまり覚えてない
    14342 (5/10) … UAC ダイアログが青くなった

    View Slide

  28. Desktop App Converter
    Windows 10 Insider Preview (Fast Ring)
    14316 (4/7) … Bash、仮想デスクトップ改善、Dark テーマ
    14328 (4/22) … UI 刷新 (Start menu, UAC ダイアログがキモい)
    14332 (4/26) … あんまり覚えてない
    14342 (5/10) … UAC ダイアログが青くなった
    Windows 10 Enterprise における
    Desktop App Converter のサポート
    Windows 10 Pro / Enterprise における
    Desktop App Converter のサポート
    14328, 14332では
    Desktop App Converter は
    動作しない (Known issue)

    View Slide

  29. Setup the Desktop App Converter
    必須環境
    Windows 10 Enterprise (or Pro) x64 Insider Preview build 14342
    ハードウェア要件 (x64 processor, Hardware-assisted virtualization, SLAT)
    Windows SDK for Windows 10 (推奨)
    ファイルと入手先
    DesktopAppConverter.zip, BaseImage-14342.wim (3.2 GB)
    https://www.microsoft.com/en-us/download/details.aspx?id=51691

    View Slide

  30. Setup the Desktop App Converter
    セットアップ
    ※ 管理者権限で実行 (Setup, Conversion, ぜんぶ)
    .¥DesktopAppConverter.ps1
    -Setup `
    -BaseImage .¥BaseImage-14316.wim `
    -Verbose

    View Slide

  31. Conversion and Deployment
    Evernote を UWP パッケージ化
    DL してきたインストーラーを使って PowerShell 叩くだけ
    .¥DesktopAppConverter.ps1 `
    -ExpandedBaseImage "C:¥ProgramData¥Microsoft¥Windows¥Images¥BaseImage-14342" `
    -Installer 'C:¥Users¥grabacr07¥Work¥Evernote¥Evernote_6.0.6.1769.exe' `
    -InstallerArguments "/quiet DISABLEADTSHORTCUTS=1" `
    -Destination 'C:¥Users¥grabacr07¥Work¥Evernote¥Output' `
    -AppExecutable 'C:¥Program Files (x86)¥Evernote¥Evernote¥evernote.exe' `
    -PackageName Evernote `
    -PackageDisplayName Evernote `
    -Publisher "CN=grabacr.net" `
    -PackagePublisherDisplayName "Reserved" `
    -Version 1.0.0.0 `
    -MakeAppx `
    -Verbose
    Demo

    View Slide

  32. Conversion and Deployment
    Evernote を UWP パッケージ化
    出力先に AppX が生成されている
    デプロイは AppxManifeset.xml で Add-AppxPackage
    Demo
    Add-AppxPackage -Register "C:¥Users¥grabacr07¥Work¥Evernote¥Output¥AppxManifest.xml"

    View Slide

  33. Benefit of the Desktop App Converter
    UWP パッケージ化で得られる恩恵
    個人開発者: Windows Store で公開できる & マネタイズ
    企業・組織: side loading / MDM が楽に? (やったことない)
    Filesystem / Registry への書き込みをリダイレクト処理
     Registry 肥大化の防止
    クリーンなインストール・アンインストール
    (ユーザーにとってのメリット)

    View Slide

  34. Bridge to the UWP
    UWP アプリへの 5 つのステップ
    Convert Enhance Extend Migrate Expand

    View Slide

  35. Bridge to the UWP
    Step 1: Convert
    Desktop app (.msi) から
    UWP (.appx) を作成 & デプロイ
    Windows Store への提出
    シームレスなアップデート
    クリーンなアンインストール
    Classic Windows App
    Universal App Package

    View Slide

  36. Bridge to the UWP
    Step 2: Enhance
    Desktop app 内部から
    UWP の API を呼び出し
    ライブ タイルのサポート
    Actionable Notifications (トースト通知操作)
    Cortana
    他いろいろ
    Universal App Package
    Universal Windows API
    Classic Windows App
    Demo

    View Slide

  37. Bridge to the UWP
    Step 3: Extend
    UWP App Service や
    Background tasks 等の機能追加
    UWP App と Desktop App の共存
     エントリー ポイントは UWP App 側へ
     両者は App Service で通信
    フロントエンドを XAML / コアを Win32 とか
    File Picker UI
    Universal App Package
    Universal Windows App
    Classic Windows App
    Demo

    View Slide

  38. Bridge to the UWP
    Step 4: Migrate
    UWP 成分増やしていこうな
    がんばろう
    Universal App Package
    Universal Windows App
    Classic Windows App

    View Slide

  39. Bridge to the UWP
    Step 5: Expand
    すべてのコードを UWP で
    様々な Windows デバイスへ…
    ここまでできないアプリも
    それなりにあるだろうとは思う
    // 正直、Visual Studio と Office を
    // Full UWP にしてから出直してきて…
    Universal App Package
    Universal Windows App

    View Slide

  40. Desktop App Converter
    Bridge to the UWP
    UWP アプリへの 5 つのステップ
    将来的に UWP アプリへ移行してほしい (って Microsoft が言ってる)
    Desktop App Converter は Step 2 までを実現するツール
    Convert Enhance Extend Migrate Expand

    View Slide

  41. Future prospects
    個人的には期待している
    Step 2, Step 3 が一番面白そう
    今回間に合わなかったところ
    変換されたデスクトップ アプリのデバッグ
    Visual Studio “15” Preview 2 が必要で環境作れなかった
    デスクトップ対象に絞れば
    Desktop + UWP コラボレーションで
    良いとこ取りできそう?

    View Slide