そろそろレガシーな
.NET開発をやめなイカ?
2017/08/19 博多Tech塾
@tsubakimoto_s
2
自己紹介
•松村 優大 (MLBお兄さん)
•株式会社オルターブース
• Chief Technical Architect
•C# / PHP / Azure / AWS
•Microsoft MVP for VSDT
所属 コミュニティ
3
レガシーな開発からの脱却
~開発環境~
4https://unsplash.com/photos/sCdm5DiJb8w
開発環境は常に新しく!
5
6
7
Visual Studio 2005
.NET Framework 2.0
64bit Application
Visual Studio 2008
.NET Framework 3.0
.NET Framework 3.5
Visual Studio 2010
.NET Framework 4.0
F#, HTML5, CSS3
Visual Studio 2012
.NET Framework 4.5
Windows8 Application
Visual Studio 2013
.NET Framework 4.5.1
Git, TypeScript, Cummunity Edition
Visual Studio 2015
.NET Framework 4.6
.NET Core, Xamarin, Apache Cordova
C# 7 対応
Xamarin統合
Live Unit Testing
8
Visual Studio 2017
9
個人開発者
学習、学術調査目的の開発者
オープン ソース開発者
中小規模の企業や団体
https://www.microsoft.com/ja-jp/dev/products-visual-studio
ワークロード
•Windows
• UWP
• .NETデスクトップ 他
•モバイル&ゲーム
• Xamarin
• Unity
• Apache Cordova 他
• Web&クラウド
• ASP.NET
• Azure
• Python
• Node.js 他
• ツールセット
• VS拡張機能 他
10
Visual Studio Family
11
https://blogs.msdn.microsoft.com/visualstudio_jpn/2017/03/14/iterations-on-infinity/
Visual Studio 2017
Visual Studio Team Services
Visual Studio Blend
Visual Studio Mobile Center
VSのクラウド連携
•Azure
• Azure SDK
• 例)WebサイトをVSからデプロイ
•AWS
• AWS Toolkit for Visual Studio
• 例)LambdaをVSからデプロイ
12
Docker統合
•VS2015から標準搭載
•Docker Composeファイル生成
•コンテナデバッグ
注:Hyper-Vが必要
13
レガシーな開発からの脱却
~アプリケーション~
14https://unsplash.com/photos/sCdm5DiJb8w
15
デスクトップアプリ
Webアプリ
モバイルアプリ
サーバーレスアプリ
デスクトップアプリ
16
•要件を満たせるならWinFormsでも
よい
•UWPやWPFの特徴
• 高DPI対応、リッチなUI
• XAML、MVVM
WinForms <<< UWP <= WPF
• データ(≒テーブル)の管理
• ビジネスロジック
M
• ユーザインターフェースV
• ModelからViewへ出力データを渡す
• ViewからModelへ入力データ渡す
VM
17
18
http://cases.azoft.com/mvvm-android-data-binding/
Webアプリ
•ASP.NET Web Form
•ASP.NET MVC
•ASP.NET Web API
•ASP.NET SignalR
19
• データ(≒テーブル)の管理
• ビジネスロジックM
• ユーザインターフェースV
• ModelからViewへ出力データを渡す
• ViewからModelへ入力データ渡すC
20
モバイルアプリ
C#でモバイルアプリを作るフレームワーク
→Android, iOS, Windows Phone
気になる方はJXUGをチェック
21
サーバーレスアプリ
Azure Functions
関数単位でホスト
入力:トリガー
出力:データ
多言語対応
22
サーバーレスアプリ
AWS Lambda
.NET Core 1.0
AWSのリソース
と連携
多言語対応
Java, Node.js, Python
23
レガシーな開発からの脱却
~フレームワーク~
24https://unsplash.com/photos/sCdm5DiJb8w
25
26
コンソールアプリ
クラスライブラリ
Webアプリ
.NET Core
•.NET Frameworkのオープンソース
版
•完全移植ではない
•version
• 1.0 (2016/06)
• 1.1 (2016/11)
• 2.0 (preview 2017/08/15)
27
28
Flexible deployment
Cross-platform
Command-line tools
Compatible
Open source
Supported by Microsoft
https://docs.microsoft.com/ja-jp/dotnet/articles/core/index
Cross-platform
29
https://github.com/dotnet/core/blob/master/roadmap.md#net-core-10---supported-os-versions
Windows Subsystems for Linux
提供予定
Windows Subsystems for Linux
提供予定
Cross-platform
30
https://github.com/dotnet/core/blob/master/roadmap.md#net-core-20---supported-os-versions
Command-line tools
31
コマンド名 機能
dotnet **.dll .NET Coreアプリの実行
dotnet new プロジェクトの新規作成
dotnet restore NuGetパッケージの復元
dotnet build プロジェクトのビルド
dotnet publish 公開用ファイルの生成
dotnet run プロジェクトの実行
dotnet test テストの実行
dotnet pack NuGetパッケージ化
https://docs.microsoft.com/ja-jp/dotnet/articles/core/tools/
Open source
3232
dotnet/standard
dotnet/corefx dotnet/coreclr
dotnet/roslyn
dotnet/cli dotnet/docs
との親和性(microsoft/dotnet)
バージョン ツール付き 実稼働
Linux (Debian)
1.0 1.0-sdk 1.0-runtime
1.1 1.1-sdk 1.1-runtime
2.0 2.0-sdk 2.0-runtime
Windows (NanoServer)
1.0 1.0-sdk 1.0-runtime
1.1 1.1-sdk 1.1-runtime
2.0 2.0-sdk 2.0-runtime
33
https://hub.docker.com/r/microsoft/dotnet/
Webアプリ
•ASP.NET Core MVC
•ASP.NET Core Web API
•ASP.NET Core SignalR (preview)
34
バージョン 実稼働(Linux) 実稼働(Windows)
1.0 1.0.5-jessie 1.0.5-nanoserver
1.1 1.1.2-jessie 1.1.2-nanoserver
2.0 2.0.0-stretch 2.0.0-nanoserver
https://hub.docker.com/r/microsoft/aspnetcore/
microsoft/aspnetcore
.NET Standard
コード共通化の仕組み
35
これまでのコード共通化
36
.NET
FRAMEWORK
.NET CORE XAMARIN
アプリ
モデル
ベース
ライブラリ
https://www.slideshare.net/decode2017/tl04-net-15-net
.NET Standardによる共通化
37
https://www.slideshare.net/decode2017/tl04-net-15-net
.NET FRAMEWORK .NET CORE XAMARIN
.NET Standardによる共通化
38
https://www.slideshare.net/decode2017/tl04-net-15-net
.NET
FRAMEWORK
.NET CORE XAMARIN
.NET Standardのバージョン
39
https://docs.microsoft.com/ja-jp/dotnet/standard/net-standard
UWPに使わないUWPにも使う
レガシーな開発からの脱却
~コーディング~
40https://unsplash.com/photos/sCdm5DiJb8w
41
C# 6
•自動実装プロパティ
•ラムダ式でのメソッド定義
•ラムダ式でのプロパティ定義
•Null条件演算子
•文字列補完
•nameof演算子
•インデックス初期化子
•例外フィルター
42
C# 7
•switch文のcase節
•ローカル関数
•タプル (Tuple)
43
LINQ
•統合言語クエリ
• Language Integrated Query
• System.Linq名前空間
•クエリ式
• SQLライクな構文
•メソッド式
44
https://github.com/tsubakimoto/linq-samples
サンプル
45
告知
46
47
4848
Visual Studio Code
ありがとうございました
49

そろそろレガシーな.Net開発をやめなイカ?