C#でWebサーバーを作るには?初心者向けにASP.NET Coreの基本と選び方を解説

はじめに

C#でWebサーバーを作りたいと思ったとき、多くの人が最初に迷うのは「何から始めればいいのか」「ASP.NET Coreを使うべきなのか」「IISやKestrelとは何なのか」といった点ではないでしょうか。

C#はWindowsアプリや業務システムのイメージが強い言語ですが、現在ではWeb API、Webサイト、管理画面、クラウドアプリケーションなど、幅広いWeb開発に利用されています。特にASP.NET Coreを使えば、C#だけで本格的なWebサーバーを作ることができます。

この記事では、C#でWebサーバーを作る初心者に向けて、ASP.NET Coreの基本、Webサーバー構成、プロジェクトテンプレートの選び方、実際の作成手順、公開前に確認すべきポイントまで順番に解説します。

「C#でWebサーバーを作ってみたい」「ASP.NET Coreの全体像を理解したい」という方は、まずこの記事の流れに沿って学習してみてください。

1. C#でWebサーバーを作る前に知っておきたい基本

1-1. Webサーバーとは?ブラウザとC#アプリの関係

Webサーバーとは、ブラウザやスマートフォンアプリなどから送られてきたリクエストを受け取り、HTML、JSON、画像、ファイルなどのレスポンスを返す仕組みです。

たとえば、ブラウザで次のようなURLにアクセスしたとします。

https://example.com/products

このとき、ブラウザはWebサーバーに対して「productsページの情報をください」とリクエストを送ります。Webサーバーはそのリクエストを受け取り、必要な処理を行い、HTMLページやJSONデータを返します。

C#でWebサーバーを作る場合、C#で書いたアプリケーションがこのリクエスト処理を担当します。たとえば、URLごとに処理を分けたり、データベースから情報を取得したり、ログイン状態を確認したりできます。

つまり、C#のWebサーバーアプリは、ブラウザとデータベースや業務処理の間に立つ存在です。

1-2. C#でWebサーバーを作る主な方法

C#でWebサーバーを作る方法はいくつかあります。

代表的なのは、ASP.NET Coreを使う方法です。ASP.NET Coreは、C#でWebアプリケーションやWeb APIを作るための標準的なフレームワークです。現在C#でWebサーバーを作るなら、基本的にはASP.NET Coreを選ぶのが一般的です。

そのほかにも、HttpListenerを使って簡易的なWebサーバーを作る方法や、TCPソケットを直接扱ってHTTPサーバーを自作する方法もあります。ただし、これらは学習目的や特殊な用途向けです。

実務で使うWebサーバーを作るなら、ルーティング、認証、ログ、設定管理、セキュリティ、デプロイなどが整っているASP.NET Coreを使うのが安全です。

1-3. 初心者はASP.NET Coreを選ぶべき理由

初心者がC#でWebサーバーを作るなら、ASP.NET Coreから始めるのがおすすめです。

理由は、Web開発に必要な機能が最初からそろっているからです。URLに応じて処理を分けるルーティング、JSONを返すAPI、HTMLページの表示、設定ファイルの読み込み、ログ出力、依存性注入、認証機能などを標準的な形で利用できます。

また、ASP.NET CoreはWindowsだけでなく、LinuxやmacOSでも動作します。そのため、開発はWindowsのVisual Studioで行い、本番環境はLinuxサーバーやクラウドに公開する、といった構成も可能です。

C#の文法を学んだあとにWeb開発へ進むなら、ASP.NET Coreは自然な選択肢です。

1-4. 「C# Webサーバー」で検索する人が知りたいこと

「C# Webサーバー」と検索する人が知りたいことは、大きく分けると次のような内容です。

まず、C#でWebサーバーを作れるのかという疑問があります。答えは、作れます。ASP.NET Coreを使えば、Web APIやWebサイトをC#で開発できます。

次に、どの技術を選べばよいのかという疑問があります。Minimal API、MVC、Razor Pages、Blazorなど、ASP.NET Coreには複数の開発スタイルがあるため、初心者は迷いやすい部分です。

