はじめに
この記事は、1.5ヶ月(6週間)で C# と .NET を一通り学ぶ ための教材ロードマップです。
「基礎文法 → オブジェクト指向 → C# 特有の書き方 → .NET プロジェクト構造 → ASP.NET Core → Web API → 配布」までを 6 週間で走り抜けます。使う教材はすべて無料・日本語 に限定しているので、お金をかけずに始められます。
各週ごとに以下を明示しています:
- 📚 学ぶこと
- 🎯 到達ゴール
- 🔗 使う無料教材
- 🛠 手を動かす課題
- ✅ チェックリスト(週末に自分で確認)
対象読者
- 他の言語(Java / TypeScript / Python など)を一つでも触ったことがある方
- C# / .NET をこれから業務 or 個人開発で使いたい方
- 短期間で「Web API が書けて、exe として配布できる」状態まで持っていきたい方
プログラミング完全初学者の方へ
本ロードマップは「他の言語の基礎は知っている」前提で 1.5ヶ月に圧縮しています。プログラミング自体が初めての場合は、各週を倍の期間で進めるか、ステップ 1 の前に paiza ラーニング C# 入門編(無料枠あり)で 1〜2 週間ウォームアップすることをおすすめします。
全体スケジュール(6週間)
| 週 | テーマ | 1日あたり目安 |
|---|---|---|
| 第1週 | 基礎文法とデータ型 | 1〜2時間 |
| 第2週 | オブジェクト指向とアクセス修飾子 | 1〜2時間 |
| 第3週 | C# 特有の書き方(LINQ・async/await・record) | 1.5〜2時間 |
| 第4週 | .NET プロジェクト構造と ASP.NET Core 基礎 | 1.5〜2時間 |
| 第5週 | Web API 開発 | 2時間 |
| 第6週 | ビルド・配布・調べる力 | 1.5時間 |
合計でおよそ 60〜80 時間 が目安です。平日 1 日 1〜2 時間 + 週末まとめて、というペースで完走できる分量にしています。
学習を始める前の準備(所要時間: 30分)
必要なもの
- PC(Windows / macOS / Linux いずれでも OK)
- .NET SDK(無料)
- エディタ: Visual Studio Code(無料)または Visual Studio Community(無料)
インストール確認
.NET SDK をインストールしたら、以下のコマンドでバージョンを確認します:
dotnet --version
# 10.0.x のように表示されれば OK
参考(準備用)
- .NET のダウンロード - .NET SDK 公式ダウンロードページ
- Visual Studio Code のダウンロード - 無料エディタ
- C# Dev Kit - VS Code Marketplace - VS Code で C# を書くための公式拡張機能
第1週: 基礎文法とデータ型
📚 学ぶこと
- 変数宣言(
var、int、stringなど) - 値型と参照型の違い、
structとclassの使い分け -
nullable 参照型(
string?)と#nullable enable - 文字列補間(
$"{name}")、StringBuilder - 配列と主要なコレクション(
List<T>、Dictionary<TKey, TValue>) - 制御構文(
if、switch式、for、foreach) - 例外処理(
try-catch-finally、using文)
🎯 到達ゴール
「他言語で書けるロジックは C# でも書ける」状態。Hello World からループ・配列・例外処理までを dotnet run で動かせる。
🔗 使う無料教材
| 教材 | 使い方 |
|---|---|
| C# ガイド | Microsoft Learn | 全体像を眺める(初日に 30 分) |
| 対話型のチュートリアル | Microsoft Learn | メイン教材。ブラウザ上で動かしながら学ぶ |
| 一週間で身につく C# 言語の基本 | 補助教材。日本語で全体像を素早く掴む |
| paiza ラーニング C# 入門編 | 動画派の人向け(無料枠あり) |
🛠 手を動かす課題
dotnet new console -n Week1Practice
cd Week1Practice
Program.cs に以下を実装:
- 1〜100 までの整数を出力(FizzBuzz)
- 文字列のリストを受け取り、最も長い文字列を返すメソッド
- ファイル読み込み時の例外処理(存在しないファイルを
try-catchで扱う)
✅ チェックリスト
-
dotnet new/dotnet runでプロジェクトを作成・実行できる -
varと明示的な型宣言の使い分けを説明できる -
string?とstringの違いを説明できる -
List<T>と配列の違いを説明できる -
try-catch-finallyで例外を適切に扱える - FizzBuzz を C# で書ける
第2週: オブジェクト指向とアクセス修飾子
📚 学ぶこと
- クラスとオブジェクト、コンストラクタ
- プロパティ(
get/set/init) - 継承、
abstract/virtual/override/sealed - インターフェースと抽象クラスの使い分け
- アクセス修飾子(7 種類)
-
record型(C# 9 で導入)
アクセス修飾子の早見表
| 修飾子 | 公開範囲 |
|---|---|
public |
どこからでも |
private |
同じクラス内のみ |
protected |
派生クラスからアクセス可 |
internal |
同じアセンブリ内のみ |
protected internal |
派生クラス または 同じアセンブリ |
private protected |
派生クラス かつ 同じアセンブリ |
file |
同じファイル内のみ(C# 11+) |
特に internal は重要です。クラスライブラリの内部実装を外に出さないために使います。
record の便利さ
public record Employee(string Name, int Age, string Department);
これだけで、コンストラクタ・プロパティ・等値比較・ToString() が自動生成されます。DTO やドメインモデルにぴったりです。
🎯 到達ゴール
クラス・継承・インターフェース・record を使い分けて、簡単なドメインモデルが書ける。
🔗 使う無料教材
| 教材 | 使い方 |
|---|---|
| C# のクラス、構造体、レコード | Microsoft Learn | メイン教材 |
| アクセス修飾子 | Microsoft Learn | 修飾子の完全リファレンス |
| ++C++; // 未確認飛行 C | クラス・継承・インターフェースの章を読む。「なぜこの仕様なのか」まで踏み込んだ良サイト |
🛠 手を動かす課題
「図書館」をモデル化してみましょう。
-
Book(タイトル、著者、ISBN)をrecordで定義 -
IBookRepositoryインターフェースを定義(Add、FindByIsbn、GetAll) -
InMemoryBookRepositoryで実装(内部にList<Book>を持つ) - 内部フィールドは
privateにする
✅ チェックリスト
- クラスとインターフェースの違いを説明できる
-
abstract classとinterfaceを使い分けられる - 7 種類のアクセス修飾子の使い分けを説明できる
-
recordとclassの違いを説明できる - 上の課題を完成させた
第3週: C# 特有の書き方(LINQ・async/await・record)
ここが他言語経験者にとって一番「違う」と感じる部分です。この週が一番大事 です。
📚 学ぶこと
| トピック | 概要 |
|---|---|
| LINQ |
list.Where(x => x.IsActive).Select(x => x.Name).ToList() 形式のクエリ |
| async / await | I/O はほぼ全て非同期。Task<T>
|
| ジェネリクス |
List<T>、ジェネリック制約(where T : class) |
| デリゲートとラムダ |
Action、Func<T>、=>
|
| 拡張メソッド |
static class 内の this パラメータ付きメソッド |
| パターンマッチング |
switch 式、is パターン |
IDisposable と using |
リソース管理 |
| コレクション式(C# 12+) | int[] nums = [1, 2, 3]; |
⚠️ async/await の落とし穴
-
async voidは禁止(async Taskを使う) - ライブラリコードでは
ConfigureAwait(false)を付ける -
Task.Result/Task.Wait()はデッドロックの原因になる - メソッド名は
〜Asyncで終わらせる慣習
🎯 到達ゴール
LINQ でコレクション操作ができる。async / await を使った非同期メソッドが書ける。
🔗 使う無料教材
| 教材 | 使い方 |
|---|---|
| LINQ (言語統合クエリ) | Microsoft Learn | LINQ のメイン教材 |
| 非同期プログラミング | Microsoft Learn | async/await のメイン教材 |
| パターンマッチング | Microsoft Learn | パターンマッチング |
| 初心者が本当に知りたかった C# 入門以前 | Zenn | 必読。古い書き方に騙されないために |
🛠 手を動かす課題
第 2 週で作った BookRepository を拡張:
-
GetAll()の戻り値を LINQ で著者名昇順にソート -
SearchByTitleAsync(string keyword)を非同期メソッドとして実装(Task<List<Book>>) -
Task.Delay(100)で擬似的な I/O 待ちを入れる -
Mainからawaitで呼び出す(Mainをasync Task Mainにする)
✅ チェックリスト
-
Where、Select、OrderBy、ToListを使える -
async Taskメソッドを書ける -
awaitの意味を説明できる -
async voidがなぜダメか説明できる -
ラムダ式と
Func<T>を使える - 上の課題を完成させた
第4週: .NET プロジェクト構造と ASP.NET Core 基礎
📚 学ぶこと
前半(.NET エコシステム)
-
dotnetCLI:new、build、run、test、publish、add package、add reference -
csproj ファイル: SDK スタイル、
TargetFramework、PackageReference - ソリューション(.sln) とプロジェクトの関係
- NuGet パッケージ管理
-
依存性注入(DI):
IServiceCollection、AddScoped/AddSingleton/AddTransient -
設定ファイル:
appsettings.json、IConfiguration -
ロギング:
ILogger<T>
後半(ASP.NET Core 基礎)
- Minimal API vs Controller の違い
- ホスト起動の仕組み(
WebApplication.CreateBuilder→app.Run()) - ミドルウェアパイプライン
- 静的ファイル配信
- CORS 設定の基礎
DI は標準機能
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScoped<IBookRepository, InMemoryBookRepository>();
var app = builder.Build();
app.Run();
C# / .NET では DI コンテナが標準搭載されています。AddScoped / AddSingleton / AddTransient の違いは早めに覚えましょう。
🎯 到達ゴール
「ローカルで起動して、Hello World を返す Web サーバー」を作れる。DI を使ってサービスを登録・利用できる。
🔗 使う無料教材
| 教材 | 使い方 |
|---|---|
| .NET CLI の概要 | Microsoft Learn |
dotnet コマンド |
| .NET の依存関係の挿入 | Microsoft Learn | DI |
| .NET の構成 | Microsoft Learn | appsettings.json |
| ASP.NET Core の概要 | Microsoft Learn | ASP.NET Core 全体像 |
| ASP.NET Core ミドルウェア | Microsoft Learn | パイプラインの仕組み |
🛠 手を動かす課題
dotnet new web -n Week4WebApp
cd Week4WebApp
dotnet run
-
Program.csでapp.MapGet("/", () => "Hello World!")を実装 - 第 2 週の
IBookRepositoryを DI 登録 -
app.MapGet("/books", (IBookRepository repo) => repo.GetAll())で書籍一覧を JSON で返す - ブラウザまたは
curlで動作確認
✅ チェックリスト
-
dotnet new webで Web プロジェクトを作れる - DI でサービスを登録・注入できる
- Minimal API で簡単なエンドポイントを書ける
- ブラウザから JSON を取得できる
第5週: Web API 開発
ロードマップの中核です。実践的な REST API の作り方を学びます。
📚 学ぶこと
REST API の基本
- HTTP メソッド(GET / POST / PUT / PATCH / DELETE)
- ステータスコード(200, 201, 204, 400, 401, 404, 409, 500)
- URL 設計(
/api/books/{id}) - リクエスト/レスポンスを
recordで定義
エンドポイント実装
Minimal API:
app.MapGet("/api/books/{id:int}", (int id, IBookRepository repo) =>
{
var book = repo.FindById(id);
return book is null ? Results.NotFound() : Results.Ok(book);
});
Controller:
[ApiController]
[Route("api/[controller]")]
public class BooksController(IBookRepository repo) : ControllerBase
{
[HttpGet("{id:int}")]
public IActionResult Get(int id) =>
repo.FindById(id) is { } book ? Ok(book) : NotFound();
}
小規模なら Minimal API、複雑になってきたら Controller、が一つの目安です。
その他に学ぶこと
-
モデルバインディング:
[FromRoute]、[FromQuery]、[FromBody]、[FromServices] -
バリデーション: DataAnnotations(
[Required]、[Range]) -
エラーハンドリング: グローバル例外ハンドラ、
ProblemDetails(RFC 7807) -
シリアライズ:
System.Text.Jsonのオプション、日付型(DateOnly) -
OpenAPI / Swagger: .NET 9+ では
Microsoft.AspNetCore.OpenApiが標準 - CORS: フロントエンド連携用
-
CancellationToken: 長時間処理のキャンセル
OpenAPI の自動生成
builder.Services.AddOpenApi();
// ...
app.MapOpenApi();
これだけで /openapi/v1.json が生成されます。フロント側で TypeScript 型を自動生成すれば、API の型ズレを防げます。
🎯 到達ゴール
CRUD 一通り揃った Web API を実装し、Swagger UI から動作確認できる。
🔗 使う無料教材
| 教材 | 使い方 |
|---|---|
| チュートリアル: Minimal API を作成する | Microsoft Learn | メイン教材。最新 .NET 10 版 |
| チュートリアル: コントローラーベースの Web API を作成する | Microsoft Learn | Controller 版 |
| ASP.NET Core で Web API を作成する | Microsoft Learn | Web API 全般 |
| JavaScript で ASP.NET Core Web API を呼び出す | Microsoft Learn | フロントから API を叩く例 |
| ASP.NET Core Web API のチュートリアルを丁寧にやってみた | hirahira blog | 公式チュートリアルの日本語補足 |
🛠 手を動かす課題
第 4 週のプロジェクトを拡張して、以下のエンドポイントを持つ書籍管理 API を完成させる:
| メソッド | パス | 内容 |
|---|---|---|
GET |
/api/books |
全書籍取得 |
GET |
/api/books/{id} |
ID 指定取得(存在しなければ 404) |
POST |
/api/books |
新規追加(バリデーション付き、成功時 201) |
PUT |
/api/books/{id} |
更新(存在しなければ 404) |
DELETE |
/api/books/{id} |
削除(成功時 204) |
さらに:
- OpenAPI を有効化して Swagger UI(または Scalar)で動作確認
- グローバル例外ハンドラを実装
- バリデーションエラー時に
ProblemDetailsで返す
✅ チェックリスト
- CRUD の各エンドポイントが動く
- HTTP ステータスコードを使い分けられる
- バリデーションが効いている
- OpenAPI ドキュメントが生成される
- Swagger UI から API を叩ける
第6週: ビルド・配布・調べる力
📚 学ぶこと
前半: ビルドと配布
非エンジニアの Windows ユーザーに配布する場合、ランタイム不要の単一 exe がベストです。
dotnet publish -c Release -r win-x64 \
--self-contained true \
/p:PublishSingleFile=true \
/p:IncludeNativeLibrariesForSelfExtract=true \
/p:EnableCompressionInSingleFile=true
学ぶこと:
-
ランタイム識別子(RID):
win-x64、linux-x64、osx-arm64 - self-contained vs framework-dependent
-
PublishSingleFile: 起動時に一時フォルダに展開される仕組み -
トリミング(
PublishTrimmed)と AOT(PublishAot)の罠
トリミングと AOT は最初は無効のままが安全です。 ASP.NET Core やリフレクションを多用するライブラリは、トリミング有効時に実行時エラーになりやすいです。ファイルサイズより動作優先で。
後半: 調べる力
C# は 変化が速い言語 です。5 年前の情報は使えないことが多く、3 年前の情報も怪しいことがあります。
開発フローの型:
- エラーメッセージをそのままググる
- 公式ドキュメント(learn.microsoft.com)で該当 API を確認
- 最小再現コード で試す
- プロジェクトに適用
生成 AI に質問するときのコツ:
❌ 「C# で Web API の作り方を教えて」
⭕ 「.NET 10 / ASP.NET Core 10 で Minimal API を使った Web API の作り方を教えて」
バージョンを必ず明示しましょう。古い書き方(Startup.cs 等)を提案されるのを防げます。
🎯 到達ゴール
第 5 週で作った Web API を 単一 exe にビルドして起動できる。困ったときに自力で公式ドキュメントを引ける。
🔗 使う無料教材
| 教材 | 使い方 |
|---|---|
| 単一ファイルの展開 | Microsoft Learn | 単一ファイル発行 |
| .NET アプリケーションの公開 | Microsoft Learn | 配布方式全般 |
| ランタイム識別子 (RID) のカタログ | Microsoft Learn | RID 一覧 |
| C# の新機能 | Microsoft Learn | バージョン別新機能 |
🛠 手を動かす課題
- 第 5 週の Web API を
dotnet publishで単一 exe としてビルド - ビルド成果物だけを別フォルダにコピーして起動できるか確認
- README.md を書いて、起動方法と API 仕様をまとめる
✅ チェックリスト
-
dotnet publishで単一 exe が生成できる - 生成された exe が単独で起動する
- self-contained と framework-dependent の違いを説明できる
- 困ったときに公式ドキュメントを引ける
完走後にできるようになっていること
🎉 6 週間お疲れさまでした!ここまで完走したあなたは:
- C# で基本的なロジックが書ける
- オブジェクト指向と LINQ・async/await を使いこなせる
- ASP.NET Core で Web API を実装できる
- OpenAPI でドキュメントを自動生成できる
- 単一 exe として配布できる
- 公式ドキュメントを読んで自力で問題解決できる
ここまで来れば、業務ツールや個人プロジェクトに C# を導入する判断ができる状態です。
教材リファレンス(無料・日本語のみ)
最後に、本記事で使った教材を目的別にまとめます。全て無料・日本語 で読めます。
🏛️ 公式ドキュメント(最重要)
| サイト | 用途 |
|---|---|
| C# ガイド | C# 言語の公式ドキュメント |
| ASP.NET Core ドキュメント | ASP.NET Core 全般 |
| .NET ドキュメント | .NET プラットフォーム全般 |
| .NET ラーニングセンター | チュートリアル・動画のハブ |
| C# の新機能 | バージョン別新機能 |
📺 動画・対話型(初学者向け)
| サイト | 用途 |
|---|---|
| 対話型チュートリアル | ブラウザでコードを動かしながら学ぶ |
| 初心者向け C# (動画シリーズ) | 公式の入門動画 |
| paiza ラーニング C# 入門編 | 動画 + 演習(無料枠あり) |
📖 体系的に学びたい(個人サイト)
| サイト | 特徴 |
|---|---|
| ++C++; // 未確認飛行 C | C# 仕様の深掘り。中級以上の必読 |
| 一週間で身につく C# 言語の基本 | 日本語で全体像を素早く掴む |
🎯 落とし穴対策
| サイト | 用途 |
|---|---|
| 初心者が本当に知りたかった C# 入門以前(Zenn) | 古い情報に騙されないために(必読) |
| ASP.NET Core Web API のチュートリアルを丁寧にやってみた | 公式チュートリアルの日本語補足 |
🚀 Web API・実践
| サイト | 用途 |
|---|---|
| Minimal API チュートリアル | Minimal API |
| Controller ベース Web API チュートリアル | Controller 版 |
| ASP.NET Core で Web API を作成する | Web API 全般 |
| JavaScript で Web API を呼び出す | フロント連携 |
🔧 ツール
| サイト | 用途 |
|---|---|
| .NET のダウンロード | .NET SDK |
| Visual Studio Code | 無料エディタ |
| .NET CLI の概要 |
dotnet コマンド |
| 単一ファイル発行 | exe 配布 |
おわりに
C# / .NET は、一つの言語で Web API・デスクトップアプリ・ゲーム(Unity)・モバイルまで カバーできるコストパフォーマンスの良いスタックです。学習コストはやや高めですが、一度身につければ応用範囲が広いのが魅力です。
このロードマップの一番のポイントは、毎週「手を動かす課題」を通じて、書籍管理 API という一つの成果物を育てていく ことです。バラバラのサンプルを書くより、一つのプロジェクトに継続的に手を入れていく方が圧倒的に定着します。
無料教材だけで 1.5ヶ月走り切れる構成にしているので、ぜひ完走してみてください 💪
「ここがわかりにくい」「このトピックも追加してほしい」などあれば、コメントで教えていただけると嬉しいです 🙌
最後まで読んでいただきありがとうございました!