開発ツールの練習
任意で読める付録です。はじめの一歩を終えたら、同じプロジェクトを使って編集、コンパイル、再実行のサイクルを練習できます。読み飛ばしても後の章には影響しません。
練習で使う完成コードは次のとおりです。このページのコマンドは、第02章で作成した FirstSteps プロジェクトのディレクトリで実行してください。リポジトリのサンプルを使う場合は samples/02-first-steps に移動します。
using Scalar.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenApi();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
app.MapScalarApiReference();
}
app.MapGet("/", () => new { Message = "Hello, ASP.NET Core!" });
app.Run();コンパイラーにチェックしてもらう
C# は静的型付け言語なので、多くのエラーは実行前に見つかります。15行目の MapGet をわざと MapGt に書き換えてみてください。エディターに赤い波線がすぐ表示されます。dotnet build を実行すると、次の出力が表示されます。
Program.cs(15,5): error CS1061: “WebApplication”未包含“MapGt”的定义,并且找不到可接受第一个“WebApplication”类型参数的可访问扩展方法“MapGt”(是否缺少 using 指令或程序集引用?)エラーメッセージは、15行目の5列目にある WebApplication 型には MapGt というメンバーがないことを示しています。プログラムは起動せず、リクエストが届いたときに初めてクラッシュすることもありません。
試した後は MapGt を MapGet に戻し、dotnet build が成功することを確認してから次へ進んでください。診断メッセージの言語は SDK の言語設定によって異なります。
同様に、app. の後に Map と入力すると、エディターが利用可能なメソッド(MapGet、MapPost、MapGroup など)を一覧表示し、それぞれの引数も表示します。型情報はエディター補完を可能にするだけでなく、OpenAPI のレスポンス構造にも反映されるため、重複した保守作業を減らせます。
dotnet watch で自動リロードする
前に起動したサービスがまだ動いている場合は、まずそのターミナルで Ctrl+C を押して停止します。次に同じプロジェクトディレクトリで、次のコマンドを実行します。
dotnet watchプロジェクトが起動し、ファイルの変更が監視されます。起動後、15行目の文字列を "Hello, Hot Reload!" に変更して保存すると、ターミナルに次の出力が表示されます。
dotnet watch ⌚ File updated: .\Program.cs
dotnet watch 🔥 C# and Razor changes applied in 1029ms.もう一度リクエストすると内容が変わっています。サービスは再起動していません。
curl http://localhost:5080/{"message":"Hello, Hot Reload!"}これをホットリロード(Hot Reload)と呼びます。変更を実行中のプログラムに直接適用します。ログに表示される所要時間はマシンによって異なります。ホットリロードできない変更では、再起動を求められる場合があります。サービス登録など起動時の構成を変更した場合は、dotnet watch のターミナルで Ctrl+R を押して再起動し、起動時のコードを再実行してください。
確認が終わったら、あいさつ文を "Hello, ASP.NET Core!" に戻し、Ctrl+C を押してサービスを停止してください。これにより、後の章の出力やポートに影響しません。
FastAPI との比較
dotnet watch は fastapi dev または uvicorn --reload に相当します。ホットリロードに対応する変更であれば、.NET はプロセスとメモリ上の状態を保てます。再起動が発生した場合は、メモリ上の状態が失われます。
まとめ
- コンパイルエラーにはファイル名と位置が表示されます。修正後に
dotnet buildで確認します。 dotnet watchはコードの変更を監視し、対応する変更をプロセスの再起動なしで適用できます。- 起動時の構成を変更した後は
Ctrl+Rで再起動します。再起動するとメモリ上の状態が失われます。