さらに、作ったWebサーバーをどうやって起動し、どうやって公開するのかも重要です。ローカル環境ではlocalhostで確認できますが、本番公開ではHTTPS、ポート番号、リバースプロキシ、セキュリティ設定などを考える必要があります。

この記事では、これらの疑問を順番に整理していきます。

2. ASP.NET Coreとは?C#でWeb開発をする標準フレームワーク

2-1. ASP.NET Coreの特徴

ASP.NET Coreは、C#でWebアプリケーションを開発するためのフレームワークです。

大きな特徴は、軽量で高速、クロスプラットフォーム、クラウド対応しやすいことです。Windowsだけでなく、LinuxやmacOSでも動作し、Dockerコンテナやクラウド環境にも対応しやすい設計になっています。

また、ASP.NET CoreにはWeb API、MVC、Razor Pages、Blazor、SignalRなど、さまざまな機能があります。小さなAPIサーバーから大規模な業務システムまで、同じC#の知識を活かして開発できます。

C#でWebサーバーを作る場合、ASP.NET Coreは中心となる技術です。

2-2. ASP.NET Coreで作れるもの

ASP.NET Coreを使うと、さまざまなWebアプリケーションを作れます。

たとえば、スマートフォンアプリやフロントエンドから呼び出すWeb APIを作れます。JSON形式でデータを返すAPIサーバーは、ASP.NET Coreの代表的な用途です。

また、HTMLページを返すWebサイトも作れます。企業サイト、予約システム、会員サイト、問い合わせフォーム、管理画面なども開発できます。

さらに、リアルタイム通信を行うチャットアプリや通知機能、C#で画面まで作るBlazorアプリなども作成可能です。

つまりASP.NET Coreは、単なるWebサーバーというより、C#でWebシステム全体を作るための土台と考えると理解しやすいでしょう。

2-3. .NET Frameworkとの違い

C#のWeb開発を調べていると、ASP.NET CoreのほかにASP.NET MVCや.NET Frameworkという言葉も出てきます。

.NET Frameworkは、主にWindows向けに使われてきた従来の開発基盤です。古い業務システムや社内システムでは、今でも.NET Framework上のASP.NET MVCやWeb Formsが使われている場合があります。

一方、ASP.NET Coreは、より新しい.NET上で動作するWebフレームワークです。Windows以外のOSでも動作し、軽量でモダンな構成になっています。

新しくC#でWebサーバーを作るなら、基本的にはASP.NET Coreを選ぶのがおすすめです。既存システムの保守では.NET Frameworkを扱うこともありますが、新規開発ではASP.NET Coreを前提に学ぶとよいでしょう。

2-4. Node.jsやPHPとの違い

Webサーバーを作る技術としては、C#以外にもNode.js、PHP、Python、Rubyなどがあります。

Node.jsはJavaScriptでサーバーサイドを開発できるため、フロントエンドと同じ言語で開発しやすいのが特徴です。PHPはレンタルサーバーやWordPressで広く使われており、Webサイト構築に強みがあります。

一方、C#とASP.NET Coreは、型の安全性、Visual Studioとの相性、業務システム開発、保守性の高さが魅力です。大規模なWeb API、社内システム、管理画面、クラウドアプリケーションなどでは、C#の堅牢さが役立ちます。

どの技術にも向き不向きがありますが、C#をすでに学んでいる人や、業務アプリケーションを作りたい人にはASP.NET Coreが向いています。

3. C#のWebサーバー構成を理解しよう

3-1. Kestrelとは

Kestrelは、ASP.NET Coreに標準で組み込まれているWebサーバーです。

ASP.NET Coreアプリを起動すると、基本的にはKestrelがHTTPリクエストを受け付けます。開発環境でlocalhostにアクセスして動作確認できるのも、Kestrelがアプリ内で動いているためです。

たとえば、ASP.NET Coreアプリを起動すると、次のようなURLでアクセスできます。

https://localhost:5001
http://localhost:5000

このように、KestrelはC#のアプリケーションをWebサーバーとして動かすための重要な仕組みです。

3-2. IISとは

IISは、Windows Serverでよく使われるWebサーバーです。正式にはInternet Information Servicesと呼ばれます。

