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

Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼう
TomomitsuKusaba
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
terurou
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
 
大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開
Rakuten Group, Inc.
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
 
Beyond the Twelve-Factor App
Beyond the Twelve-Factor AppBeyond the Twelve-Factor App
Beyond the Twelve-Factor App
Kazuya Takahashi
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
Akihiro Suda
 
ここが良かったDatadog
ここが良かったDatadogここが良かったDatadog
ここが良かったDatadog
tyamane
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
日本マイクロソフト株式会社
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つ
apkiban
 
パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!
泰史 栃折
 
失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話
chigichan24
 
ユーザーストーリーの分割
ユーザーストーリーの分割ユーザーストーリーの分割
ユーザーストーリーの分割
Arata Fujimura
 
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
hiyohiyo
 

What's hot (20)

Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼう
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
Beyond the Twelve-Factor App
Beyond the Twelve-Factor AppBeyond the Twelve-Factor App
Beyond the Twelve-Factor App
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
ここが良かったDatadog
ここが良かったDatadogここが良かったDatadog
ここが良かったDatadog
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること 【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つ
 
パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!
 
失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話
 
Unityと.NET
Unityと.NETUnityと.NET
Unityと.NET
 
ユーザーストーリーの分割
ユーザーストーリーの分割ユーザーストーリーの分割
ユーザーストーリーの分割
 
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
 

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
 
マイクロサービス開発が捗る 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
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
DIVE INTO CODE Corp.
 

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# でできることを振り返る
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 

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 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 (17)

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 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

【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 

Recently uploaded (15)

【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 

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. 以上で私の発表を終わります。 ご清聴ありがとうございました。