第3回まで無料

C# 入門コース

.NET 10 SDK の導入から、型と制御構文・クラスとインターフェース・record とパターンマッチング・LINQ・async/await と例外・NuGet と JSON・xUnit のテスト・ASP.NET Core Minimal API まで。全50レッスンで「C# でアプリを組み立て、その C# を Unity に持ち込める」ところまで進みます。コードと実行結果はすべて .NET 10 SDK(C# 14)で実際に動かし、テストで確かめたものです。

カリキュラム

全50レッスンを7つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ ブラウザ内で実行できないため、手元に .NET 10 の SDK を入れて dotnet run と dotnet test で試してください。第46〜50回は Unity のエディタではなく、Unity と同じ条件(C# 9・.NET Standard 2.1)のライブラリを .NET でビルド・テストして確かめています。

Chapter 1 — C# を始める(第1〜7回)

.NET 10 の SDK を入れ、1 ファイルのプログラムとプロジェクトの両方で C# を動かします。変数と型・値型と参照型・文字列と数値・条件分岐・ループと配列まで、テストで確かめながら進みます。

1

C# とは何か(1 ファイルで動かす)

C# と .NET の関係を整理し、dotnet run hello.cs で 1 ファイルのプログラムを動かす。各回のプログラムとテストを組にしたプロジェクトの形まで。

Free
2

環境構築と dotnet コマンド

.NET 10 SDK を入れ、dotnet new console でプロジェクトを作って動かす。.csproj の読み方、dotnet run への引数、global.json とテストの動かし方まで。

Free
3

変数と型(double と decimal)

var と型推論、よく使う型の一覧。double の 0.1 + 0.2 の誤差とお金向けの decimal、int の回り込みと checked、キャストとコンパイルエラーまで。

Free
4

値型と参照型

同じ形のデータを struct と class で作り、代入・メソッドへの受け渡し・== の違いを比べる。ref の意味と、参照型なのに値のようにふるまう string まで。

🔒 ベーシック
5

文字列と数値(書式・TryParse・丸め)

文字列補間の幅と書式、カルチャで変わる通貨表記(ja-JP の円記号は半角)、生文字列リテラル、Parse と TryParse、そして銀行型の丸めになる Math.Round。

🔒 ベーシック
6

条件分岐と switch 式

if・else if・else で送料を分け、switch 式で点数を評価に変える。タプルで書く FizzBuzz、書き忘れを知らせる CS8509 の警告、境目の値のテストまで。

🔒 ベーシック
7

ループと配列(インデックスと範囲)

コレクション式で配列を作り、for・foreach・while・do-while を使い分ける。continue と break、^1 と 1..3 のインデックスと範囲、範囲外の例外まで。

🔒 ベーシック

Chapter 2 — メソッドとオブジェクト指向(第8〜15回)

処理に名前を付けるメソッドから、クラス・プロパティ・アクセス修飾子へ進みます。継承・ポリモーフィズム・インターフェース・抽象クラスで、同じ呼び出しから違う動きを引き出すところまで扱います。

8

メソッド(out・タプル・ローカル関数)

戻り値と引数の書き方、オーバーロード・params・既定値・名前付き引数。2 つの値を返す out とタプルの使い分け、再帰とローカル関数まで。

🔒 ベーシック
9

クラスとオブジェクト

銀行口座を題材に、フィールド・コンストラクタ・メソッドを 1 つのクラスにまとめる。new で作ったオブジェクトごとの状態、private によるカプセル化、ToString の書き換えまで。

🔒 ベーシック
10

プロパティとコンストラクタ(field・required)

自動プロパティ・private set・init・required・計算で決まるプロパティを使い分け、C# 14 の field で値をチェックする。プライマリ コンストラクタと this(…) まで。

🔒 ベーシック
11

アクセス修飾子と static

public・private・protected・internal で使える場所を決め、static なメンバーとオブジェクトごとのメンバーを分ける。const と static readonly、static クラス、InternalsVisibleTo まで。

🔒 ベーシック
12

継承

乗り物の親クラスをトラックと自転車が受け継ぐ。base(…) で親のコンストラクタを呼び、protected と sealed を使う。子を親の型で扱う is と、すべての親 object まで。

🔒 ベーシック
13

ポリモーフィズム(override と new)

円・長方形・正方形を「図形」として 1 つの配列に入れ、同じ呼び方でそれぞれの面積を計算する。virtual と override の関係、そして変数の型で動きが変わる new(隠す)との違い。

🔒 ベーシック
14

インターフェース

「値段を受け取って割引後の値段を返せる」という約束を IDiscount に書き、レジは約束だけを知って使う。既定の実装、テスト用の偽物、IComparable<T> で Sort まで。

🔒 ベーシック
15

抽象クラス

「見出し → 本文 → 結び」の流れを抽象クラスが持ち、本文だけを子に書かせる。abstract と virtual の違い、テンプレート メソッド、インターフェースとの使い分け。

🔒 ベーシック

Chapter 3 — C# らしい書き方(第16〜23回)

null 許容参照型・record・パターンマッチング・struct・演算子オーバーロード・拡張メンバーなど、C# ならではの道具を使います。最後はデリゲートとラムダ式、イベントで「処理を値として渡す」書き方まで進みます。

16

null 許容参照型(?. の代入)

string と string? の違いと、確かめずに使うと出る CS8600・CS8602 の警告。?.・??・??=、C# 14 の ?. の代入、ThrowIfNull と is null による確かめ方まで。

🔒 ベーシック
17

record

値を入れておくための型を record の 1 行で作る。中身で比べる ==、中身が見える ToString、分解、with による一部だけ変えたコピー。record・record struct・class の使い分けまで。

🔒 ベーシック
18

パターンマッチング(リストのパターン)

型・when・プロパティ・位置のパターンで値を見分ける。C# 11 のリストのパターンでコマンドを解釈し、or・and・関係のパターンで季節と運賃を決める。上から順に調べることの意味まで。

🔒 ベーシック
19

struct

readonly struct で変わらない値型を作り、新しい値を返して変える。既定値と大きさ、in による読むだけの参照渡し、そして List の中の struct を変えてもコピーしか変わらない落とし穴。

🔒 ベーシック
20

演算子オーバーロード

ベクトルの型に + と * を足し、position + 3 * velocity と書けるようにする。金額の型で == と != を組で作る決まり(CS0216)、implicit と explicit の変換まで。

🔒 ベーシック
21

拡張メソッドと拡張メンバー(C# 14)

最初の引数に this を付けて、string に Truncate や IsBlank を足す。正体は static メソッドであること、null にも呼べること、C# 14 の extension ブロックで拡張プロパティと static メンバーを足すところまで。

🔒 ベーシック
22

デリゲートとラムダ式

割引のルールそのものを引数で渡す。デリゲート型とメソッド グループ、その場で書くラムダ式、Func と Action、外側の変数をつかまえるクロージャ、+= でつなぐマルチキャストまで。

🔒 ベーシック
23

イベント

株価が変わったら登録しておいた処理を呼ぶ。EventHandler<T> と EventArgs、?.Invoke での呼び出し、+= と -= での登録と解除、外から呼べない event の意味(CS0070)、Assert.Raises によるテストまで。

🔒 ベーシック

Chapter 4 — コレクションと LINQ(第24〜31回)

List と Dictionary、ジェネリクスでデータをまとめて持ち、LINQ で絞り込み・並べ替え・集計・結合をします。遅延評価と yield の仕組みを押さえ、最後は売上レポートを 1 本組み立てます。

24

List と Dictionary

List・Dictionary・HashSet・Stack・Queue の使い分け。ToDo を List で持ち、単語の数を Dictionary で数え、Stack でかっこの対応を調べる。TryGetValue と、Add と [ ] = の違いまで。

🔒 ベーシック
25

ジェネリクス

型を「あとで決める引数」にする。ジェネリック クラスとメソッド、where による制約(IComparable<T>・new())、.NET 7 からのジェネリック数学、同じ倉庫のクラスを本と会員で使い回すところまで。

🔒 ベーシック
26

LINQ の基本

商品の一覧を題材に、Where で選び Select で形を変える。メソッド構文とクエリ構文、First と FirstOrDefault、Any・All・Count・Distinct、Skip と Take のページ分けまで。

🔒 ベーシック
27

並べ替えとグループ化

点数の高い順に並べ、同点は読みの順にする。漢字の名前は読みの順に並ばないこと、GroupBy で組ごとの平均、ToDictionary、.NET 9 からの CountBy と Index、Chunk で班分けまで。

🔒 ベーシック
28

集計と結合

注文の一覧から Sum・Average・MaxBy で売上を集計し、Join と GroupJoin で客とつなぐ。注文の無い客が残るかどうかの違い、SelectMany・Aggregate・Zip、空の Average が例外になる点まで。

🔒 ベーシック
29

遅延評価

呼ばれた順番をログに残し、LINQ が作っただけでは動かず、取り出したときに 1 つずつ流れることを目で見る。回すたびのやり直し、ToList() で固めるとき、取り出した場所で起きる例外まで。

🔒 ベーシック
30

イテレーターと yield

yield return で「1 つ返して一時停止」するメソッドを書き、終わりの無いフィボナッチ数列を Take で取る。yield break、IEnumerable<T> を守るクラス、foreach がしている MoveNext と Current の正体まで。

🔒 ベーシック
31

【実践】売上レポート(CSV を集計する)

第4章のまとめとして、CSV の売上データを record に読み込み、月別・商品トップ 3・分類の割合を LINQ で集計する。読めない行を行番号つきで報告し、InvariantCulture の書式でレポートを出すところまで。

🔒 ベーシック

Chapter 5 — 非同期処理と例外(第32〜38回)

例外の受け止め方と設計、using による後片付けを押さえてから async と await に進みます。複数の Task・キャンセルとタイムアウト・非同期ストリームまで扱います。

32

例外処理

try・catch・finally で、数でない入力・0 での割り算・範囲外の数を分けて扱う。when による条件つきの catch、throw; と throw e; のスタックトレースの違い、誰も捕まえない例外まで。

🔒 ベーシック
33

例外の設計

投げる側として失敗をどう伝えるか。調べるための値を持つ自分の例外クラス、ThrowIf… のガード節、よくある失敗のための Try の形、InnerException を残して包み直すところまで。

🔒 ベーシック
34

IDisposable と using

使い終わったら片付けが必要なものを IDisposable で表し、using で確実に片付ける。何度呼んでも安全な Dispose、例外が起きても片付く理由、後に作ったものから片付く順番、StreamWriter の書き出しまで。

🔒 ベーシック
35

async と await

湯を沸かす間にパンを焼く。async メソッドと Task<T>、すぐ await すると順に進み、先に Task を作ってから await すると同時に進むことを時間で確かめる。Task は作った時点で動き出すこと、async void と .Result を避ける理由まで。

🔒 ベーシック
36

複数の Task を待つ

偽物のダウンローダーで、たくさんの Task をまとめて扱う。Task.WhenAll の結果の順番と例外の届き方、WhenAny で一番早いものを取って残りを取り消す、Parallel.ForEachAsync で同時に動かす数を決めるところまで。

🔒 ベーシック
37

キャンセルとタイムアウト

CancellationTokenSource で「やめて」と伝え、CancellationToken を受け取った側が自分でやめる。CancelAfter で時間を決めて打ち切り、リンクしたトークンで呼ぶ側の取り消しと自分のタイムアウトを見分ける。WaitAsync とテストのトークンまで。

🔒 ベーシック
38

非同期ストリーム

少しずつ届くセンサーの値を IAsyncEnumerable<T> で表し、await foreach で届いたものから受け取る。.NET 10 で標準になった非同期の LINQ、WithCancellation による取り消し、Channel で作る側と使う側をつなぐところまで。

🔒 ベーシック

Chapter 6 — .NET でアプリを作る(第39〜45回)

ソリューションとプロジェクトの分け方、NuGet、ファイルと JSON の読み書きを扱います。xUnit v3 で単体テストを書き、ASP.NET Core の Minimal API を作ってテストするところまで進みます。

39

ソリューションとプロジェクト構成

画面と中身を分け、中身をクラスライブラリに置く。dotnet new classlib・dotnet add reference・dotnet sln add でつなぎ、.NET 10 の既定の .slnx にまとめる。名前空間と internal、テストが中身を参照する形まで。

🔒 ベーシック
40

NuGet パッケージ

世界中の .NET のライブラリを NuGet で取り込む。dotnet add package で Humanizer.Core を入れ、dotnet list package で確かめる。Directory.Packages.props で版を 1 か所にまとめる Central Package Management、パッケージを選ぶときに見るところまで。

🔒 ベーシック
41

ファイル入出力(BOM)

日記を 1 行ずつテキストファイルに書きためる。Path.Combine と Directory.CreateDirectory、AppendAllText と ReadLines、StreamReader、一時フォルダの使い方、そして Encoding.UTF8 を指定すると付く BOM まで。

🔒 ベーシック
42

JSON の読み書き

System.Text.Json で record を JSON に書き、読み戻す。Web の既定・enum の文字列化・日本語が \uXXXX にエスケープされる既定と Encoder、JsonPropertyName と required、知らない項目の扱い、JsonNode とソース生成まで。

🔒 ベーシック
43

単体テスト(xUnit v3・TimeProvider)

クーポンの期限を題材に、テストしにくい「今の時刻」を TimeProvider で受け取り、偽物の時計に取り替える。Arrange・Act・Assert、テストごとに作り直されるテストクラス、Fact と Theory(InlineData・MemberData)、Assert.Multiple と Skip、失敗の読み方まで。

🔒 ベーシック
44

ASP.NET Core Minimal API

ToDo の Web API を Minimal API で作る。Microsoft.NET.Sdk.Web のプロジェクト、DI への登録、MapGet・MapPost・MapPut・MapDelete と MapGroup、{id:int}、TypedResults による状態コードの返し分け、サーバーを起動して curl で送る確かめ方まで。

🔒 ベーシック
45

Minimal API のテスト

前回の API を、サーバーを立てずにテストの中で動かす。.NET 10 の AddValidation による属性の入力チェック、WebApplicationFactory<Program> と ConfigureTestServices による時刻の取り替え、HttpClient で要求を送って状態コードと JSON を確かめる書き方まで。

🔒 ベーシック

Chapter 7 — Unity へ渡す(第46〜50回)

Unity の C# が .NET 10 と何が違うかを、C# 9・.NET Standard 2.1 のライブラリを作って確かめます。MonoBehaviour・コルーチン・属性の仕組みを模型で読み解き、Unity コースへ渡します。

46

Unity の C# は何が違うか

Unity 6 の C# は C# 9.0・.NET Standard 2.1。同じ条件のクラスライブラリを作って、このコースの書き方が通るかを実際にコンパイルして確かめる。CS8773 と API が無いエラーの 2 種類、IsExternalInit の回避策、Unity でも使える書き方まで。

🔒 ベーシック
47

MonoBehaviour の仕組み(模型)

Unity の Update に override を書かない理由。名前でメソッドを探して呼ぶミニエンジンをリフレクションで作り、Awake・Start・Update の順番、Time.deltaTime で速さをそろえる理由、名前を 1 文字間違えると黙って呼ばれない落とし穴まで。

🔒 ベーシック
48

コルーチンと IEnumerator(模型)

Unity のコルーチンの正体は第30回のイテレーター。1 フレームに 1 回 MoveNext を呼ぶ動かす係の模型を作り、yield return null・WaitForSeconds・別のコルーチンで次に進む時が決まる仕組みを、仮想の時間で確かめる。async/await との違いまで。

🔒 ベーシック
49

属性とシリアライズ(模型)

Unity の [SerializeField] や [Range] の正体である C# の属性。同じ名前の属性を自分で作り、リフレクションで読み出す Inspector の模型で、Inspector に出るフィールドと出ないフィールドの決まり、Range で値を収める仕組みまで。

🔒 ベーシック
50

総まとめ(レースのロジックを作って Unity コースへ)

最終回。Unity と同じ条件(.NET Standard 2.1・C# 9)で、ラップタイマー・スピードメーター・順位の決め方を作り、.NET 10 の xUnit でテストする。Unity の API に触らない作り方と、Unity のプロジェクトへの持っていき方まで。

🔒 ベーシック

全50レッスンを終えたら、次はここで書いた C# でゲームを 1 本作りきる Unity ゲーム開発入門コース へ。メンバーシップで全コースが解放されます。