ASP.NET CoreアプリをWindowsサーバーで公開する場合、IISを前段に置き、IISが外部からのリクエストを受け取り、内部のASP.NET Coreアプリに転送する構成がよく使われます。

IISを使うと、Windows環境での管理、HTTPS証明書の設定、アプリケーションプール、ログ管理などを統合的に扱えます。社内システムやWindowsサーバー中心の環境では、IISとASP.NET Coreの組み合わせは有力な選択肢です。

3-3. Kestrel単体で動かす場合

ASP.NET Coreアプリは、Kestrel単体でもWebサーバーとして動作します。

開発環境や小規模な検証環境では、Kestrelだけで起動してブラウザからアクセスすることができます。また、コンテナ環境やクラウドサービスでは、Kestrelをそのまま利用する構成も一般的です。

ただし、本番環境でインターネットに直接公開する場合は、HTTPS、アクセス制御、ログ、プロセス監視、静的ファイル配信、負荷分散などをどう扱うかを考える必要があります。

そのため、実際の運用ではKestrelの前にIIS、Nginx、Apache、クラウドのロードバランサーなどを置く構成もよく使われます。

3-4. IISやNginxと組み合わせる場合

本番環境では、Kestrelを直接外部公開するのではなく、IISやNginxをリバースプロキシとして使う構成があります。

リバースプロキシとは、外部からのリクエストを最初に受け取り、内部のアプリケーションサーバーへ転送する仕組みです。

たとえば、ユーザーは次のURLにアクセスします。

https://example.com

このリクエストをNginxやIISが受け取り、内部で動いているASP.NET Coreアプリに転送します。ASP.NET Coreアプリは処理結果を返し、NginxやIISが最終的にユーザーへレスポンスを返します。

この構成にすると、HTTPS設定、静的ファイル配信、アクセス制限、ログ、複数アプリの振り分けなどを管理しやすくなります。

3-5. ローカル開発と本番公開の違い

ローカル開発では、基本的に自分のPC上でASP.NET Coreアプリを起動し、localhostにアクセスして動作確認します。

https://localhost:5001

この段階では、自分だけが確認できればよいため、セキュリティやサーバー構成は最小限で問題ありません。

一方、本番公開では、外部のユーザーがアクセスできる状態にします。そのため、ドメイン、HTTPS証明書、ポート番号、ファイアウォール、ログ監視、エラー対応、データベース接続情報の管理などが必要になります。

初心者はまずローカルで動くWebサーバーを作り、その後で本番公開の仕組みを学ぶとスムーズです。

4. 初心者向け:ASP.NET CoreでWebサーバーを作る準備

4-1. 必要な開発環境

C#でASP.NET CoreのWebサーバーを作るには、主に次の環境が必要です。

まず、.NET SDKが必要です。.NET SDKには、C#のコンパイラ、実行環境、プロジェクト作成コマンドなどが含まれています。

次に、コードを書くためのエディタや統合開発環境が必要です。代表的なのはVisual StudioとVisual Studio Codeです。

また、動作確認にはブラウザを使います。Web APIを確認する場合は、curl、Postman、REST Client拡張機能などがあると便利です。

データベースを使うアプリを作る場合は、SQL Server、PostgreSQL、MySQL、SQLiteなども選択肢になります。ただし、最初はデータベースなしの簡単なWebサーバーから始めるのがおすすめです。

4-2. Visual StudioとVisual Studio Codeの選び方

初心者にはVisual Studioがおすすめです。

Visual StudioはC#開発に強く、ASP.NET Coreのプロジェクト作成、デバッグ、補完、テンプレート選択、NuGetパッケージ管理などを画面上で操作できます。Windows環境でC#のWebサーバーを作るなら、最も始めやすい選択肢です。

一方、Visual Studio Codeは軽量で、Windows、macOS、Linuxで使えます。ターミナル操作に慣れている人や、軽いエディタで開発したい人に向いています。ただし、C#拡張機能や.NET CLIの使い方をある程度理解しておく必要があります。

最初はVisual Studioで流れをつかみ、慣れてきたらVisual Studio Codeやコマンドライン開発にも挑戦するとよいでしょう。

4-3. .NET SDKのインストール

