C# を使って爆速で Web Developer in 2019 を学ぶ

初心者用の記事ですがあまり深堀はしないので、どちらかと言うと他言語から C# を見に来た人向けかもしれません。

Web 界隈では有名なこれを C# で学んでいきます。Back-end の部分をやっていきます。爆速なので外部アプリケーションが必要な部分はスキップします。
IDE は Visual Studio 2019 を使います。 SDK は .NET Core 3.1 を使います。

[kamranahmedse/developer-roadmap: Roadmap to becoming a web developer in 2019](https://github.com/kamranahmedse/developer-roadmap)

日本語訳は [Web Developer Roadmap 2018 が 2019 年版になっていたので比較してみる - Qiita](https://qiita.com/ushironoko/items/a2420cf4a28af56907e5#-back-end-roadmap) にあります。

リンク先を見なくてもわかるように画像だけ持ってきました。

[![Image from Gyazo](https://i.gyazo.com/785b6bda9e77e526ed8a538637132a9b.png)](https://gyazo.com/785b6bda9e77e526ed8a538637132a9b)

## Roadmap

### 1. Pick a Language

- 説明: C# (.NET) です。

### 2. Practice what you learnt

- 説明: テンプレートが用意されているので、マウスクリックだけで学べます。

Visual Studio 2019 を起動して `Create a new project` を選択します。

[![Image from Gyazo](https://i.gyazo.com/64accb67a50c02448997669106863136.png)](https://gyazo.com/64accb67a50c02448997669106863136)

`Console App (.NET Core)` を選択します。

[![Image from Gyazo](https://i.gyazo.com/093030fe1e96b4712209112dc0b9acf2.png)](https://gyazo.com/093030fe1e96b4712209112dc0b9acf2)

適当な名前をつけて `Create` を選択します。

[![Image from Gyazo](https://i.gyazo.com/e7b67586f9312a3330c047fed8e34642.png)](https://gyazo.com/e7b67586f9312a3330c047fed8e34642)

こんな感じのプロジェクトが出来たら `F5` か `緑色の再生ボタン` を押して実行します。

[![Image from Gyazo](https://i.gyazo.com/81bc5c1d7dc8a7205361d40ff4a386df.png)](https://gyazo.com/81bc5c1d7dc8a7205361d40ff4a386df)

無事に `Hello World!` が表示されました。コマンドラインアプリケーションは学び終わりました。爆速です。

[![Image from Gyazo](https://i.gyazo.com/c446ac0634ed7cf689736fc6bfe17311.png)](https://gyazo.com/c446ac0634ed7cf689736fc6bfe17311)

### 3. Learn Package Manager

- 説明: GUI があるので、マウスクリックだけで学べます。

`Tools > NuGet Package Manger > Manage NuGet Packages for Solution` を選択します。

[![Image from Gyazo](https://i.gyazo.com/3a8515fabe22dec3e23cd30176032f65.png)](https://gyazo.com/3a8515fabe22dec3e23cd30176032f65)

`Browse` タブから Install したい Package を選んで `Install` を選択します。

[![Image from Gyazo](https://i.gyazo.com/b360c449c7b4dff6430ca7e37b659d51.png)](https://gyazo.com/b360c449c7b4dff6430ca7e37b659d51)

Package Install が完了したらすぐに使えるようになります。 Uninstall や Update も GUI から可能です。パッケージマネージャーは学び終わりました。爆速です。

[![Image from Gyazo](https://i.gyazo.com/ef533dc25e749df7774f9d152e2f1b39.png)](https://gyazo.com/ef533dc25e749df7774f9d152e2f1b39)

### 4. Standards and Best Practices

- 説明: C# は Microsoft が出している言語なので Microsoft 公式ドキュメント [C# のコーディング規則 - C# プログラミング ガイド | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions) が存在します。凄く長くて眠たくなるし、どちらかというと実践しながら学んでいくものなのでスキップします。
- 補足: なんか怪しいなと思ったら電球マークか `Ctrl + .` を押せば、これが正しいよということを教えてくれます。

[![Image from Gyazo](https://i.gyazo.com/18416e1f6620c035c97f80dc5d16ccb3.png)](https://gyazo.com/18416e1f6620c035c97f80dc5d16ccb3)

### 5. Make and Distribute Some Package/Library

- 説明: NuGet Package を作るのは nuget.org のアカウントが必要なのでスキップします。作りたい人は [.NET Standard NuGet パッケージの作成と公開 - Windows 上の Visual Studio | Microsoft Docs](https://docs.microsoft.com/ja-jp/nuget/quickstart/create-and-publish-a-package-using-visual-studio?tabs=netcore-cli) を参照してください。

### 6. Learn about Testing

- 説明: Unit Test を書きます。ようやくキーボードの出番です。

`Solution menu > Add > New Project` を選択します。

[![Image from Gyazo](https://i.gyazo.com/fcd6f709500c21938ac8d720d2761a9f.png)](https://gyazo.com/fcd6f709500c21938ac8d720d2761a9f)

`xUnit Test Project (.NET Core)` を選択します。

[![Image from Gyazo](https://i.gyazo.com/6728ff2290124c47dfbb76cab5dab0ad.png)](https://gyazo.com/6728ff2290124c47dfbb76cab5dab0ad)

適当な名前をつけて `Create` を選択します。

[![Image from Gyazo](https://i.gyazo.com/7c553f98ee46f6d7fccc1e9413562cce.png)](https://gyazo.com/7c553f98ee46f6d7fccc1e9413562cce)

Unit Test 用のプロジェクトとコードが作成されます。

[![Image from Gyazo](https://i.gyazo.com/d1b04d6dd4bdfb7c31b44984a25b4e3e.png)](https://gyazo.com/d1b04d6dd4bdfb7c31b44984a25b4e3e)

Test1 method の中身を下のコードに書き換えます。 a と b が同じだったら成功というコードです。

```csharp
[Fact]
public void Test1()
{
    var a = 123;
    var b = 123;
    Assert.Equal(a, b);
}
```

右クリックメニューから `Run Test(s)` を選択します。

[![Image from Gyazo](https://i.gyazo.com/b903d7bf2421113261407670320319e9.png)](https://gyazo.com/b903d7bf2421113261407670320319e9)

Test Explorer が開いてテストが実行されます。無事に成功しました。 Unit Test は学び終わりました。爆速です。

[![Image from Gyazo](https://i.gyazo.com/e6bf8ccd3e30c48c7f7813ef2a58314e.png)](https://gyazo.com/e6bf8ccd3e30c48c7f7813ef2a58314e)

### 7. Write Tests for the practical steps above

- 説明: 爆速すぎてテスト対象のコードがないのでスキップします。

### 8. Learn Relational Databases

- 説明: RDBMS を学ぶには RDBMS が必要なのでスキップします。
- 補足: C# では Entity Framework という ORM を使うことが一般的です。公式のドキュメントは少し難しいので [Entity Framework - マイクロソフト系技術情報 Wiki](https://techinfoofmicrosofttech.osscons.jp/index.php?Entity%20Framework) のほうが見やすいです。もし生 SQL を書きたい場合や、パフォーマンスを重視する場合は Micro-ORM の [StackExchange/Dapper: Dapper - a simple object mapper for .Net](https://github.com/StackExchange/Dapper) がおすすめです。

### 9. Practical Time

- 説明: ログインや CRUD を学ぶには RDBMS があったほうがよいのでスキップします。

### 10. Learn a Framework

- 説明: C# は .NET が全てなので使っていくうちに学んで行くとよいです。スキップします。
- 補足: .NET Core を学んでください。 .NET Framework は必要になったら学ぶ程度で OK です。今度の予定では .NET Framework は廃止になり、 .NET Core から引き継いだ .NET 5 というものが誕生します。

### 11. Practical Time

- 説明: #10 と同じなのでスキップします。

### 12. Learn a NoSQL Database

- 説明: NoSQL を学ぶには NoSQL が必要なのでスキップします。

### 13. Caching

- 説明: Cache を学ぶには Cache が必要なのでスキップします。

### 14. Creating RESTful APIs

- 説明: テンプレートが用意されているので、マウスクリックだけで学べます。

新しいプロジェクトを作る画面から `ASP.NET Core Web Application` を選択します。

[![Image from Gyazo](https://i.gyazo.com/5dba0c9b82d55156ae3d2e9aca9e191b.png)](https://gyazo.com/5dba0c9b82d55156ae3d2e9aca9e191b)

適当な名前をつけて `Create` を選択します。

[![Image from Gyazo](https://i.gyazo.com/c591df46613e3dab92323af201dd4749.png)](https://gyazo.com/c591df46613e3dab92323af201dd4749)

どのテンプレートにするか再度聞かれるので `API` を選択します。

[![Image from Gyazo](https://i.gyazo.com/f2412f485bcdcafb96838fb66173ddeb.png)](https://gyazo.com/f2412f485bcdcafb96838fb66173ddeb)

WeatherForecastController を開くと、ランダムな天気予報を GET で返してくれる Method が出来ています。 `F5` か `緑色の再生ボタン` を押して実行します。

[![Image from Gyazo](https://i.gyazo.com/5790ffc2bd682966749a52c17215c0cb.png)](https://gyazo.com/5790ffc2bd682966749a52c17215c0cb)

ブラウザが開いて無事に json 形式の天気予報が表示されました。 RESTful APIs は学び終わりました。爆速です。

[![Image from Gyazo](https://i.gyazo.com/cdd4e0057f4bc1ddd36b0478b4db12ce.png)](https://gyazo.com/cdd4e0057f4bc1ddd36b0478b4db12ce)

#### 補足: GET 以外もテンプレートがあります。

`Solution menu > Add > Controller` を選択します。

[![Image from Gyazo](https://i.gyazo.com/3e63aa77c3d870b69d38250ed7560173.png)](https://gyazo.com/3e63aa77c3d870b69d38250ed7560173)

`API Controller with read/write actions` を選択します。

[![Image from Gyazo](https://i.gyazo.com/b16e8fc7c747c2b66a1c547dc6152d61.png)](https://gyazo.com/b16e8fc7c747c2b66a1c547dc6152d61)

適当な名前をつけて `Add` を選択します。

[![Image from Gyazo](https://i.gyazo.com/a67e43b21f4794f847dfba325a8343d5.png)](https://gyazo.com/a67e43b21f4794f847dfba325a8343d5)

GET / POST / PUT / DELETE が出来上がっています。爆速です。

[![Image from Gyazo](https://i.gyazo.com/9d103ccdf32dc2db8f8d1d0c4c130415.png)](https://gyazo.com/9d103ccdf32dc2db8f8d1d0c4c130415)

### 15-23

- 説明: 外部アプリケーションが必要だったり、概念説明が難しいのでスキップします。

## Note

`スキップします。` という Word を検索したら 12 件 Hit しました。 2019 年はもう終わってしまうので、 2020 年は爆速じゃないバージョンを一つづつ丁寧に解説したいです。