今からでも遅くないc#開発
TRANSCRIPT
![Page 1: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/1.jpg)
今からでも遅くないC#開発HackerTackle
濱本 一慶(Hamamoto Kazunori)2015/09/26
![Page 2: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/2.jpg)
自己紹介
濱本 一慶(はまもと かずのり)
@airish9
C#アプリケーションエンジニア
福岡生まれの福岡育ち
VB.NETやC#中心のMS勢
出没コミュニティ
Japan Azure User Group
C#勉強会福岡
![Page 3: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/3.jpg)
本日のセッションについて
▪ C#にチョット興味ある方を対象してます
▪ これからC#を始めたい方も対象にしています
▪ Hacker Tackleでは貴重な初心者向けセッション!
▪ C#について話そうと思ってたら.NETになっていた(何を言って…ry)
![Page 4: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/4.jpg)
そもそもC#ってどんな言語?
C#(シーシャープ)とは、マイクロソフトが開発したマルチパラダイムプログラミング言語。強い型付け、命令型、宣言型、手続き型、関数型、ジェネリック、オブジェクト指向の要素を持つ。マイクロソフトのソフトウェアフレームワークである.NET Frameworkとともに作られ、Ecma
International[1]および国際標準化機構 (ISO)[2] によって標準化されており、日本においても日本工業規格 (JIS)[3]によって採択された。
https://ja.wikipedia.org/wiki/C_Sharp
C#を語るうえで.NETは欠かせない(monoはこの際置いておきましょう)
![Page 5: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/5.jpg)
余談ですが・・・
C♯C#正誤
正式には
![Page 6: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/6.jpg)
C♯の歴史
C#1.0
2000年C#2.0
2004年C#3.0
2007年C#4.0
2008年C#5.0
2012年C#6.0
2015年
クラス
ジェネリクス
ラムダ式LINQ
dynamic
await/async
Roslyn
![Page 7: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/7.jpg)
注目度は?
Google先生が言うにはJavaが断トツ人気・・・。
![Page 8: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/8.jpg)
これからC♯を始めるには?
▪ 対象とするFrameworkのバージョンで大きく2種類
▪ .NET Core▪ VisualStudioかVisualStudioCode
▪ 従来の.NET Framework
▪ VisualStudio
![Page 9: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/9.jpg)
![Page 10: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/10.jpg)
![Page 11: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/11.jpg)
![Page 12: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/12.jpg)
![Page 13: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/13.jpg)
![Page 14: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/14.jpg)
![Page 15: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/15.jpg)
![Page 16: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/16.jpg)
C♯の利用シーン
![Page 17: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/17.jpg)
C♯の利用シーン
![Page 18: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/18.jpg)
Windows DesktopWindows Form Application
![Page 19: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/19.jpg)
Windows DesktopWPF
提督業も忙しい! | grabacr.nét - http://grabacr.net/kancolleviewer
![Page 20: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/20.jpg)
Windows Store
![Page 21: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/21.jpg)
Windows StoreWindows Phone Application
![Page 22: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/22.jpg)
Xamarin
https://xamarin.com/
10分間で分かった気になれるXamarin概要 - http://www.buildinsider.net/enterprise/sansanreport/0601
▪ C♯を利用したクロスプラットフォーム開発環境
▪ Android、iOS、WindowsPhoneに対応
▪ ネイティブのアプリを作成可能
![Page 23: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/23.jpg)
Unity▪ クロスプラットフォームゲームエンジン
▪ C♯が利用可能
▪ モバイル・デスクトップ、ブラウザ、ゲーム機などの多数のプラットフォームに対応
http://unity3d.com/jp/unity
![Page 24: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/24.jpg)
Kinect▪ センサーデバイス
▪ C♯のSDKがを利用して開発可能
![Page 25: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/25.jpg)
Microsoft Azure▪ Microsoft社が提供するクラウドプラットフォーム
▪ Visual Studioとの親和性が高い
▪ 各サービスでC♯のSDKを利用可能
https://azure.microsoft.com/ja-jp/
![Page 26: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/26.jpg)
![Page 27: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/27.jpg)
これからC♯を始めるってどうよ?
▪ 近年、日の目を浴びてきた言語だと思う
▪ 利用シーンは豊富でユーザー数も多い
▪ 今から入るのはチャンス
![Page 28: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/28.jpg)
コミュニティのご紹介
▪ コミュニティを活用して情報収集をしましょう
▪ 福岡でMicrosoft系のコミュニティ
▪ Csharp Fukuoka
▪ Japan Azure User Group Fukuoka(ふくあず)
▪ Win.tech.q
![Page 29: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/29.jpg)
Csharp Fukuokaのご紹介
▪ 福岡でCsharpに興味がある方向けのコミュニティ
▪ 2013年5月13日に結成
▪ 過去に8回の勉強会を開催
▪ 目安は3ヶ月に1回のペースで開催
https://www.facebook.com/groups/472380036165353
![Page 30: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/30.jpg)
Csharp Fukuokaのご紹介
https://www.facebook.com/groups/472380036165353
![Page 31: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/31.jpg)
Japan Azure User Group Fukuokaのご紹介
▪ Azureコミュニティの福岡支部
▪ インフラやアプリエンジニアが多数参加しています
▪ 月に1回ペースで勉強会を開催
https://www.facebook.com/groups/fukuazu
![Page 32: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/32.jpg)
NET 5 Webアプリ開発スタイル
![Page 33: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/33.jpg)
2種類の .NET5
▪ .NET 5
▪ .NET Compiler Platform(Roslyn) によるコンパイル
▪ 新しいC#やVB.NET
▪ ASP.NET 5
▪ side-by-side 実行できる .NET(ランタイムのインストールが不要に!)
▪ Roslynによる実行時コンパイル!(しかし遅い…)
▪ MVC6、SignalR 6、EF7 etc…
![Page 34: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/34.jpg)
ASP.NET 5
▪ Side-by-side実行による非ランタイムインストール実行
▪ Roslynによる実行時コンパイル
▪ OWIN実装によるIISに依存しないASP.NET実行環境
▪ Windows以外の開発&実行環境
https://github.com/aspnet http://aspnet.codeplex.com/
![Page 35: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/35.jpg)
ASP.NET 5
▪ 基本的にASP.NET vNextの名称が変わっただけ
▪ MVC 6
▪ 実行時コンパイル
▪ IISを必要としないSelf Hosting
▪ VisualStudio 2015 で使用可能
▪ プロジェクトテンプレートが従来の形と大きく異なる
![Page 36: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/36.jpg)
ASP.NET 5 のプロジェクトテンプレート
▪ 設定ファイルにjsonを使用する。
▪ global.json (プロジェクトの参照関係に使用)、project.json (プロジェクト設定)
▪ プロジェクトテンプレートにYeomanを使用する
▪ パッケージ管理にnpmとBowerを使用する
▪ タスク実行にGruntを使用する
![Page 37: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/37.jpg)
![Page 38: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/38.jpg)
![Page 39: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/39.jpg)
![Page 40: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/40.jpg)
npm、Bower、Grunt
▪ ASP.NETでは縁がなかったパッケージ管理&タスクランナー
▪ npm
▪ Node.jsで使用されているパッケージマネージャー、BowerとGruntが必要とする
▪ Bower(バウアー)
▪ フロントエンド用のパッケージマネージャー
▪ Javascriptライブラリの依存関係やバージョン管理を補助してくれる
▪ Twitter社が作ったらしい
▪ .NETerに解りやすく説明するなら、NuGetの様なもの
![Page 41: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/41.jpg)
npm、Bower、Grunt
▪ Grunt
▪ Node.jsで動作するタスクランナー
▪ 定義ファイルで実行タスクを定義する
▪ JavaScriptの圧縮(minify)や結合
▪ altJSのコンパイル
![Page 42: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/42.jpg)
OmniSharp
▪ 様々なエディタで.NETを開発できるようにするプロジェクト
▪ MacやLinuxのエディタでも開発できるようにする計画
▪ Sublime Text
▪ Atom
▪ Emacs
▪ Vim
http://www.omnisharp.net/
![Page 43: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/43.jpg)
C♯6.0のご紹介
![Page 44: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/44.jpg)
C♯の歴史
C#1.0
2000年C#2.0
2004年C#3.0
2007年C#4.0
2008年C#5.0
2012年C#6.0
2015年
クラス
ジェネリクス
ラムダ式LINQ
dynamic
await/async
Roslyn
![Page 45: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/45.jpg)
Roslynとは?
.NET Frameworkの次世代コンパイラプラットフォーム
Compiler APIs
• コンパイラ
Feature APIs
• Code Fixやリファクタリング等
Workspace APIs
• プロジェクトファイルや参照関係
![Page 46: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/46.jpg)
C♯6.0
Visual Studio 2015で使用可能(現在はRTM)
実はVisulaBasicも便利になります
Roslyn ≒ C#6.0
大きな変更はなく、細かい修正が多い
![Page 47: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/47.jpg)
C♯6.0の実装状況Feature Example
Auto-property initializers public int X { get; set; } = x;
Getter-only auto-properties public int Y { get; } = y;
Ctor assignment to getter-only autoprops Y = 15
Parameterless struct ctors Structure S : Sub New() : End Sub : End Structure
Using static members using System.Console; … Write(4);
Dictionary initializer new JObject { ["x"] = 3, ["y"] = 7 }
Await in catch/finally try … catch { await … } finally { await … }
Exception filters catch(E e) if (e.Count > 5) { … }
Expression-bodied members public double Dist => Sqrt(X * X + Y * Y);
Null propagation customer?.Orders?[5]?.$price
String interpolation $"{p.First} {p.Last} is {p.Age} years old."
nameof operator string s = nameof(Console.Write);
#pragma #Disable Warning BC40008
Extension Add in collection initializers
Improved overload resolution
http://roslyn.codeplex.com/wikipage?title=Language%20feature%20status&referringTitle=Home
![Page 48: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/48.jpg)
Auto-property initializers自動実装プロパティの初期化がコンストラクタで可能になりました!
class Person{public int Age { get;set; }
public Person(){Age = 20;
}}
Before
class Person{public int Age { get;set; } = 20;
}
Next
![Page 49: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/49.jpg)
Getter-only auto-propertiesGetterのみの自動実装プロパティの初期化もできます
class Person{
public int Age { get { return this._age; } }private int _age = 20;
}
Before
class Person{
public int Age { get; } = 20;}
Next
![Page 50: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/50.jpg)
Using static members静的クラスの静的メソッドは省略可能になります
class Person{public void Say(){System.Console.WriteLine("Name is " + this.Name);
}}
Before
using System.Console;
class Person{public void Say(){Console.WriteLine("Name is " + this.Name);
}}
After
![Page 51: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/51.jpg)
Await in catch/finallyCatch句とFinally句でawaitが使用できようになりました
try{
//HodeHoge}catch (Exception e){
await Task.Delay(2000);}
After
Exception exception = null;try{
//HodeHoge}catch (Exception e){
exception = e;}if (exception != null)
await Task.Delay(2000);
Before
![Page 52: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/52.jpg)
Exception filtersCatch句に条件式を付与する事ができるようになりました
try{
//HogeHoge}catch (Exception e)
if (e.Data.Count > 10){
//例外処理}
After
try{
//HogeHoge}catch (Exception e) {
if (e.Data.Count > 10){//例外処理
}}
Before
![Page 53: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/53.jpg)
Null propagationnullチェックをシンプルに記述できます
public int? GetNameLength(Person person){
if (person == null) return null;if (person.Name == null) return null;return person.Name.Length;
}
Before
public int? GetNameLength(Person person){
return person?.Name?.Length;}
After
![Page 54: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/54.jpg)
nameof operatorメンバや変数の名前を返す演算子
class Person{
public string Name { get; set; }
public Person(string name){if (string.IsNullOrEmpty(name))
throw new ArgumentException("name" + " is NullOrEmpty");this.Name = name;
}}
Before
文字列指定
![Page 55: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/55.jpg)
nameof operatorメンバや変数の名前を返す演算子
public string Name { get; set; }
public Person(string name){
if (string.IsNullOrEmpty(name))throw new ArgumentException(nameof(name) + "is NullOrEmpty");
this.Name = name;}
After
nameof演算子でタイプセーフ
![Page 56: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/56.jpg)
String interpolation文字列補完をする際に変数を直接指定できるようになりました
Console.WriteLine("{0}×{1:2D}={2:0.0}", a, b, result);
Before
int a = 3;
int b = 4;
int result = a * b;
Console.WriteLine($"{a}×{b:2D}={result:0.0}");
After
![Page 57: 今からでも遅くないC#開発](https://reader031.vdocuments.site/reader031/viewer/2022030308/58ed0e4c1a28ab90658b45f1/html5/thumbnails/57.jpg)
ご清聴ありがとうございました