ASP.NET Coreを使うには、.NET SDKをインストールします。

インストール後、ターミナルやコマンドプロンプトで次のコマンドを実行すると、インストールされている.NETのバージョンを確認できます。

Bash
dotnet --version

バージョン番号が表示されれば、.NET SDKの準備は完了です。

また、利用可能なプロジェクトテンプレートは次のコマンドで確認できます。

Bash
dotnet new list

ASP.NET Core関連のテンプレートとして、Web API、MVC、Razor Pages、Blazorなどが表示されます。

4-4. プロジェクト作成前に決めること

ASP.NET CoreでWebサーバーを作る前に、何を作りたいのかを決めておくとスムーズです。

たとえば、JSONを返すAPIを作りたいのか、HTMLページを表示するWebサイトを作りたいのか、ログイン機能付きの管理画面を作りたいのかによって、選ぶテンプレートが変わります。

初心者が学習目的で始めるなら、まずはMinimal APIかWeb APIがおすすめです。少ないコードでC#のWebサーバーを動かせるため、リクエストとレスポンスの仕組みを理解しやすいからです。

画面付きのアプリを作りたい場合は、Razor PagesやMVCを選ぶとよいでしょう。

5. ASP.NET CoreでWebサーバーを作る基本手順

5-1. 新しいASP.NET Coreプロジェクトを作成する

まずは、コマンドラインで最小構成のASP.NET Coreプロジェクトを作成してみましょう。

Bash
dotnet new web -n MyWebServer
cd MyWebServer

dotnet new webは、空に近いASP.NET Coreアプリを作成するコマンドです。最小限のWebサーバーを理解するには、このテンプレートがわかりやすいです。

作成されたプロジェクトには、主に次のようなファイルがあります。

Program.cs
appsettings.json
MyWebServer.csproj

ASP.NET Coreの基本処理は、主にProgram.csに記述します。

5-2. Minimal APIで最小構成のWebサーバーを作る

作成直後のProgram.csには、次のようなコードが書かれています。

C#
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

このコードだけで、C#のWebサーバーとして動作します。

WebApplication.CreateBuilder(args)でアプリの設定を準備し、builder.Build()でWebアプリケーションを作成します。

app.MapGet("/", () => "Hello World!");は、ルートURLにGETリクエストが来たときにHello World!を返す設定です。

最後のapp.Run();でWebサーバーを起動します。

このように、Minimal APIを使うと非常に少ないコードでC#のWebサーバーを作れます。

5-3. localhostで起動して動作確認する

作成したプロジェクトは、次のコマンドで起動できます。

Bash
dotnet run

起動すると、ターミナルに次のようなURLが表示されます。

Now listening on: http://localhost:5000
Now listening on: https://localhost:5001

ブラウザで表示されたURLにアクセスすると、Hello World!と表示されます。

これで、C#で作ったWebサーバーがローカル環境で動作している状態になります。

開発中は、このようにlocalhostで動作確認しながら、ルーティングや処理を追加していきます。

5-4. ルーティングを追加する

Webサーバーでは、URLごとに異なる処理を実行する必要があります。これをルーティングと呼びます。

たとえば、次のように複数のルートを追加できます。

C#
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "トップページです");
app.MapGet("/about", () => "このサイトについて");
app.MapGet("/contact", () => "お問い合わせページです");

app.Run();

この場合、アクセスするURLによって返される内容が変わります。

/
→ トップページです

/about
→ このサイトについて

/contact
→ お問い合わせページです

ルーティングを理解すると、C#のWebサーバーがどのようにリクエストを処理しているのかが見えてきます。

5-5. JSONを返すAPIを作る

Web APIを作る場合は、文字列ではなくJSONを返すことが多いです。

ASP.NET Coreでは、オブジェクトを返すだけで自動的にJSONとしてレスポンスできます。

C#
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/api/products", () =>
{
var products = new[]
{
new { Id = 1, Name = "ノートPC", Price = 120000 },
new { Id = 2, Name = "マウス", Price = 3000 },
new { Id = 3, Name = "キーボード", Price = 8000 }
};

return products;
});

app.Run();

ブラウザやAPIクライアントで次のURLにアクセスすると、商品一覧がJSON形式で返ります。

