はじめに
Modular Monolith with DDDを見ていたら、.NETの方が気になってきてしまい入門した。
.NetとはMicrosoft によって作成された開発者プラットフォームである。
昔はWindows製品の開発用だったと思うのだが、今ではMacで開発できるし環境構築も一瞬で終わって感動している。
Hello World!
$ brew install --cask dotnet $ dotnet new console --output sample1 $ dotnet run --project sample1 Hello World!
終わり。dotnet cliが良い感じ。dotnet cli
はmsbuildを使ってビルドをしている。
ディレクトリ構成
.dll
をMacで見るのは不思議な感じだ。
. ├── Program.cs ├── bin │ └── Debug │ └── netcoreapp3.1 │ ├── sample1.deps.json │ ├── sample1.dll │ ├── sample1.pdb │ ├── sample1.runtimeconfig.dev.json │ └── sample1.runtimeconfig.json ├── obj │ ├── Debug │ │ └── netcoreapp3.1 │ │ ├── sample1.AssemblyInfo.cs │ │ ├── sample1.AssemblyInfoInputs.cache │ │ ├── sample1.assets.cache │ │ ├── sample1.csproj.CoreCompileInputs.cache │ │ ├── sample1.csproj.FileListAbsolute.txt │ │ ├── sample1.csprojAssemblyReference.cache │ │ ├── sample1.dll │ │ ├── sample1.genruntimeconfig.cache │ │ └── sample1.pdb │ ├── project.assets.json │ ├── project.nuget.cache │ ├── sample1.csproj.nuget.dgspec.json │ ├── sample1.csproj.nuget.g.props │ └── sample1.csproj.nuget.g.targets └── sample1.csproj
DLLにはCLR *1 で動くマネージドDLLと環境依存のアンマネージドDLLがある。マネージドの方は仮想マシン上で動く。マルチプラットフォームに対応してしばらく経つが、今後C#でWeb開発もだんだん増えていくのだろうか。
シングルバイナリを生成するには以下。(M1 Macの場合)
$ dotnet publish sample1 --runtime osx-x64
Program.cs
ソースコードの本体。
$ cat Program.cs main using System; namespace sample1 { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
Web API
dotnet
コマンドには様々なプロジェクトのテンプレートがある。Web APIだと次のようになる。
$ dotnet new webapi --output sample2 $ dotnet run --project sample2
このコマンドによりWebアプリケーションフレームワークのASP.NETを使ったWeb APIプロジェクトが生成される。生成されたAPIを叩いてみると以下のようになった。
$ curl --insecure -L http://localhost:5000/WeatherForecast [{"date":"2022-04-11T01:49:20.843834+09:00","temperatureC":45,"temperatureF":112,"summary":"Cool"},{"date":"2022-04-12T01:49:20.843845+09:00","temperatureC":-19,"temperatureF":-2,"summary":"Bracing"},{"date":"2022-04-13T01:49:20.843849+09:00","temperatureC":53,"temperatureF":127,"summary":"Sweltering"},{"date":"2022-04-14T01:49:20.843853+09:00","temperatureC":40,"temperatureF":103,"summary":"Cool"},{"date":"2022-04-15T01:49:20.84386+09:00","temperatureC":39,"temperatureF":102,"summary":"Mild"}]
Program.cs
Program.cs
だけ載せるが、MVCのコントローラーも生成されている。
$ cat Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace sample2 { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); } }
おわりに
基本的にはJavaと同じだと思うが、何か.Netの方が開発体験が良い気がする。Javaもdotnet cli
を作ればいいのかもしれない。