【ITニュース解説】I Didn't Understand Program.cs in .NET, So I Wrote This

2025年09月10日に「Dev.to」が公開したITニュース「I Didn't Understand Program.cs in .NET, So I Wrote This」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

.NETのProgram.csは、アプリの初期設定と起動を定義する中心ファイルだ。builderでMVCなどの機能を準備し、appで設定を適用しアプリを構築する。HTTPS化、静的ファイル表示、URL経路設定、認証といった多様な処理を順次組み込み、最終的にアプリを動作させる。

ITニュース解説

ASP.NET Coreアプリケーションを初めて作成する際、Program.csというファイルの内容に疑問を持つことがあるかもしれない。このファイルは、Webアプリケーションの起動と設定において非常に重要な役割を担っている。ここでは、その中の各行がどのような機能を持ち、どのように動作するのかを詳しく解説する。

まず、Program.csの冒頭にある二つの重要な行について説明する。

var builder = WebApplication.CreateBuilder(args);

この行は、アプリケーションの初期設定を行うための基盤となるオブジェクト、WebApplicationBuilderのインスタンスを生成している。アプリケーションが起動する際には、まずこのbuilderオブジェクトが作成される。ここで、アプリケーションの構成情報が読み込まれ、ログ出力の設定、依存性注入(DI)コンテナの準備、そして実行環境に関する設定など、様々な初期化処理が行われる。依存性注入とは、アプリケーションが必要とするサービスや部品を、直接コード内で生成するのではなく、外部から供給する仕組みのことである。これにより、コードの柔軟性が高まり、テストやメンテナンスがしやすくなる。

builder.Services.AddControllersWithViews();

この行は、アプリケーションがModel-View-Controller(MVC)パターンで動作するために必要なサービスを登録している。MVCは、Webアプリケーションの構造を「モデル(データの管理)」「ビュー(ユーザーインターフェース)」「コントローラー(ユーザーからの入力処理)」の三つの要素に分離する設計パターンである。AddControllersWithViews()を呼び出すことで、MVCフレームワークが正しく機能するために必要な全てのサービスと設定が、先ほど準備された依存性注入コンテナに追加される。これにより、アプリケーションはMVCの仕組みを利用して、リクエスト処理や画面表示を行えるようになる。

var app = builder.Build();

この行は、これまでにbuilderオブジェクトで設定してきた全ての情報に基づいて、実際にWebアプリケーションの本体となるWebApplicationインスタンスを構築している。builderは設定を行うための準備段階のオブジェクトであるのに対し、appは構築が完了し、実際にリクエストを処理する準備が整ったアプリケーション本体である。以降の処理では、このappオブジェクトを通じて様々な機能が追加されていく。

アプリケーションが動作する環境(開発環境か、本番環境かなど)に応じて、セキュリティ設定を変更することは非常に重要である。

if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); }

このコードブロックは、アプリケーションが開発環境でない場合、つまり本番環境やテスト環境で動作している場合に適用される設定を示している。開発環境では、開発者がエラーの原因を特定しやすいように、詳細なエラーページが表示されることが多い。しかし、本番環境で同じ詳細なエラーページが表示されると、悪意のあるユーザーにアプリケーションの内部情報が漏洩するリスクがある。そのため、app.UseExceptionHandler("/Home/Error");という行で、開発環境以外では/Home/Errorというカスタムのエラーページを表示するように設定している。これにより、ユーザーには友好的なエラー画面が表示され、アプリケーションのセキュリティが向上する。

さらに、app.UseHsts();という行は、HTTP Strict Transport Security(HSTS)を有効にしている。HSTSは、Webサイトが常にHTTPS(暗号化された安全な通信)を使用するようにWebブラウザに強制するセキュリティメカニズムである。これにより、中間者攻撃などのリスクを軽減し、ユーザーの通信の安全性を確保する。

次に続く、Useという単語で始まるメソッド群は、ミドルウェアの設定を行っている。ミドルウェアとは、HTTPリクエストがアプリケーションに到達してからレスポンスがクライアントに返されるまでの間に、特定の処理を実行する小さな部品のことである。これらはパイプラインのように連結されており、リクエストは順次これらのミドルウェアを通過していく。

app.UseHttpsRedirection();

このミドルウェアは、HTTPで送られてきたリクエストを自動的にHTTPSにリダイレクトする。これにより、アプリケーション全体で安全なHTTPS通信を強制し、ユーザーが誤ってHTTPでアクセスした場合でも、自動的にHTTPS接続に切り替えられる。

app.UseStaticFiles();

このミドルウェアは、CSSファイル、JavaScriptファイル、画像ファイルなど、Webアプリケーションが配信する静的なファイルを提供できるようにする。通常、これらのファイルはプロジェクト内のwwwrootというフォルダに配置され、クライアント(Webブラウザなど)はそこから直接これらのファイルを読み込むことができるようになる。

app.UseRouting();

このミドルウェアは、アプリケーションのルーティングシステムを有効にする。ルーティングとは、Webブラウザから送られてきたURLパターンを解析し、そのURLがアプリケーション内のどの処理(どのコントローラーのどのメソッドなど)に対応するかを決定する仕組みである。このミドルウェアが有効になることで、アプリケーションは受信したリクエストを適切な処理ロジックに振り分けることができるようになる。

app.UseAuthorization();

このミドルウェアは、ユーザーが特定のルートやリソースにアクセスする権限を持っているかどうかをチェックする認可の仕組みを有効にする。これにより、ログインしているユーザーだけがアクセスできるページや、特定の役割を持つユーザーだけが利用できる機能などを実現できるようになる。

app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");

この行は、具体的なルーティングパターンを定義している。ここで定義されているのは「default」という名前のルーティングで、そのパターンは{controller=Home}/{action=Index}/{id?}である。これは、URLの最初の部分がコントローラー名、次の部分がアクション名に対応することを意味する。=Home=Indexは、それぞれコントローラー名やアクション名が指定されなかった場合のデフォルト値を設定している。また、{id?}は、IDというパラメータがオプションであることを示している。例えば、/Products/Detail/123のようなURLがあった場合、Productsがコントローラー名、Detailがアクション名、123がIDとして解釈される。

app.Run();

最後に、この行は構築されたWebアプリケーションを起動し、HTTPリクエストの受付を開始する。Program.cs内のこの行以降のコードは、アプリケーションが停止しない限り実行されない。つまり、この行がアプリケーションの実行サイクルを開始する最終的な命令である。アプリケーションはこの時点から、ユーザーからのリクエストを待ち受け、それに応じた処理を実行し始める。

このように、Program.csファイルはASP.NET Coreアプリケーションの心臓部であり、アプリケーションの起動から、どのような設定で、どのような機能を備え、どのようにリクエストを処理するかといった、あらゆる基本的な要素がこのファイルで定義されている。各行の役割を理解することは、ASP.NET Coreでの開発を進める上で非常に重要な一歩となる。

【ITニュース解説】I Didn't Understand Program.cs in .NET, So I Wrote This | いっしー@Webエンジニア