/api/products

このようなAPIは、JavaScriptのフロントエンド、スマートフォンアプリ、外部システムなどから利用できます。

5-6. HTMLページを返す方法

簡単なHTMLを返したい場合は、Results.Contentを使えます。

C#
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () =>
{
var html = """
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>C# Webサーバー</title>
</head>
<body>
<h1>C#で作ったWebサーバーです</h1>
<p>ASP.NET CoreでHTMLを返しています。</p>
</body>
</html>
""";

return Results.Content(html, "text/html; charset=utf-8");
});

app.Run();

ただし、本格的なWebサイトを作る場合は、HTMLを文字列で直接書くよりも、Razor PagesやMVCを使う方が管理しやすくなります。

Minimal APIはAPIサーバーや小さなWebサーバーには便利ですが、画面が多いアプリではテンプレートエンジンを使う構成を検討しましょう。

6. 目的別:ASP.NET Coreのプロジェクトテンプレートの選び方

6-1. Web APIを作りたい場合

JSONを返すWeb APIを作りたい場合は、ASP.NET Core Web APIテンプレートがおすすめです。

Web APIは、フロントエンドアプリ、スマートフォンアプリ、外部サービスなどにデータを提供するためのサーバーです。たとえば、商品一覧API、ログインAPI、予約API、ユーザー情報APIなどを作れます。

Minimal APIを使えば、少ないコードでAPIを作成できます。一方、処理が増えてきた場合はControllerを使う構成の方が整理しやすくなります。

学習の最初はMinimal APIで仕組みを理解し、その後ControllerベースのWeb APIに進むとよいでしょう。

6-2. Webサイトを作りたい場合

HTMLページを表示するWebサイトを作りたい場合は、Razor PagesまたはMVCが候補になります。

Razor Pagesは、ページ単位で処理をまとめやすい仕組みです。お問い合わせフォーム、会社サイト、簡単な会員サイトなど、ページ中心のWebアプリに向いています。

MVCは、Model、View、Controllerに役割を分ける設計です。画面数が多いアプリや、業務ロジックを整理して管理したいアプリに向いています。

初心者が画面付きのWebサイトを作るなら、Razor Pagesから始めると理解しやすいでしょう。

6-3. 管理画面や業務システムを作りたい場合

管理画面や業務システムを作りたい場合は、MVC、Razor Pages、Blazorが候補になります。

MVCは、業務ロジックや画面の構造を整理しやすいため、規模が大きくなっても保守しやすいのが特徴です。多くの企業システムで採用しやすい構成です。

Razor Pagesは、ページごとに処理をまとめられるため、画面数が比較的少ない管理画面に向いています。

Blazorは、C#でインタラクティブな画面を作れる技術です。JavaScriptをあまり書かずに、C#中心で画面を作りたい場合に選択肢になります。

6-4. SPAやフロントエンドと連携したい場合

React、Vue、Angularなどのフロントエンドと連携したい場合は、ASP.NET CoreをWeb APIとして使う構成が一般的です。

この場合、ASP.NET CoreはJSONを返すAPIサーバーとして動作し、画面表示はJavaScriptのフロントエンド側が担当します。

構成としては、次のようになります。

ブラウザ

React / Vue / Angular

ASP.NET Core Web API

データベース

この構成では、フロントエンドとバックエンドを分離できるため、チーム開発や大規模開発に向いています。

ただし、CORS設定、認証方式、API設計などを理解する必要があるため、初心者はまず簡単なWeb APIから始めるのがおすすめです。

6-5. 初心者におすすめの選び方

初心者におすすめの選び方は、作りたいものによって変わります。

まず、C#でWebサーバーの仕組みを学びたいならMinimal APIがおすすめです。コード量が少なく、HTTPリクエストとレスポンスの関係を理解しやすいからです。

JSON APIを作りたいならWeb APIテンプレートを選びましょう。フロントエンドやスマートフォンアプリと連携する基礎が学べます。

HTMLページのあるWebサイトを作りたいならRazor Pagesがおすすめです。ページ単位で構成できるため、初心者でも流れを追いやすいです。

