.NET 5 Preview 1 が発表されたので早速Hello Worldで動かしてみる

![dotnet5_platform.png](https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/05/dotnet5_platform.png)

# この記事について

2020年3月16日\(米国時間\) に、.NET Core 3.1 の後継となる .NET 5 の Preview 1 が公開されました。そのため早速インストールして Hello World まで行ってみようと思います。


# 対象読者

- .NET 5 で遊んでみたい方


# 環境

今回は macOS でやってみました。

- **OS**: macOS Catalina Version 10.15.3


# SDK インストール

まずは、SDK をダウンロードします。

- https://dotnet.microsoft.com/download/dotnet-core

<img width="1552" alt="image01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/d0453e0f-fc28-2199-7047-2dc9656ffcaf.png">

一番上に`.NET 5.0`ってありますね。

<img width="1552" alt="image02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/42a2bce4-aa22-7861-b503-08b3a1ef5617.png">

内容を見ると、SDK は 1 つで、Runtime の方は 3 つに分かれてますね。
ここは .NET Core 3.0/3.1 の時と変わらないようです。

- ASP.NET Core Runtime 5.0.0-preview.1
- Desktop Runtime 5.0.0-preview.1
- .NET Runtime 5.0.0-preview.1 (上2つが一緒になっているやつ)

今回は SDK をインストールするので、一緒に .NET Runtime が入ります。
また Language Support のところを見てみると、.NET Core 3.1 と比べて、

- C# 8.0 #変化なし
- F# 5.0-preview **#バージョンアップ**
- Visual Basic **新規追加**

となっていました。

SDK 5.0.100-preview.1 の macOS Installers x64 をダウンロードしてインストールします。
インストーラー内は特段難しい内容はないので、内容はスキップします。次へ次へでインストールしてください。


# バージョン確認

.NET 5.0 Preview 1 の SDK と Runtime が正常にインストールされたことを確認します。

```bash:SDKバージョン確認
dotnet  --list-sdks
# 実行結果
5.0.100-preview.1.20155.7 [/usr/local/share/dotnet/sdk]
```

```bash:Runtimeバージョン確認
dotnet  --list-runtimes
# 実行結果
Microsoft.AspNetCore.App 5.0.0-preview.1.20124.5 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 5.0.0-preview.1.20120.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
```

Runtime の方は、.NET Core vNext と言われていたこともあって、まだ Core の名前が残っていますね。
2020年11月リリース予定の .NET 5 も、preview の文字が取れるだけだと思います。
*.NET 6 になったら変わる可能性とかあるのかな、いや、なさそう・・・*

# Hello World

今回は ASP.NET Core で Hello World をやってみます。
[Learn .NET][LearndotNET] のサイトを参考にします。
*このサイトは、ML.NET とかいろんな .NET の Tutorial があって良いですね。*

```bash
mkdir -p dotnet5
cd dotnet5
dotnet new webApp -o myWebApp --no-https
```

```bash:実行結果
Welcome to .NET 5.0!
---------------------
SDK Version: 5.0.100-preview.1.20155.7

Getting ready...
The template "ASP.NET Core Web App" was created successfully.
This template contains technologies from parties other than Microsoft, see https://aka.ms/aspnetcore/5.0-third-party-notices for details.

Processing post-creation actions...
Running 'dotnet restore' on myWebApp/myWebApp.csproj...
 /dotnet5/myWebApp/myWebApp.csproj の復元が 1.16 sec で完了しました。

Restore succeeded.
```

はい、というわけでプロジェクトができました。構成を確認してみます。

```bash
cd myWebApp
ls -al
```

```bash:実行結果
total 40
drwxr-xr-x  11 ymasaoka  staff   352  3 19 01:12 .
drwxr-xr-x   3 ymasaoka  staff    96  3 19 01:12 ..
drwxr-xr-x  11 ymasaoka  staff   352  3 19 01:12 Pages
-rw-r--r--   1 ymasaoka  staff   716  3 19 01:12 Program.cs
drwxr-xr-x   3 ymasaoka  staff    96  3 19 01:12 Properties
-rw-r--r--   1 ymasaoka  staff  1442  3 19 01:12 Startup.cs
-rw-r--r--   1 ymasaoka  staff   162  3 19 01:12 appsettings.Development.json
-rw-r--r--   1 ymasaoka  staff   192  3 19 01:12 appsettings.json
-rw-r--r--   1 ymasaoka  staff   148  3 19 01:12 myWebApp.csproj
drwxr-xr-x   7 ymasaoka  staff   224  3 19 01:12 obj
drwxr-xr-x   6 ymasaoka  staff   192  3 19 01:12 wwwroot
```

.NET 開発ではおなじみのファイルが出来ています。この`myWebApp.csproj`の中身を見てみます。

```xml:myWebApp.csproj
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp5.0</TargetFramework>
  </PropertyGroup>

</Project>
```

`TargetFramework`が **netcoreapp5.0** となっており、.NET 5 が使われています。いいですね。

実際に動かしてみます。

```bash
dotnet run
```

```bash:実行結果
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {e62d2593-183e-4326-b419-9f280410c8df} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /dotnet5/myWebApp
```

`Now listening on: http://localhost:5000`が表示されたら、Web ブラウザで **http://localhost:5000** にアクセスします。
ASP.NET Core での最初の画面が確認できます。

<img width="1552" alt="image03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/c135ef6c-bf75-26ec-ef94-98947f9bee77.png">

問題なくアクセスできたら、\[Ctrl\] \+ \[C\] を押して アプリを終了します。
先ほどの画面の表示は`Welcome`だったので、これを **Hello, World!** に書き換えます。
Pages ディレクトリ以下にある`Index.cshtml`を編集します。

```html:Index.cshtml
@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1>Hello, world!</h1>
    <p>The time on the server is @DateTime.Now</p>
</div>
```

myWebApp ディレクトリに戻って、再度アプリを起動します。

```bash
dotnet run
```

<img width="1552" alt="image04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/e99db4f6-3fd4-b9fd-7a54-a5d77cec43c7.png">

無事に、Hello World ができました。


# おわりに

Learn .NET では、次は [Razor Page][MSDocs-Razor] の話になっていますが、ここは .NET Core 3.0 で登場した **Blazor** を .NET 5 で試してみたいですね。

- [ASP.NET Core Blazor の概要][MSDocs-Blasor]


# 参考情報

## .NET

- [Download .NET Core][dotNET5-download]
- [Learn .NET][LearndotNET]

## Microsoft .NET Blog

- [Introducing .NET 5][Intro-dotNET5]

## Microsoft Docs

- [チュートリアル: ASP.NET Core の Razor ページの概要][MSDocs-Razor]
- [ASP.NET Core Blazor の概要][MSDocs-Blasor]

[dotNET5-download]:https://dotnet.microsoft.com/download/dotnet-core
[Intro-dotNET5]:https://devblogs.microsoft.com/dotnet/introducing-net-5/
[LearndotNET]:https://dotnet.microsoft.com/learn
[MSDocs-Razor]:https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-3.1&tabs=visual-studio
[MSDocs-Blasor]:https://docs.microsoft.com/ja-jp/aspnet/core/blazor/get-started?view=aspnetcore-3.1&tabs=visual-studio-code