SlideShare a Scribd company logo
Visual Studio 2019で始める
「WPF on .NET Core 3.0」開発
Desktop App Dev Strategy for .NET Core 3.0
Atsushi Nakamura
Desktop App Dev Strategy for .NET Core 3.0
Overview
Overview
Slide 3Copyright 2019 @nuits_jp
主に次の二つについて、お伝えしたいと思います。
1. WPFを.NET Coreで開発するモチベーション
2. .NET Core移行の「感覚」
Desktop App Dev Strategy for .NET Core 3.0
About Me
About Me
Copyright 2019 @nuits_jp Slide 5
中村 充志 / Atsushi Nakamura
• リコージャパン株式会社 所属
• Enterprise(金融)系SIerのITアーキテクト
• アプリケーションアーキテクチャを試行錯誤するのが趣味
• 2019年の目標
• 「世界一簡単なクリーンアーキテクチャ」で登壇したい
• 「xUnit & Moqハンズオン」開催
• 「RICOH Handy Printerハンズオンとか?」やりたいな?
• Blog http://www.nuits.jp
• Blog(英語) https://blog.nuits.jp
• Twitter @nuits_jp
.NET Core 使ってますか?
Copyright 2019 @nuits_jp Slide 6
.NET Core 3.0でWPFを動かしてみましたか?
Copyright 2019 @nuits_jp Slide 7
Desktop App Dev Strategy for .NET Core 3.0
おねがい
1. デモの中でサードパーティライブラリが登場しますが、その製品に
ついてはTwitterなどでの拡散は控えてください
2. 弊社の人間に、「某XXが製品コードでデモしてたよ!」と積極的に
伝えることはお控えください
おねがい
Desktop App Dev Strategy for .NET Core 3.0
WPFを.NET Coreで開発する「私の」モチベーションとは?
WPFを.NET Coreで開発する「私の」モチベーションとは?
1. .NET Core 3.0におけるWinForms・WPFのサポート
2. 開発の中心が.NET Coreへシフト
3. 魅力的な.NET Coreの特徴
デスクトップ アプリを.NET Coreで開発するモチベーションとは?
1. .NET Core 3.0におけるWinForms・WPFのサポート
2. 開発の中心が.NET Coreへシフト
3. 魅力的な.NET Coreの特徴
• 開発の中心はすでに.NET Coreへシフト
• .NET Frameworkへのポーティングは後方互換性重視
https://devblogs.microsoft.com/dotnet/announcing-net-standard-2-1/
• .NET Framework4.8は.NET Standard 2.0相当
• .NET Core 3.0は.NET Standard 2.1相当
• クラウドは.NET Core一択
開発の中心が.NET Coreへシフト
Copyright 2019 @nuits_jp Slide 13
デスクトップ アプリを.NET Coreで開発するモチベーションとは?
1. .NET Core 3.0におけるWinForms・WPFのサポート
2. 開発の中心が.NET Coreへシフト
3. 魅力的な.NET Coreの特徴
魅力的な.NET Coreの特徴
• Side by Sideの復活
• Runtimeを同梱して配布可能(たったの60Mぽっち)
• 軽快な動作速度を含む、先進的な機能の採用
ついに.NET Framework 4.0とおさらばだ!(某金融向SIer)
.NET Framework 3.5で頑張らないでいいんですね!涙(某金融向SIer)
Copyright 2019 @nuits_jp Slide 15
で、.NETCoreでWPFって現実的なの?
Copyright 2019 @nuits_jp Slide 16
Desktop App Dev Strategy for .NET Core 3.0
.NET Framework → .NET Core Live Migration
!注意事項!
1. 本マイグレーションは、移行における「感覚」を理解しやすいと思
われる手順で実施しています
2. 実際の移行案件では以下の公式ドキュメントを参照してください
• .NET Framework から .NET Core にコードを移植する
https://docs.microsoft.com/ja-jp/dotnet/core/porting/
• WPF デスクトップ アプリを .NET Core に移植する
https://docs.microsoft.com/ja-jp/dotnet/core/porting/wpf
注意事項
実業務レベルのアプリをMigration
Copyright 2019 @nuits_jp Slide 20
対象アプリの特徴
• .NET Framework 4.5.2
• 大き目な.NET Framework製のサードパーティライブラリ
• ビルドしたDLLの編集(静的コード生成)
• TWAIN制御(.NET→COM→Win32 API 32bit driver)
• System.Drawing.Bitmapに依存(つまりGDI+に依存)
Copyright 2019 @nuits_jp Slide 21
Let’s Migration!
Copyright 2019 @nuits_jp Slide 22
.NET Frameworkでは標準で参照できたパッケージが.NET Coreでは標準
では参照できない可能性があります。
次のいずれかで、概ね解消できます。
1. NuGetから同名のパッケージを適用する
2. Windows 互換機能パックを利用する
https://docs.microsoft.com/ja-jp/dotnet/core/porting/windows-compat-pack
とはいえ、無いものもあります。その話は後程。
Point 1
Copyright 2019 @nuits_jp Slide 23
To Migration again.
Copyright 2019 @nuits_jp Slide 24
.NET Coreで正式に非対応なものも存在します。
AppDomain、.NET Remoting、コード アクセス セキュリティ (CAS)、透過的
セキュリティコードなど。
https://docs.microsoft.com/ja-jp/dotnet/core/porting/net-framework-tech-unavailable
• 自分のコード内の場合
→ .NET Portability Analyzerでチェックし別の実現手段を採用
https://docs.microsoft.com/ja-jp/dotnet/standard/analyzers/portability-analyzer
• サードパーティ コード内の場合
→ .NET Coreもしくは.NET Standard対応ライブラリに変更
Point 2
Copyright 2019 @nuits_jp Slide 25
ちょっと待って!
Copyright 2019 @nuits_jp Slide 26
なんで.NET Frameworkプロジェクトを参照できるの??
Copyright 2019 @nuits_jp Slide 27
Xamarinを例に考えると(私には)分かりやすい
Copyright 2019 @nuits_jp Slide 28
UserSideFrameworkSide
System.IO.File
for .NET Standard
My Class Library
for .NET Standard
My Application User Interface
for .NET Standard
Build時Android実行時 iOS実行時
System.IO.File
for Mono.Android
My Class Library
for .NET Standard
My Application User Interface
for .NET Standard
Mono.Android
Runtime
java.io.File
My Class Library
for .NET Standard
My Application User Interface
for .NET Standard
System.IO.File
for Mono.iOS
Mono.iOS
Runtime
NSFileManager
?
and SwitchBait
.NET Frameworkと.NET Coreの場合
Copyright 2019 @nuits_jp Slide 29
UserSideFrameworkSide
.NET Framework
Runtime
Win32 API
System.IO.File
for .NET Framework
My Class Library
for .NET Framework
My Application
for .NET Framework
Original
.NET Core
Windows Runtime
Win32 API
System.IO.File
for .NET Core
My Class Library
for .NET Framework
My Application
for .NET Core
.NET Coreで実行時.NET CoreでBuild時
System.IO.File
for .NET Framework
My Class Library
for .NET Framework
My Application
for .NET Core
and SwitchBait
なぜ.NET Frameworkのプロジェクト参照が通るのか
理由は主に2点
• 中間言語(CIL)は共通仕様である
• ネイティブ呼び出しは元々サポートされている
従って条件を満たせば、.NET Frameworkでビルドしたモジュール
も.NET Coreから利用可能です。
Copyright 2019 @nuits_jp Slide 30
.NET Frameworkと.NET Coreの場合
多分こんなイメージ(ちょっと間違ってるかも?
Copyright 2019 @nuits_jp Slide 31
UserSideFrameworkSide
.NET Framework
Runtime
Win32 API
System.IO.File
for .NET Framework
P/Invoke
My Class Library
for .NET Framework
My Application
for .NET Framework
.NET Core
Runtime
Win32 API
System.IO.File
for .NET Core
P/Invoke
My Class Library
for .NET Framework
My Application
for .NET Core
.NET Frameworkと.NET Coreの場合
多分こんなイメージ(ちょっと間違ってるかも?
Copyright 2019 @nuits_jp Slide 32
UserSideFrameworkSide
.NET Framework
Runtime
Win32 API
System.IO.File
for .NET Framework
P/Invoke
My Class Library
for .NET Framework
My Application
for .NET Framework
.NET Core
Runtime
Win32 API
System.IO.File
for .NET Core
P/Invoke
My Class Library
for .NET Framework
My Application
for .NET Core
この二つは完全に別物です
My Class Libraryから利用している
クラス・メソッドがCoreに存在しない
場合、実行時エラーとなります
1. .NET Frameworkでビルドされたモジュールも動作する可能性はある
.NET Framework 互換モード
https://docs.microsoft.com/ja-jp/dotnet/core/porting/third-party-deps#net-framework-compatibility-mode
2. ただし直接・関節的に.NET Coreでサポートされていない物に依存してい
る可能性がある
3. サードパーティの.NET Frameworkライブラリが.NET Core上で正常動作す
るかどうか、.NET Portability Analyzerではわからない(と思う)
4. 一時的に動作していても、内部分岐で突如動かなくなる可能性がある
5. 可能な限り.NET Coreもしくは.NET Standard対応ライブラリを利用する
Point 3
Copyright 2019 @nuits_jp Slide 33
To Migration again.
Copyright 2019 @nuits_jp Slide 34
不安視してたけど問題なかった箇所
• ビルドしたDLLの編集(静的コード生成)
• TWAIN制御(.NET→COM→Win32 API 32bit driver)
• System.Drawing.Bitmapに依存(つまりGDI+に依存)
Copyright 2019 @nuits_jp Slide 35
まとめ
Copyright 2019 @nuits_jp Slide 36
1. .NET CoreのWPFサポートは非常に魅力的です
2. 移行は(依存ライブラリが.NET Standard対応してれば)そう難しくない!
3. まずは公式ドキュメントを参照
• .NET Framework から .NET Core にコードを移植する
https://docs.microsoft.com/ja-jp/dotnet/core/porting/
• WPF デスクトップ アプリを .NET Core に移植する
https://docs.microsoft.com/ja-jp/dotnet/core/porting/wpf
4. .NET Framework製のライブラリは
.NET Coreもしくは.NET Standardへ全て移行推奨
→ 動作する可能性はあるが、特定の条件下で.NET Core
未サポートのAPIを利用している可能性があり危険
まとめ
Copyright 2019 @nuits_jp Slide 37
ThankYou!
Any Questions?

More Related Content

What's hot

第79回 Machine Learning 15minutes ! 生成AIをエンタープライズで活用するWatsonx.aiの紹介
第79回 Machine Learning 15minutes ! 生成AIをエンタープライズで活用するWatsonx.aiの紹介第79回 Machine Learning 15minutes ! 生成AIをエンタープライズで活用するWatsonx.aiの紹介
第79回 Machine Learning 15minutes ! 生成AIをエンタープライズで活用するWatsonx.aiの紹介
Tsuyoshi Hirayama
 
いまなぜドメイン駆動設計か
いまなぜドメイン駆動設計かいまなぜドメイン駆動設計か
いまなぜドメイン駆動設計か
増田 亨
 
データモデリング・テクニック
データモデリング・テクニックデータモデリング・テクニック
データモデリング・テクニック
Hidekatsu Izuno
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
Takuya Kawabe
 
5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ
CLARA ONLINE, Inc.
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
 
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門
Toru Matsuoka
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
Yahoo!デベロッパーネットワーク
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本
Sotaro Kimura
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
NTT DATA OSS Professional Services
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
Yoshitaka Kawashima
 

What's hot (20)

第79回 Machine Learning 15minutes ! 生成AIをエンタープライズで活用するWatsonx.aiの紹介
第79回 Machine Learning 15minutes ! 生成AIをエンタープライズで活用するWatsonx.aiの紹介第79回 Machine Learning 15minutes ! 生成AIをエンタープライズで活用するWatsonx.aiの紹介
第79回 Machine Learning 15minutes ! 生成AIをエンタープライズで活用するWatsonx.aiの紹介
 
いまなぜドメイン駆動設計か
いまなぜドメイン駆動設計かいまなぜドメイン駆動設計か
いまなぜドメイン駆動設計か
 
データモデリング・テクニック
データモデリング・テクニックデータモデリング・テクニック
データモデリング・テクニック
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
 
5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
第16回Lucene/Solr勉強会 – ランキングチューニングと定量評価 #SolrJP
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 

Similar to Visual Studio 2019で始める「WPF on .NET Core 3.0」開発

Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
Atsushi Nakamura
 
Netmf-180224
Netmf-180224Netmf-180224
Netmf-180224
Atomu Hidaka
 
WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0
ShinichiAoyagi
 
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
de:code 2017
 
そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?
Yuta Matsumura
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
m ishizaki
 
.NET Core 3.0 に備えよう
.NET Core 3.0 に備えよう.NET Core 3.0 に備えよう
.NET Core 3.0 に備えよう
m ishizaki
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
Akira Inoue
 
WPF on .NET Core 3.0
WPF on .NET Core 3.0WPF on .NET Core 3.0
WPF on .NET Core 3.0
一希 大田
 
.NET Conf 2019 のデスクトップアプリに関するセッションについて
.NET Conf 2019 のデスクトップアプリに関するセッションについて.NET Conf 2019 のデスクトップアプリに関するセッションについて
.NET Conf 2019 のデスクトップアプリに関するセッションについて
Takuhiro Fukumori
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
Yuki Igarashi
 
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
日本マイクロソフト株式会社
 
[Japan Tech summit 2017] APP 001
[Japan Tech summit 2017] APP 001[Japan Tech summit 2017] APP 001
[Japan Tech summit 2017] APP 001
Microsoft Tech Summit 2017
 
より良い登壇を目指して今すぐできること re:Master #devio2020
より良い登壇を目指して今すぐできること re:Master #devio2020より良い登壇を目指して今すぐできること re:Master #devio2020
より良い登壇を目指して今すぐできること re:Master #devio2020
Genki Fujii
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tye
Yuta Matsumura
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
Takashi Okawa
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返る
Yuta Matsumura
 

Similar to Visual Studio 2019で始める「WPF on .NET Core 3.0」開発 (20)

Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
 
Netmf-180224
Netmf-180224Netmf-180224
Netmf-180224
 
WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0WPF & Windows Forms on .NET Core 3.0
WPF & Windows Forms on .NET Core 3.0
 
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
 
そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?そろそろレガシーな.Net開発をやめなイカ?
そろそろレガシーな.Net開発をやめなイカ?
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
 
.NET Core 3.0 に備えよう
.NET Core 3.0 に備えよう.NET Core 3.0 に備えよう
.NET Core 3.0 に備えよう
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
 
WPF on .NET Core 3.0
WPF on .NET Core 3.0WPF on .NET Core 3.0
WPF on .NET Core 3.0
 
.NET Conf 2019 のデスクトップアプリに関するセッションについて
.NET Conf 2019 のデスクトップアプリに関するセッションについて.NET Conf 2019 のデスクトップアプリに関するセッションについて
.NET Conf 2019 のデスクトップアプリに関するセッションについて
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
【de:code 2020】 Build 2020 最新情報 〜 Azure & Visual Studio & .NET 〜
 
[Japan Tech summit 2017] APP 001
[Japan Tech summit 2017] APP 001[Japan Tech summit 2017] APP 001
[Japan Tech summit 2017] APP 001
 
より良い登壇を目指して今すぐできること re:Master #devio2020
より良い登壇を目指して今すぐできること re:Master #devio2020より良い登壇を目指して今すぐできること re:Master #devio2020
より良い登壇を目指して今すぐできること re:Master #devio2020
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
マイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tyeマイクロサービス開発が捗る Project Tye
マイクロサービス開発が捗る Project Tye
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返る
 

More from Atsushi Nakamura

Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフトSettings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Atsushi Nakamura
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
 
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Atsushi Nakamura
 
世界一わかりやすいClean Architecture - DroidKaigiバージョン
世界一わかりやすいClean Architecture - DroidKaigiバージョン世界一わかりやすいClean Architecture - DroidKaigiバージョン
世界一わかりやすいClean Architecture - DroidKaigiバージョン
Atsushi Nakamura
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview
Atsushi Nakamura
 
世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1
Atsushi Nakamura
 
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
Atsushi Nakamura
 
継続的にテスト可能な設計を考える ベータ版
継続的にテスト可能な設計を考える ベータ版継続的にテスト可能な設計を考える ベータ版
継続的にテスト可能な設計を考える ベータ版
Atsushi Nakamura
 
α版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考えるα版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考える
Atsushi Nakamura
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そう
Atsushi Nakamura
 
Old:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そうOld:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そう
Atsushi Nakamura
 
Xamarin.forms navigation overview
Xamarin.forms navigation overviewXamarin.forms navigation overview
Xamarin.forms navigation overview
Atsushi Nakamura
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そう
Atsushi Nakamura
 
Blue monkey architecture overview
Blue monkey architecture overviewBlue monkey architecture overview
Blue monkey architecture overview
Atsushi Nakamura
 
Xamarin Dev days 2 xamarin.forms ja
Xamarin Dev days 2   xamarin.forms jaXamarin Dev days 2   xamarin.forms ja
Xamarin Dev days 2 xamarin.forms ja
Atsushi Nakamura
 
Why prism for xamarin.forms
Why prism for xamarin.formsWhy prism for xamarin.forms
Why prism for xamarin.forms
Atsushi Nakamura
 
Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性
Atsushi Nakamura
 

More from Atsushi Nakamura (18)

Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフトSettings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
 
世界一わかりやすいClean Architecture - DroidKaigiバージョン
世界一わかりやすいClean Architecture - DroidKaigiバージョン世界一わかりやすいClean Architecture - DroidKaigiバージョン
世界一わかりやすいClean Architecture - DroidKaigiバージョン
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview
 
世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1
 
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
 
継続的にテスト可能な設計を考える ベータ版
継続的にテスト可能な設計を考える ベータ版継続的にテスト可能な設計を考える ベータ版
継続的にテスト可能な設計を考える ベータ版
 
α版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考えるα版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考える
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そう
 
Old:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そうOld:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そう
 
Xamarin.forms navigation overview
Xamarin.forms navigation overviewXamarin.forms navigation overview
Xamarin.forms navigation overview
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そう
 
Blue monkey architecture overview
Blue monkey architecture overviewBlue monkey architecture overview
Blue monkey architecture overview
 
Xamarin Dev days 2 xamarin.forms ja
Xamarin Dev days 2   xamarin.forms jaXamarin Dev days 2   xamarin.forms ja
Xamarin Dev days 2 xamarin.forms ja
 
Why prism for xamarin.forms
Why prism for xamarin.formsWhy prism for xamarin.forms
Why prism for xamarin.forms
 
Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性
 

Recently uploaded

MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツールMOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
TsuyoshiSaito7
 
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
Toru Tamaki
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo Lab
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo Lab
 
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
たけおか しょうぞう
 
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
Hironori Washizaki
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
Takayuki Nakayama
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
Natsutani Minoru
 
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
shogotaguchi
 
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
TsuyoshiSaito7
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo Lab
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
Sony - Neural Network Libraries
 
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
Takuya Minagawa
 
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
iPride Co., Ltd.
 

Recently uploaded (14)

MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツールMOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
 
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
 
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
 
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
 
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
 
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
 
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
 
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
 

Visual Studio 2019で始める「WPF on .NET Core 3.0」開発

Editor's Notes

  1. みなさんこんにちは。 ご紹介いただきました。ニュイこと中村です。 今日は Visual Studio 2019で始める「WPF on .NET Core 3.0」開発 というTitleでお話しさせていただきます。 よろしくお願いいたします。
  2. さて、まず初めに本日の概要についてお話します。
  3. 本日は、主に次の二つについてお話しします。 まず初めに、そもそもデスクトップアプリを なぜ.NET Coreで実装するのか?したいのか? そのモチベーションについて再確認したいと思います。 その後、実際に.NET Frameworkで作られた WPFのアプリケーションを.NET Coreに移行しつつ 移行の「感覚」をとらえて貰えたらと思います。 「感覚」と表現したのは意図があります。 移行の詳細をもれなく理解するには公式のドキュメントを読んでいただくのが最良でしょう。 本セッションではモチベーションから具体的な計画につながる そのハザマの「現実的に可能だ」という感覚を理解してもらいたいと思っています。 時間の関係上、前者はさらっとお話しして、基本的に後半をじっくりやりたいと思います。
  4. さて、本題に入る前に簡単に自己紹介をさせてください。
  5. 中村充志と申します。 リコージャパンという会社で 主に金融機関向けのEnterprise系SIerでITアーキテクトをやらせてもらっています。 アプリケーションアーキテクチャをうだうだ考えるのが趣味で、今年は「世界一簡単なクリーンアーキテクチャ」ってタイトルでどこかで登壇したいなと思ってます。 あと最近界隈で人気の弊社のハンディプリンタを触ったり遊べるイベント企画してみたいと思ってますが、会社がOKくれるか分かりません。 興味ある方はぜひTwitterをフォローください。 悲しみばかりが流れてくるかもしれませんが。 というわけで、本題に入る前に、二つほど質問させてください。
  6. 一つ目! もうすでに.NET Coreを仕事に使ってるよって方、どの程度いらっしゃいますか?
  7. 二つ目! .NET CoreでWPFを動かしてみたよって方はどの程度いますか?
  8. ありがとうございます。 コメント さて、始める前に二点、お願いがあります。
  9. 今回のデモの中で某サードパーティさんのライブラリがでてきますが、該当製品について言及したい訳ではありませんので、製品についてTwitterなどで拡散するのは控えていただけたらと思います。 あと今回のデモのコードは、ガチで弊社の業務アプリを使います。 会社内緒でもってきたので、私が製品コードでデモしてたよ!というのは弊社の人間には内緒にしておいていただけると助かります。 というのは半分冗談です。基本的には私の裁量の範疇に収まる話なので気にしていただかなくて大丈夫です。
  10. では早速、本題に入りたいと思います。
  11. デスクトップアプリケーションを.NET Coreで開発したい、その本質的な理由はどこにあるのか? まずそこからお話ししたいと思います。 私は主に次の3点から、Coreを利用したいと考えています。 ①まず第一に、.NET Core 3.0から、WPFやWinFormsがサポートされたということ。 ②つぎに、すでに開発の中心が.NET Frameworkから.NET Coreにシフトしているということ ③最後に.NET Coreが非常に魅力的な特徴を持っているということ この3点です。 一番目は良いとして、2番以降をもう少し掘り下げてお話ししたいと思います。
  12. まず、開発の中心が.NET Coreにシフトしているという点について
  13. 実はすでに.NETの開発の中心は.NET FrameworkからCoreにシフトしています。 現在、.NET Frameworkへのポーティングは後方互換性を重視して行われています。 したがって、最先端の技術はCoreでだけ利用できるということが実際に起こり始めています。 実際、つい先日リリースされた.NET Framework4.8では.NET Standard 2.1のサポートは見送られていますし そうではなくても、クラウドファーストが推進されている現在、クラウドでの利用は.NET Core一択だという現実もあります。
  14. また、Framework側のネガティブな問題だけではなく そもそもCoreが非常に魅力的だということがあります。
  15. 私が特に魅力を感じるところは、次の3点にあります。 ①ひとつはSide by Sideが復活し、異なるバージョンを共存して利用できるということ ②二つ目はRuntimeを事前にインストールしておかなくても、アプリに含めて配布できるということ ③そして軽快な動作速度を含む、先進的な機能の採用 です。 技術的な投資を効率化する上で、Frameworkに絞って投資する意味はあまりなく、Coreに集中したいというのが私の本音です。
  16. とはいえ、.NET Coreってクロスプラットフォーム用でしょ? WPF動かすなんて現実的にどうなの?という疑問はあるかと思います。
  17. そこで本セッションでは .NET Frameworkで書かれたアプリを.NET Coreにマイグレーションすることを通して そのあたりのポイントについて実際に感じていただけたらと思います。
  18. さて、実際にマイグレーションを見ていただく前に ひとつ注意していただきたい点があります。
  19. このマイグレーションはあくまで移行における「感覚」を理解していただくことを主眼においています。 実際に移行する際には、こちらの公式のドキュメントを参照して進めてください。
  20. では実際にマイグレーションする前に、どのような特徴をもったアプリなのか 簡単に説明しておきたいと思います。
  21. 対象のアプリケーションは実際に弊社で開発している業務アプリで かれこれ8年くらい熟成された全体としてはそこそこ大きなアプリの一部です。 アプリは.NET Framework 4.5.2という最新のフレームワークで開発されており 比較的大きな.NET Framework製のサードパーティライブラリを利用しています。 また、トラブりそうな要素として 静的コード生成を利用したDLLの書き換えや、COM経由でのスキャナードライバの呼び出し System.Drawing.Bitmapに代表されるようなWindowsに強く依存するコードが含まれています。 実際に移行デモをするのにそこそこ良い題材だと思います。
  22. ではマイグレーションを始めましょう。
  23. .NET Coreには.NET Frameworkにはあったけど、正式に対応しないことが明言されているものが存在します。 AppDomainや.NET Remotingなどで、詳細はこちらのリンクに記載があります。 このため、そういったものを利用している場合、自分のコードであれば.NET Portability Analyzerでチェックして別の実現手段によって解決する必要があります。 またサードパーティライブラリの場合は.NET Coreもしくは.NET Standard対応のライブラリに移行していただく必要があります。
  24. ところで、鋭い方はすでにお気づきかもしれません。
  25. なぜか .NET Core可したプロジェクトから.NET Frameworkのプロジェクトへ参照が設定されて、ビルドできています。 クロスプラットフォームプロジェクトから、プラットフォーム依存のコードが参照できては拙いのでは?という疑問が当然生まれますよね?
  26. このことは、私的にはXamarinの例をとって考えると非常にわかりやすいです。 Xamarinでは共通コードは.NET Standardで記載します。 ①.NET Standardで実装された共通のUIライブラリは ②.NET Standardで実装されたクラスライブラリを利用しているとします。 ③そのクラスの中でファイルIOを実装していたとしましょう。 そうした場合、実際にはどのように動作するでしょうか? ④例えばAndroidの場合はこうなります。 ビルド時には.NET StandardのFileクラスを参照してビルドしていましたが 実行時にはMono.Androidで実装されたFileクラスが呼び出されます。 そしてその中では、Androidのネイティブであるjava.io.Fileが呼び出されることによってファイル操作が実現されます。 ⑤iOSであっても同様です。 これは一般的に ⑥Bait ⑦And Switchと呼ばれる手法です。 元々は「おとり商法」の意味で、例えば不動産屋なんかで、ネットで有料広告を売っておいて店頭に言ったら 「いやお客さんその物件さっき契約されちゃいまして。ちょっと高いですけどこんな物件どうですか?」 といった最初から存在しないBaitつまり餌でつっておいて、Switchここでは小枝でむち打ちという意味だそうですが、Switchすることが語源だそうです。 .NET StandardのFileというBaitで釣っておいて、ビルドしておいて、実行時は各プラットフォームにSwitchするわけです。 この場合別に鞭打たれていませんけどね。
  27. では.NET FrrameworkとCoreに置き換えて考えてみましょう。 最初、すべてのモジュールは.NET Frameworkでビルドされていました。 ①そしてアプリケーションを.NET Coreに置き換えました。 しかしライブラリは依然Frameworkのままです。したがってライブラリが参照するのもFrameworkのFileクラスです。 ②これを実行すると、ランタイムはWindows用のCoreランタイムです。 従ってFileクラスは.NET CoreのWindows用のランタイムになります。 実行環境がLinuxならランタイムもFileクラスもLinux用のものになります。 つまりここで ③Bait and Switchが発生しているわけです。
  28. この状況で動作する特に重要なポイントは次の二つです。 ひとつは、中間言語は共通仕様であってFrameworkでもCoreでも変わりない事 そして別にWPFとは関係なく、もともと.NETからネイティブのAPIを呼び出す仕組みは.NET Frameworkにも.NET Coreにも備わっているからになります。 従って、条件を満たせば実のところ.NET Framework向けにビルドされたモジュールは.NET Coreでも動作します。
  29. ただもちろん注意は必要です。 この二つのFileクラスは
  30. 完全に別物になります。 例えばライブラリから利用しているメソッドが、Frameworkには存在しても、Coreには存在しないということは起こりえます。 この場合、ビルドは通って実行時エラーになります。
  31. というわけで三つ目のポイントです。 まずFrameworkでビルドされたモジュールも、Core環境で動作する可能性があります。 ただし、直接・間接的に.NET Coreでサポートされていない物に依存している可能性があります。 既にFrameworkビルド済みのサードパーティライブラリが、Coreで動作するかどうかは、.NET Portability Analyzerでは分からないと思います。多分。 また一時的に動作しても、内部分岐次第では、非常に低い確率で突如実行時エラーになるということがあり得ます。 このため、特別な理由があってFrameworkのライブラリを利用せざるを得ず、かつ利用しても問題がないという何らかの確証がないかぎり、基本的には.NET CoreやStandard対応のライブラリを利用したほうが安全だと思います。
  32. さて。それではマイグレーションの続きに戻りましょう。
  33. というわけで、一通り動作が確認できました。 今回、つぎのような技術要素について、不安視していましたが実際には問題なく動作してしまいました。 個人的には静的コード生成はFramework 4.5.2を対象にしていたことから、エラーになるつもりだったのですが、思った以上に素直に移行できてしまい驚いています。
  34. さて、最後にまとめましょう。
  35. .NET CoreがWPFをサポートすることは、少なくとも私にとっては非常に魅力的です。 また移行自体は、もちろんなんでも移行できるわけではありませんが、条件が整えば比較的簡単に移行できそうです。 移行する際には、すでに公式のドキュメントが用意されていますので、まずはそちらを確認しましょう。 公式ドキュメントにも、Frameworkのライブラリが利用できる旨記述がありますが やはり危険なケースもありますから、可能であればCoreもしくはStandardに統一したほうがよいのではと私は考えています。
  36. 以上で私の発表を終わります。 ご清聴ありがとうございました。