本格的な業務システムを作りたいならMVCを学ぶとよいでしょう。設計や保守性を意識した開発に向いています。

7. C#でWebサーバーを作るときの設計ポイント

7-1. ControllerとMinimal APIの違い

ASP.NET CoreでWeb APIを作る方法には、Minimal APIとControllerがあります。

Minimal APIは、Program.csにルーティングと処理を直接書けるシンプルな方法です。小さなAPIや学習用のWebサーバーに向いています。

C#
app.MapGet("/api/hello", () => "Hello");

一方、Controllerはクラス単位で処理を整理する方法です。エンドポイントが増えたり、認証、バリデーション、サービス層との連携が増えたりする場合に管理しやすくなります。

C#
[ApiController]
[Route("api/[controller]")]
public class HelloController : ControllerBase
{
[HttpGet]
public string Get()
{
return "Hello";
}
}

初心者はMinimal APIで始め、規模が大きくなったらControllerを学ぶ流れがおすすめです。

7-2. MVC・Razor Pages・Blazorの違い

ASP.NET Coreには、画面を作るための複数の方法があります。

MVCは、Model、View、Controllerに役割を分ける設計です。処理の分担が明確で、大きなアプリケーションでも構造を保ちやすいのが特徴です。

Razor Pagesは、ページ単位で画面と処理をまとめる仕組みです。フォーム入力や一覧表示など、ページ中心のWebサイトに向いています。

Blazorは、C#でインタラクティブな画面を作るための技術です。JavaScriptを多く書かずに、C#でUIの動きを実装できます。

どれが正解というより、作りたいものに合わせて選ぶことが大切です。初心者は、APIならMinimal API、画面付きならRazor Pagesから始めると理解しやすいでしょう。

7-3. 設定ファイルappsettings.jsonの役割

ASP.NET Coreでは、設定情報をappsettings.jsonに記述します。

たとえば、ログ設定、データベース接続文字列、外部APIのURL、アプリ独自の設定値などを管理できます。

JSON
{
"AppSettings": {
"SiteName": "My C# Web Server",
"ItemsPerPage": 20
}
}

環境ごとに設定を分けることもできます。

appsettings.json
appsettings.Development.json
appsettings.Production.json

開発環境ではテスト用の設定、本番環境では本番用の設定を使うことで、安全に運用できます。

特に、パスワードやAPIキーなどの機密情報をソースコードに直接書かないことが重要です。

7-4. 依存性注入とは

依存性注入は、ASP.NET Coreでよく使われる設計の仕組みです。英語ではDependency Injection、略してDIと呼ばれます。

簡単に言うと、必要な部品をクラスの中で直接作るのではなく、外部から渡してもらう仕組みです。

たとえば、商品情報を扱うProductServiceを登録しておくと、必要な場所で受け取って使えます。

C#
builder.Services.AddScoped<ProductService>();

Minimal APIでは、次のようにサービスを受け取れます。

C#
app.MapGet("/api/products", (ProductService service) =>
{
return service.GetProducts();
});

依存性注入を使うと、処理の分離、テストのしやすさ、保守性の向上につながります。

初心者には少し難しく感じるかもしれませんが、ASP.NET Coreでは基本機能として自然に使うことになります。

7-5. ログ出力とエラーハンドリング

Webサーバーを運用するうえで、ログ出力とエラーハンドリングは重要です。

ログがないと、エラーが発生したときに原因を追跡できません。ASP.NET Coreでは、標準でログ機能が用意されています。

C#
app.MapGet("/api/test", (ILogger<Program> logger) =>
{
logger.LogInformation("test APIが呼び出されました");
return "OK";
});

また、本番環境では、エラーの詳細をユーザーにそのまま表示しないようにする必要があります。スタックトレースや内部情報が表示されると、セキュリティ上のリスクになるからです。

開発環境では詳しいエラーを表示し、本番環境では共通のエラーページやエラーレスポンスを返す構成にしましょう。

8. 公開・運用する前に確認すべきこと

8-1. HTTPとHTTPSの違い

HTTPは、ブラウザとWebサーバーが通信するためのプロトコルです。HTTPSは、HTTP通信を暗号化したものです。

本番環境でWebサーバーを公開する場合は、基本的にHTTPSを使います。HTTPSにすることで、ログイン情報、個人情報、フォーム入力内容などを安全に送受信できます。

ASP.NET Coreの開発環境では、HTTPSでlocalhostを起動できます。ただし、本番環境ではドメインに対してSSL/TLS証明書を設定する必要があります。

WebサイトやAPIを公開するなら、HTTPS対応は必須と考えましょう。

8-2. ポート番号とURLの設定

Webサーバーは、ポート番号を使って通信を待ち受けます。

一般的に、HTTPは80番、HTTPSは443番のポートを使います。開発環境では、5000番や5001番などが使われることがあります。

たとえば、ローカル環境では次のようなURLになります。

http://localhost:5000
https://localhost:5001

本番環境では、通常は次のようなURLでアクセスできるようにします。

https://example.com

このとき、外部からの443番ポートへのアクセスを受け取り、内部のASP.NET Coreアプリへ転送するように設定することが多いです。

ポート番号、ファイアウォール、リバースプロキシの設定は、公開時に必ず確認しましょう。

8-3. セキュリティ対策の基本

C#でWebサーバーを作る場合、セキュリティ対策も重要です。

まず、入力値を信用しないことが基本です。フォームやAPIから受け取った値は、必ずバリデーションしましょう。

次に、SQLインジェクション対策が必要です。データベースを使う場合は、文字列結合でSQLを作るのではなく、Entity Framework Coreやパラメーター化クエリを使うのが安全です。

また、認証や認可も重要です。ログインしているかどうか、どのユーザーがどの機能を使えるのかを適切に制御しましょう。

さらに、機密情報をソースコードに直接書かないことも大切です。接続文字列、APIキー、パスワードなどは、環境変数やシークレット管理の仕組みを使って管理しましょう。

8-4. 本番環境へのデプロイ方法

ASP.NET Coreアプリを本番環境に公開する方法はいくつかあります。

Windowsサーバーで公開する場合は、IISを使う構成が一般的です。Visual Studioから発行したファイルをサーバーに配置し、IISでサイトを設定します。

Linuxサーバーで公開する場合は、Kestrelでアプリを起動し、Nginxをリバースプロキシとして使う構成がよく使われます。systemdでアプリをサービス化すれば、サーバー再起動時にも自動起動できます。

クラウドを使う場合は、Azure App Service、AWS、Google Cloud、コンテナサービスなどが選択肢になります。特にAzureは.NETとの相性がよく、C#アプリを公開しやすい環境です。

初心者は、まずローカルで動かし、次にクラウドの簡単なホスティング環境へ公開する流れがおすすめです。

8-5. Windowsサーバー・Linuxサーバー・クラウドの選び方

公開先を選ぶときは、運用しやすさと目的を基準に考えましょう。

Windowsサーバーは、IISやActive DirectoryなどWindows環境との連携が必要な場合に向いています。社内システムや既存のWindowsインフラがある企業では選びやすい構成です。

Linuxサーバーは、コストを抑えたい場合や、Nginx、Docker、クラウド環境と組み合わせたい場合に向いています。ASP.NET CoreはLinuxでも動作するため、C#アプリをLinuxに公開することも一般的です。

クラウドは、サーバー管理の手間を減らしたい場合に向いています。スケール、監視、証明書、デプロイなどをクラウド側の機能で管理しやすくなります。

初心者は、最初から複雑なサーバー管理に挑戦するより、クラウドのPaaSや学習用の無料枠を使って公開を試すとよいでしょう。

9. C#でWebサーバーを作るときによくある疑問

9-1. ASP.NET CoreなしでWebサーバーは作れる?

C#では、ASP.NET Coreを使わなくてもWebサーバーを作ることはできます。

たとえば、HttpListenerを使ったり、TCPソケットを直接扱ったりすれば、HTTPリクエストを受け取ってレスポンスを返す仕組みを自作できます。

ただし、実務で使うWebサーバーをゼロから作るのはおすすめしません。HTTPの仕様、セキュリティ、ルーティング、HTTPS、ログ、エラー処理など、考えるべきことが多いからです。

学習目的で「HTTPの仕組みを知りたい」という場合は自作もよいですが、アプリケーション開発が目的ならASP.NET Coreを使うべきです。

9-2. C#はWeb開発に向いている?

C#はWeb開発に向いています。

特に、型安全な言語で保守性の高いアプリを作りたい場合、C#は有力な選択肢です。Visual Studioの補完やデバッグ機能も強力で、業務システムや大規模なWeb APIの開発に適しています。

また、ASP.NET Coreはパフォーマンスにも優れており、クラウドやコンテナ環境にも対応しやすいです。

一方で、簡単な個人ブログや小規模な静的サイトだけを作りたい場合は、WordPressや静的サイトジェネレーターの方が手軽な場合もあります。

C#は、Web API、管理画面、業務システム、認証付きWebアプリ、クラウドアプリを作りたい人に向いています。

9-3. 初心者はMinimal APIとMVCのどちらから始めるべき?

初心者がC#でWebサーバーを学ぶなら、まずはMinimal APIから始めるのがおすすめです。

Minimal APIはコード量が少なく、URLにアクセスするとC#の処理が実行されるという流れを理解しやすいからです。

ただし、最終的に本格的なWebアプリを作りたいなら、MVCやRazor Pagesも学ぶ必要があります。特に画面数が多い業務システムでは、処理を整理しやすいMVCが役立ちます。

学習順としては、次の流れがわかりやすいです。

Minimal API

Web API

Razor Pages

MVC

認証・データベース・デプロイ

最初からすべてを理解しようとせず、小さなWebサーバーを作りながら少しずつ学びましょう。

9-4. 無料でWebサーバーを公開できる?

C#で作ったWebサーバーを無料で公開できる場合もあります。

クラウドサービスの無料枠や、学習用のホスティング環境を使えば、小さなASP.NET Coreアプリを公開できることがあります。ただし、無料枠には利用時間、メモリ、通信量、独自ドメイン、HTTPS、商用利用などの制限がある場合があります。

また、無料サービスは仕様変更や停止の可能性もあるため、本番サービスとして長期運用する場合は有料プランを検討した方が安全です。

学習目的なら無料枠で十分ですが、ユーザーに提供するサービスなら、安定性とサポートを考えて有料環境を選びましょう。

9-5. 学習の次に作るべきサンプルアプリ

C#でWebサーバーの基本を学んだら、次は小さなサンプルアプリを作るのがおすすめです。

最初に作りやすいのは、Todo APIです。タスクの一覧取得、追加、更新、削除を実装すると、Web APIの基本であるCRUD処理を学べます。

次に、簡単な商品管理アプリもおすすめです。商品名、価格、在庫数を登録・編集・削除できる管理画面を作ると、フォーム処理やデータベース連携を学べます。

ログイン機能を学びたい場合は、会員制のメモアプリや予約管理アプリもよい題材です。

学習用のサンプルアプリでは、次の要素を少しずつ追加すると実践力がつきます。

ルーティング
JSONレスポンス
HTML表示
フォーム入力
データベース連携
ログイン機能
エラーハンドリング
HTTPS
デプロイ

小さく作って、少しずつ機能を増やすことが大切です。

まとめ

C#でWebサーバーを作るなら、まずASP.NET Coreを学ぶのがおすすめです。

ASP.NET Coreを使えば、Minimal APIによる小さなWebサーバーから、Web API、Webサイト、管理画面、業務システム、クラウドアプリケーションまで幅広く開発できます。

初心者は、まずMinimal APIでHello Worldを返すWebサーバーを作り、localhostで起動して動作確認するところから始めましょう。その後、ルーティング、JSONレスポンス、HTML表示、設定ファイル、依存性注入、ログ、エラーハンドリングなどを順番に学ぶと理解しやすくなります。

本番公開を考える場合は、Kestrel、IIS、Nginx、HTTPS、ポート番号、セキュリティ、デプロイ先の選定も重要です。ローカルで動くだけでなく、安全に公開・運用できる構成を意識しましょう。

C#は、堅牢で保守しやすいWebサーバーを作るのに向いている言語です。ASP.NET Coreを使って小さなアプリから作り始めれば、実務にもつながるWeb開発スキルを身につけられます。