C#初心者が最初に読むべき入門ガイド|環境構築から基礎文法・学習手順までやさしく解説
はじめに
C#は、WindowsアプリやWebアプリ、ゲーム、スマホアプリ、クラウドサービスなど、幅広い開発に使われているプログラミング言語です。開発環境が充実しており、エラーを見つける機能や入力補完も利用できるため、プログラミング初心者でも段階的に学べます。
一方で、C#初心者は「C#と.NETは何が違うのか」「Visual StudioとVisual Studio Codeのどちらを使えばよいのか」「オブジェクト指向はいつ学ぶべきか」といった疑問を抱きがちです。
この記事では、C#初心者に必要な基礎知識から環境構築、基本文法、練習課題、学習手順までを順番に解説します。最初からすべてを覚えようとせず、実際にコードを書きながら一つずつ理解していきましょう。
1. C#初心者が最初に知っておきたいこと
1-1. C#とは?読み方・特徴・できることをやさしく解説
C#は「シーシャープ」と読むプログラミング言語です。Microsoftが中心となって開発しており、現在は主に.NETという開発プラットフォーム上で使用されています。
C#には、次のような特徴があります。
変数やデータの種類を明確に扱う「静的型付け言語」である
オブジェクト指向を採用している
自動メモリ管理によって開発者の負担を減らせる
Windows以外にmacOSやLinuxでも開発できる
Web、デスクトップ、ゲーム、モバイルなど幅広い用途に対応できる
Visual Studioなどの高機能な開発ツールを利用できる
C#は、文法上の間違いを実行前に検出しやすい言語です。たとえば、整数を保存する変数に文字列を代入すると、コンパイル時にエラーが表示されます。この仕組みによって、初心者でも間違いに気づきやすくなっています。
Microsoftの公式ドキュメントには、C#初心者向けのチュートリアルから言語仕様、コード例まで用意されています。C#は.NETで広く使用される、型安全なオブジェクト指向言語として位置付けられています。Microsoft Learn+1
1-2. C#とC言語・C++・Javaの違い
名前が似ているため混同されやすいものの、C#、C言語、C++はそれぞれ別のプログラミング言語です。
C言語は、OSや組み込み機器など、コンピューターに近い領域の開発でよく使用されます。メモリを細かく制御できる反面、初心者には難しく感じられる部分もあります。
C++は、C言語を拡張した言語です。高い処理性能が求められるゲームエンジン、画像処理、業務システムなどで使われています。機能が非常に多く、メモリ管理や複雑な文法を理解する必要があります。
C#は、C言語やC++に似た記号や文法を持ちますが、自動メモリ管理や豊富な標準ライブラリによって、アプリケーションを効率よく開発できるよう設計されています。
JavaもC#と同じ静的型付けのオブジェクト指向言語です。文法もよく似ていますが、使用する実行環境やフレームワーク、開発ツールが異なります。JavaはJava仮想マシン、C#は主に.NET上で動作します。
どちらが優れているというよりも、作りたいものや使用する職場の技術によって選ぶのが基本です。Windowsアプリ、ASP.NET CoreによるWeb開発、Unityによるゲーム開発に興味がある場合は、C#が有力な選択肢になります。
1-3. C#と.NETの関係
C#と.NETは、言語と開発・実行基盤の関係です。
C#は、プログラムの処理を書くための言語です。一方の.NETには、C#で書かれたコードをビルドして実行する仕組み、便利な標準ライブラリ、開発用ツールなどが含まれています。
料理にたとえると、C#がレシピを書くための言葉で、.NETが調理器具や食材、キッチンに相当します。C#だけを覚えても、実際のアプリを作るには.NETの機能が必要です。
.NETの主な構成要素は次のとおりです。
.NET SDK:アプリの作成、ビルド、実行に必要な開発ツール
ランタイム:完成した.NETアプリを動かすための実行環境
標準ライブラリ:文字列操作、ファイル操作、通信などの機能
フレームワーク:ASP.NET Core、Windows Forms、WPF、.NET MAUIなど
NuGet:外部ライブラリを追加・管理する仕組み
.NETは無料かつオープンソースで、Windows、Linux、macOSに対応しています。Web、モバイル、デスクトップ、ゲームなど、複数の種類のアプリケーションを開発できます。Microsoft+2
Microsoft+2
1-4. C#初心者に向いている人・向いていない人
C#は、次のような人に向いています。
Windows向けのデスクトップアプリを作りたい人
WebサービスやWeb APIを開発したい人
Unityを使ってゲームを作りたい人
型や文法を基礎からしっかり学びたい人
将来的に業務システム開発へ進みたい人
Visual Studioの補助機能を活用しながら学びたい人
反対に、数行のコードですぐにデータ分析や自動化を試したい人には、Pythonのほうが始めやすい場合があります。また、Webブラウザー上の画面操作だけを学びたい場合は、JavaScriptを優先する選択肢もあります。
ただし、C#が「初心者に向いていない」ということではありません。最初は覚える記号や概念が多く見えますが、型やクラスの考え方を丁寧に理解すると、大規模なプログラムでも整理しやすくなります。
2. C#で作れるもの
2-1. Windowsアプリ開発
C#では、Windows FormsやWPFを使用してWindows向けのデスクトップアプリを作れます。
Windows Formsは、ボタンやテキストボックスなどを画面上に配置しながら開発できるため、C#初心者にも比較的取り組みやすい技術です。社内用の入力ツール、在庫管理アプリ、顧客管理システムなどに利用できます。
WPFは、XAMLという画面記述言語とC#を組み合わせて開発します。データバインディング、スタイル、アニメーションなどに対応し、柔軟な画面を作れる点が特徴です。
Windows FormsにはVisual Studioのビジュアルデザイナーがあり、WPFにはXAMLやデータバインディングなどの機能が用意されています。どちらも.NET上のWindows向けUIフレームワークです。Microsoft Learn+1
2-2. Webアプリ開発
WebアプリやWeb APIの開発には、ASP.NET Coreを使用します。
ASP.NET Coreを学ぶと、次のようなものを作れます。
会員登録やログイン機能を持つWebサイト
商品を管理するECサイト
スマホアプリから利用するWeb API
社内向けの業務システム
リアルタイム通信を使うチャットアプリ
C#中心で画面を構築するBlazorアプリ
Web開発では、C#だけでなく、HTML、CSS、HTTP、データベースなどの知識も必要です。C#初心者は、最初からASP.NET Coreの複雑なアプリを作るのではなく、基礎文法とコンソールアプリを学んでから進むと理解しやすくなります。
.NETの公式ドキュメントでは、ASP.NET CoreやBlazorを含むWeb開発のチュートリアルが提供されています。Microsoft+1
2-3. ゲーム開発
C#は、ゲームエンジンのUnityで使用されるプログラミング言語です。
Unityでは、C#のスクリプトを使って次のような処理を作成します。
キャラクターを移動させる
敵の行動を制御する
スコアを計算する
アイテムを取得する
画面を切り替える
物理演算や当たり判定を処理する
ゲームの進行状態を保存する
Unityを使えば、2Dゲーム、3Dゲーム、スマホゲーム、VR・ARコンテンツなどを開発できます。
ただし、Unity独自のクラスや実行順序を最初から学ぶと、C#そのものの文法と混同しやすくなります。変数、条件分岐、繰り返し、メソッド、クラスを先に学んでおくと、Unityの理解も速くなります。
Unityでは、プロジェクト内の.csファイルとしてC#スクリプトを作成し、入力への反応、物理挙動、AI、ゲームイベントなどを制御します。Unity マニュアル+2
Unity マニュアル+2
2-4. スマホアプリ・クラウド・AI開発
.NET MAUIを使用すると、C#とXAMLを使ってAndroid、iOS、Windows、macOS向けのアプリを開発できます。プラットフォームごとの差を考慮する必要はありますが、共通化できるコードを増やせる点が特徴です。
クラウド分野では、C#で作成したWeb APIやバッチ処理をAzureなどへ配置できます。認証、データベース、ストレージ、メッセージ処理などのクラウドサービスとも連携できます。
AI分野では、外部の生成AI APIをC#から利用したり、ML.NETを使って機械学習モデルをアプリへ組み込んだりできます。
.NETは、デスクトップやWebだけでなく、モバイル、クラウド、AI・機械学習を含むアプリケーション開発に対応しています。Microsoft+1
3. C#初心者向けの環境構築
3-1. C#学習に必要なもの
C#初心者が学習を始めるために必要なものは、主に次の3つです。
Windows、macOS、Linuxのいずれかを搭載したパソコン
.NET SDK
コードを書くためのエディターまたはIDE
Windowsを使用している場合は、Visual Studio Communityを使う方法がわかりやすいでしょう。必要な.NET SDKやデバッグ機能をまとめて導入できます。
macOSやLinuxでは、.NET SDKとVisual Studio Codeを組み合わせる方法が一般的です。ターミナルからdotnetコマンドを使ってプロジェクトを作成・実行します。
ブラウザー上の学習環境を使う方法もありますが、長期的に学ぶなら、自分のパソコンに開発環境を用意してファイルやフォルダーの扱いにも慣れておくことをおすすめします。
3-2. Visual StudioとVisual Studio Codeの違い
Visual StudioとVisual Studio Codeは名前が似ていますが、別の開発ツールです。
Visual Studioは、コード編集、ビルド、デバッグ、テスト、画面設計、Git連携などをまとめて利用できる統合開発環境です。WindowsでC#を本格的に学ぶ場合に向いています。
Visual Studio Codeは、軽量なコードエディターです。Windows、macOS、Linuxで使用でき、必要な拡張機能を追加して開発環境を整えます。C#開発では、C# Dev Kitなどを利用できます。
選び方の目安は次のとおりです。
Windowsで初めてC#を学ぶ:Visual Studio
macOSやLinuxで学ぶ:Visual Studio Code
軽量な環境を使いたい:Visual Studio Code
Windows FormsやWPFを作りたい:Visual Studio
コマンド操作も身につけたい:Visual Studio Codeと.NET CLI
Visual StudioはWindows向けの統合開発環境で、Visual Studio Codeはクロスプラットフォームの軽量なエディターです。VS CodeではC# Dev Kitを追加することで、プロジェクト管理やデバッグなどのC#開発機能を利用できます。Visual Studio Code+3
Microsoft Learn+3
Visual Studio Code+3
3-3. Visual Studioをインストールする手順
WindowsでVisual Studioを導入する基本的な手順は次のとおりです。
Visual Studioの公式サイトを開く
無料で利用できるCommunityエディションをダウンロードする
ダウンロードしたインストーラーを起動する
「.NETデスクトップ開発」のワークロードを選ぶ
Web開発も行う場合は「ASP.NETとWeb開発」も選ぶ
インストールを実行する
完了後にVisual Studioを起動する
C#の基礎学習だけであれば、最初は「.NETデスクトップ開発」があれば十分です。必要な機能は後からVisual Studio Installerで追加できます。
インストール画面には多くのワークロードが表示されますが、すべてを選ぶ必要はありません。使う予定のない機能まで入れると、ダウンロード容量やディスク使用量が増えるため注意しましょう。
Visual Studioは、ワークロード単位で必要な機能を選択できます。ASP.NET Coreを学ぶ場合はWeb開発用、Windowsアプリを学ぶ場合は.NETデスクトップ用のワークロードを選びます。Microsoft Learn
3-4. .NET SDKを確認する方法
.NET SDKが正しくインストールされているか確認するには、ターミナル、コマンドプロンプト、PowerShellのいずれかを開き、次のコマンドを入力します。
Bashdotnet --version
バージョン番号が表示されれば、基本的なインストールは完了しています。
インストール済みのSDKをすべて確認したい場合は、次のコマンドを使います。
Bashdotnet --list-sdks
インストール済みのランタイムを確認するコマンドは次のとおりです。
Bashdotnet --list-runtimes
dotnetが見つからないというエラーが出る場合は、.NET SDKがインストールされていないか、環境変数の設定が反映されていない可能性があります。インストール後にターミナルやパソコンを再起動してから、もう一度確認してください。
SDKには、アプリを作成・ビルドするツールと対応するランタイムが含まれます。公式ドキュメントでも、dotnet --list-sdksなどによる確認方法が案内されています。Microsoft Learn+2
Microsoft Learn+2
3-5. はじめてのC#プロジェクトを作成する
Visual Studioを使う場合は、次の手順でコンソールアプリを作成します。
Visual Studioを起動する
「新しいプロジェクトの作成」を選ぶ
「コンソールアプリ」を検索する
言語がC#になっていることを確認する
プロジェクト名を入力する
保存場所を選ぶ
使用する.NETを選択して作成する
Visual Studio Codeやターミナルを使う場合は、次のコマンドで作成できます。
Bashdotnet new console -n CSharpBeginner
cd CSharpBeginner
dotnet run
dotnet new consoleはコンソールアプリのひな型を作るコマンドです。-n CSharpBeginnerでプロジェクト名を指定しています。
作成されたフォルダーには、主に次のファイルがあります。
Program.cs:C#のコードを書くファイル.csproj:対象の.NETや参照ライブラリなどを管理するプロジェクトファイルobjフォルダー:ビルド途中のファイルbinフォルダー:ビルド結果
最初はProgram.csと.csprojの役割を大まかに理解できれば十分です。
4. C#の基本文法を学ぼう
4-1. Hello Worldを表示してみる
最初に、画面へ文字を表示してみましょう。
C#Console.WriteLine("Hello, World!");
実行すると、次のように表示されます。
Hello, World!
Consoleはコンソール画面を扱うためのクラスです。WriteLineは、文字や数値を表示して改行するメソッドです。
現在のコンソールアプリでは、クラスやMainメソッドを省略できるトップレベルステートメントが使われることがあります。そのため、最初から1行だけのコードが表示されても問題ありません。
従来の形式で書くと、次のようになります。
C#using System;
namespace CSharpBeginner
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
最初は短い形式で学習し、クラスや名前空間を学んだ後で従来の形式を確認すると理解しやすいでしょう。
4-2. 変数とデータ型
変数とは、値を一時的に保存しておくための箱です。
C#string name = "田中";
int age = 20;
double height = 170.5;
bool isStudent = true;
よく使うデータ型には、次のものがあります。
int:整数long:大きな整数double:小数decimal:金額など、精度を重視する小数bool:trueまたはfalsechar:1文字string:文字列DateTime:日時
変数の値は後から変更できます。
C#int score = 50;
score = 80;
Console.WriteLine(score);
型をコンパイラに推測させるvarも使用できます。
C#var message = "こんにちは";
var count = 10;
ただし、varは型がなくなる機能ではありません。右辺からstringやintなどの型が決定されます。C#初心者は、型の意味を理解するまでは明示的な型とvarの両方を試してみましょう。
4-3. 演算子と文字列
数値の計算には算術演算子を使用します。
C#int a = 10;
int b = 3;
Console.WriteLine(a + b); // 13
Console.WriteLine(a - b); // 7
Console.WriteLine(a * b); // 30
Console.WriteLine(a / b); // 3
Console.WriteLine(a % b); // 1
int同士の割り算では、小数部分が切り捨てられます。小数の結果が必要な場合は、どちらかをdoubleに変換します。
C#double result = (double)a / b;
Console.WriteLine(result);
比較演算子は、値を比較してtrueまたはfalseを返します。
C#Console.WriteLine(a == b);
Console.WriteLine(a != b);
Console.WriteLine(a > b);
Console.WriteLine(a <= b);
文字列は+で連結できます。
C#string firstName = "太郎";
string message = "こんにちは、" + firstName + "さん";
Console.WriteLine(message);
より読みやすく書くには、文字列補間を使います。
C#int age = 20;
Console.WriteLine($"{firstName}さんは{age}歳です。");
文字列補間では、文字列の先頭に$を付け、埋め込みたい変数を{}で囲みます。
4-4. if文・switch文による条件分岐
条件によって処理を変えるには、if文を使用します。
C#int score = 75;
if (score >= 80)
{
Console.WriteLine("優秀です");
}
else if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("もう一度挑戦しましょう");
}
複数の条件を組み合わせることもできます。
C#int age = 20;
bool hasTicket = true;
if (age >= 18 && hasTicket)
{
Console.WriteLine("入場できます");
}
&&は「両方が正しい」、||は「どちらかが正しい」、!は真偽を反転する演算子です。
値によって処理を分けたい場合は、switch文も使えます。
C#string rank = "A";
switch (rank)
{
case "A":
Console.WriteLine("とても良い");
break;
case "B":
Console.WriteLine("良い");
break;
case "C":
Console.WriteLine("もう少し");
break;
default:
Console.WriteLine("不明な評価です");
break;
}
単純な値の判定が多い場合は、長いif文よりswitch文のほうが読みやすくなることがあります。
4-5. for文・while文による繰り返し処理
同じ処理を繰り返すには、for文を使用します。
C#for (int i = 1; i <= 5; i++)
{
Console.WriteLine($"{i}回目");
}
for文の各部分には、次の意味があります。
C#for (初期化; 継続条件; 更新処理)
{
繰り返す処理
}
回数があらかじめ決まっていない場合は、while文が便利です。
C#int count = 1;
while (count <= 5)
{
Console.WriteLine(count);
count++;
}
条件を満たすまで入力を続ける処理にも使えます。
C#string input = "";
while (input != "exit")
{
Console.Write("文字を入力してください:");
input = Console.ReadLine() ?? "";
Console.WriteLine($"入力内容:{input}");
}
無限ループが発生した場合は、更新処理が実行されているか、終了条件が正しいかを確認しましょう。
4-6. 配列とListの使い方
複数の値をまとめて扱うには、配列やList<T>を使用します。
配列は、要素数を基本的に固定して扱うデータ構造です。
C#string[] fruits = { "りんご", "みかん", "ぶどう" };
Console.WriteLine(fruits[0]);
Console.WriteLine(fruits[1]);
配列の番号は0から始まります。最初の要素はfruits[0]です。
すべての要素を順番に処理するには、foreach文が便利です。
C#foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
要素を後から追加・削除したい場合は、List<T>を使用します。
C#List<string> tasks = new List<string>();
tasks.Add("C#を勉強する");
tasks.Add("コードを書く");
tasks.Add("エラーを確認する");
tasks.Remove("コードを書く");
foreach (string task in tasks)
{
Console.WriteLine(task);
}
現在は、次のように短く書くこともできます。
C#List<string> tasks = new()
{
"C#を勉強する",
"コードを書く"
};
配列とListの違いに迷ったら、要素数が固定なら配列、追加や削除が必要ならListと考えるとよいでしょう。
4-7. メソッドの作り方と使い方
メソッドとは、複数の処理をひとまとまりにして名前を付けたものです。
C#static void Greet()
{
Console.WriteLine("こんにちは");
}
Greet();
値を受け取るメソッドは、引数を定義します。
C#static void Greet(string name)
{
Console.WriteLine($"こんにちは、{name}さん");
}
Greet("佐藤");
計算結果を返す場合は、戻り値の型とreturnを使用します。
C#static int Add(int x, int y)
{
return x + y;
}
int total = Add(10, 20);
Console.WriteLine(total);
メソッドを使うメリットは、同じ処理を何度も書かずに済むことです。1つのメソッドに多くの処理を詰め込みすぎず、「何をするメソッドなのか」を名前から判断できる大きさに分けましょう。
5. C#初心者がつまずきやすいポイント
5-1. エラーメッセージの読み方
エラーが出たときは、すぐにコード全体を書き直すのではなく、メッセージを順番に確認します。
特に見るべき項目は次の3つです。
エラーコード
エラーの説明
ファイル名と行番号
たとえば、文の終わりにセミコロンを付け忘れると、構文エラーが表示されます。
C#Console.WriteLine("こんにちは")
正しくは次のとおりです。
C#Console.WriteLine("こんにちは");
エラーメッセージが英語の場合でも、重要な単語を検索すれば解決方法を見つけられます。ただし、エラーが表示された行そのものではなく、その直前の行に原因がある場合もあります。
複数のエラーが表示されたときは、上から順番に、特に最初のエラーから直しましょう。1つの記号の不足が、後続の多数のエラーを引き起こしていることがあります。
5-2. Mainメソッド・クラス・名前空間の意味
従来形式のC#プログラムには、Mainメソッド、クラス、名前空間が登場します。
C#namespace SampleApp
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("開始");
}
}
}
それぞれの役割は次のとおりです。
Main:プログラムの開始地点Programクラス:処理やデータをまとめる単位namespace:同じ名前のクラスが衝突しないように分類する仕組みstatic:インスタンスを作らずに利用できることを示すstring[] args:コマンドラインから渡された値を受け取る
トップレベルステートメントを使用するプロジェクトでは、Mainメソッドがコード上に見えないことがありますが、コンパイラが内部的にエントリーポイントを生成します。
C#初心者は、最初からすべての意味を暗記する必要はありません。「プログラムはMainから始まり、クラスは処理をまとめ、名前空間はクラスを整理する」と理解しておけば十分です。
5-3. nullと例外処理の基本
nullは、参照する値が存在しない状態を表します。
C#string? name = null;
nameがnullの状態でプロパティやメソッドを使うと、実行時に例外が発生する可能性があります。
C#if (name != null)
{
Console.WriteLine(name.Length);
}
??演算子を使うと、値がnullの場合の代替値を指定できます。
C#string displayName = name ?? "名前未設定";
Console.WriteLine(displayName);
エラーが発生する可能性のある処理には、try-catchを使用できます。
C#try
{
Console.Write("数値を入力してください:");
string input = Console.ReadLine() ?? "";
int number = int.Parse(input);
Console.WriteLine($"入力値は{number}です");
}
catch (FormatException)
{
Console.WriteLine("正しい整数を入力してください");
}
ただし、すべての処理を無条件にtry-catchで囲むのは避けましょう。入力の変換であれば、int.TryParseを使う方法もあります。
C#Console.Write("数値を入力してください:");
string input = Console.ReadLine() ?? "";
if (int.TryParse(input, out int number))
{
Console.WriteLine($"入力値は{number}です");
}
else
{
Console.WriteLine("整数に変換できませんでした");
}
5-4. コンパイルエラーと実行時エラーの違い
コンパイルエラーは、プログラムを実行可能な形に変換する前に見つかるエラーです。
代表例は次のとおりです。
セミコロンの不足
変数名のスペルミス
存在しないメソッドの呼び出し
型の不一致
波かっこの閉じ忘れ
実行時エラーは、コンパイルには成功したものの、実際に動かしたときに発生するエラーです。
代表例は次のとおりです。
nullの値を操作した配列の範囲外を参照した
不正な文字列を数値へ変換した
存在しないファイルを開いた
0で割り算した
コンパイルエラーは実行前に修正しなければなりません。実行時エラーは、入力値の検証、条件分岐、例外処理などを使って防ぎます。
5-5. コピペ学習で理解が止まらないための注意点
サンプルコードをコピーすること自体は問題ではありません。重要なのは、コピーした後に内容を分解して確認することです。
次のように学習すると理解が深まります。
最初にそのまま実行する
変数名や数値を変更する
1行削除して動作の変化を見る
エラーを意図的に発生させる
コメントを付けて各行の意味を説明する
画面を見ずに書き直す
少し違う機能を自分で追加する
たとえば数当てゲームをコピーした場合は、挑戦回数の表示、難易度の選択、最高記録の保存などを追加してみましょう。
「コードが動いた」と「コードを理解した」は同じではありません。自分の言葉で説明できるか、別の条件でも書き直せるかを確認することが大切です。
6. オブジェクト指向の基礎
6-1. クラスとインスタンス
クラスは、データと処理をまとめた設計図です。インスタンスは、その設計図から作成した実体です。
C#class Player
{
public string Name { get; set; } = "";
public int Hp { get; set; } = 100;
public void ShowStatus()
{
Console.WriteLine($"{Name}のHPは{Hp}です");
}
}
インスタンスを作成して使用します。
C#Player player1 = new Player();
player1.Name = "勇者";
player1.Hp = 80;
player1.ShowStatus();
Player player2 = new Player();
player2.Name = "魔法使い";
player2.Hp = 60;
player2.ShowStatus();
Playerというクラスから、異なるデータを持つplayer1とplayer2を作れます。
初心者は、クラスを「関連する変数とメソッドをまとめる箱」、インスタンスを「その箱から作った具体的なデータ」と考えると理解しやすいでしょう。
6-2. プロパティとフィールド
フィールドは、クラス内部にデータを保存する変数です。
C#class User
{
public string name = "";
}
プロパティは、データへのアクセス方法を管理する仕組みです。
C#class User
{
public string Name { get; set; } = "";
}
値の設定を制限することもできます。
C#class BankAccount
{
public decimal Balance { get; private set; }
public void Deposit(decimal amount)
{
if (amount > 0)
{
Balance += amount;
}
}
}
Balanceは外部から読み取れますが、自由に書き換えることはできません。入金はDepositメソッドを通して行うため、不正な値を防ぎやすくなります。
C#では、外部へ公開するデータにはプロパティを使い、クラス内部だけで使う値には非公開フィールドを使う設計が一般的です。
6-3. コンストラクター
コンストラクターは、インスタンスを作成するときに実行される特別な処理です。
C#class Product
{
public string Name { get; }
public decimal Price { get; }
public Product(string name, decimal price)
{
Name = name;
Price = price;
}
}
インスタンスを作成するときに値を渡します。
C#Product product = new Product("キーボード", 5000m);
Console.WriteLine(product.Name);
Console.WriteLine(product.Price);
コンストラクターを使うと、インスタンスの作成時に必要な値を確実に設定できます。
不完全な状態のオブジェクトを作らせたくない場合に有効です。たとえば、商品名や価格が必須なら、コンストラクターの引数として受け取るようにします。
6-4. カプセル化・継承・ポリモーフィズム
カプセル化とは、データを外部から無制限に変更できないようにし、必要な操作だけを公開する考え方です。
C#class Counter
{
public int Value { get; private set; }
public void Increment()
{
Value++;
}
}
継承とは、既存のクラスの特徴を引き継いで新しいクラスを作る仕組みです。
C#class Animal
{
public virtual void Speak()
{
Console.WriteLine("鳴き声");
}
}
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("ワン");
}
}
ポリモーフィズムとは、共通の型を通して異なる動作を扱える性質です。
C#Animal animal = new Dog();
animal.Speak();
このコードでは、変数の型はAnimalですが、実際にはDogのSpeakが実行されます。
ただし、初心者が最初から継承を多用する必要はありません。まずはクラス、インスタンス、プロパティ、メソッドを理解し、必要になった段階で継承やインターフェイスへ進みましょう。
6-5. 初心者が最初に理解すべきオブジェクト指向の考え方
C#初心者が最初に理解すべき点は、現実世界のものを完璧に再現することではありません。
重要なのは、プログラム内の責任を分けることです。
たとえば家計簿アプリなら、次のように分けられます。
Expenseクラス:1件の支出データを表すExpenseServiceクラス:支出の追加や集計を行うFileStorageクラス:データをファイルへ保存する画面側のクラス:ユーザーの入力や表示を担当する
すべての処理をMainメソッドへ書くと、コードが長くなり、変更しにくくなります。役割ごとにクラスやメソッドを分ければ、読みやすく、テストしやすいプログラムになります。
最初は「1つのクラスには1つの主な役割を持たせる」と考えるだけでも十分です。
7. C#初心者におすすめの学習手順
7-1. ステップ1:環境構築とHello World
最初の目標は、完璧な環境を作ることではなく、自分のパソコンでC#コードを実行することです。
次の流れを一度経験しましょう。
.NET SDKまたはVisual Studioをインストールする
コンソールアプリを作成する
Console.WriteLineで文字を表示するプログラムを実行する
表示する文字を変更して再実行する
ここで、プロジェクト、ソースコード、ビルド、実行という基本的な流れを理解します。
7-2. ステップ2:基礎文法をひと通り学ぶ
次に、以下の文法を順番に学びます。
変数とデータ型
演算子
文字列
if文switch文for文while文配列
List
メソッド
例外処理
この段階では、文法を暗記するよりも「どのような場面で使うのか」を理解することが重要です。
1つの文法を学ぶたびに、5〜20行程度の短いコードを書いて動作を確認しましょう。
7-3. ステップ3:小さなコンソールアプリを作る
基礎文法を学んだら、小さなアプリを完成させます。
おすすめは、次のようなコンソールアプリです。
数当てゲーム
簡単な電卓
成績判定プログラム
買い物金額の計算
ToDoリスト
簡単な家計簿
完成度よりも、入力、処理、出力の流れを自分で組み立てることが目的です。
作成中にわからないことが出たら、必要な文法だけを調べます。「すべて学んでから作る」のではなく、「作りながら必要なことを学ぶ」方法が効果的です。
7-4. ステップ4:オブジェクト指向を学ぶ
小さなアプリを1〜2個作った後で、クラスやオブジェクト指向を学びます。
最初から抽象的な説明だけを読むよりも、すでに作ったプログラムをクラスへ分割するほうが理解しやすくなります。
たとえば、ToDoリストなら次のように整理できます。
C#class TodoItem
{
public string Title { get; set; } = "";
public bool IsCompleted { get; set; }
}
C#List<TodoItem> todoItems = new();
文字列だけのリストから、タイトルと完了状態を持つクラスへ変更すると、オブジェクト指向を使う理由が見えてきます。
7-5. ステップ5:作りたい分野に合わせて学習を進める
C#の基礎を学んだ後は、目的に応じて進む方向を決めます。
Windowsアプリを作るなら、Windows FormsまたはWPFを学びます。Webアプリなら、HTML、CSS、SQLを学んだ後にASP.NET Coreへ進みます。ゲームならUnity、スマホアプリなら.NET MAUIが候補です。
進む分野が違っても、次の知識は共通して役立ちます。
コレクション
LINQ
非同期処理
ファイル操作
データベース
例外処理
Git・GitHub
テスト
設計の基礎
8. C#初心者におすすめの練習課題
8-1. 電卓アプリ
電卓アプリでは、入力、数値変換、条件分岐、メソッドを練習できます。
最低限の機能は次のとおりです。
2つの数値を入力する
演算子を選ぶ
足し算、引き算、掛け算、割り算を行う
結果を表示する
不正な入力を処理する
0による割り算を防ぐ
発展課題として、計算履歴、連続計算、小数対応などを追加してみましょう。
8-2. ToDoリスト
ToDoリストでは、List、クラス、繰り返し、メニュー処理を練習できます。
基本機能は次のとおりです。
タスクを追加する
タスク一覧を表示する
完了状態を変更する
タスクを削除する
番号でタスクを選択する
発展課題では、期限、優先度、カテゴリー、ファイル保存を追加します。
8-3. 数当てゲーム
数当てゲームは、C#初心者が最初に作るアプリとして適しています。
C#Random random = new Random();
int answer = random.Next(1, 101);
int attempts = 0;
while (true)
{
Console.Write("1〜100の数値を入力してください:");
string input = Console.ReadLine() ?? "";
if (!int.TryParse(input, out int guess))
{
Console.WriteLine("整数を入力してください");
continue;
}
attempts++;
if (guess < answer)
{
Console.WriteLine("もっと大きいです");
}
else if (guess > answer)
{
Console.WriteLine("もっと小さいです");
}
else
{
Console.WriteLine($"正解です。{attempts}回で当たりました");
break;
}
}
発展課題として、難易度選択、制限回数、再プレイ、最高記録を追加できます。
8-4. 家計簿アプリ
家計簿アプリでは、クラス、List、集計、日時、ファイル操作を学べます。
1件の支出を表すクラスの例です。
C#class Expense
{
public DateTime Date { get; set; }
public string Category { get; set; } = "";
public decimal Amount { get; set; }
public string Memo { get; set; } = "";
}
実装する機能として、次のものが考えられます。
支出の登録
一覧表示
合計金額の計算
カテゴリー別の集計
月別の集計
CSVやJSONへの保存
8-5. 簡単なデータ管理アプリ
商品、顧客、書籍、学習記録などのデータを管理するアプリもよい練習になります。
基本機能は、CRUDと呼ばれる4つの操作です。
Create:登録
Read:表示・検索
Update:更新
Delete:削除
最初はListでデータを管理し、次にJSONファイルへ保存します。さらに発展させる場合は、SQLiteなどのデータベースへ移行しましょう。
9. C#初心者におすすめの学習教材
9-1. 公式ドキュメント
C#を学ぶときは、Microsoft LearnとC#公式ドキュメントを活用しましょう。
公式ドキュメントのメリットは、情報が正確で、言語機能や.NETの仕様を詳しく確認できることです。初心者向けチュートリアル、C#のツアー、コード例も用意されています。Microsoft Learn+2
Microsoft Learn+2
ただし、公式ドキュメントは内容が広いため、最初からすべて読もうとすると挫折しやすくなります。入門教材で概要をつかみ、わからない文法やクラスを公式ドキュメントで調べる使い方がおすすめです。
9-2. 無料学習サイト
無料学習サイトを選ぶときは、次の点を確認しましょう。
実際にコードを入力できるか
C#と.NETのバージョンが古すぎないか
基礎文法を順番に学べるか
練習問題が用意されているか
解答を読むだけでなく、自分で実行できるか
Microsoft Learnには、プログラミング未経験者を想定した対話型のC#学習コンテンツがあります。短いコードを動かしながら、文字列、数値、条件分岐などを学べます。Microsoft Learn
複数のサイトを同時に進めるより、1つの教材を最後まで進めた後で不足部分を別の教材で補うほうが、学習内容が散らかりにくくなります。
9-3. 入門書
入門書は、内容が順番に整理されている点がメリットです。
C#初心者向けの本を選ぶときは、次の点を確認してください。
現在利用されている.NETに対応している
Visual StudioまたはVS Codeの操作説明がある
コンソールアプリから始まる
サンプルコードをダウンロードできる
練習問題がある
オブジェクト指向の説明が具体的である
書店で確認できる場合は、数ページ読んで、文章やコードの説明が自分に合うか確認しましょう。
厚い本を最初から完璧に理解しようとする必要はありません。1周目は全体像をつかみ、2周目でコードを書きながら理解を深める方法も効果的です。
9-4. 動画教材
動画教材は、Visual Studioの操作やデバッグの流れを画面で確認できる点が便利です。
ただし、視聴するだけではコードを書けるようになりません。動画を一時停止して、自分の環境でも同じコードを入力しましょう。
効果的な進め方は次のとおりです。
数分視聴する
動画を停止する
自分でコードを入力する
実行結果を確認する
一部を変更する
何も見ずに書き直す
Microsoft Learnには、Hello WorldからLINQまでを扱う初心者向けC#動画シリーズも公開されています。Microsoft Learn+1
9-5. 質問・検索するときのコツ
エラーや不明点を検索するときは、具体的な情報を含めます。
悪い検索例は次のとおりです。
C# 動かない
より良い検索例は次のとおりです。
C# CS0103 名前は現在のコンテキスト内に存在しません
C# int.TryParse 入力値 数値変換
質問するときは、次の情報を整理しましょう。
作りたいもの
期待する結果
実際の結果
エラーメッセージ全文
問題を再現できる最小限のコード
使用している.NETや開発環境
パスワード、APIキー、個人情報、会社の機密情報は投稿しないよう注意してください。
10. C#初心者が次に学ぶべき技術
10-1. LINQ
LINQは、コレクションから必要なデータを検索、絞り込み、並べ替え、集計する機能です。
C#List<int> numbers = new() { 5, 12, 8, 20, 3 };
List<int> filteredNumbers = numbers
.Where(number => number >= 10)
.OrderBy(number => number)
.ToList();
foreach (int number in filteredNumbers)
{
Console.WriteLine(number);
}
LINQを使うと、複雑な繰り返し処理を読みやすく書けます。
最初に覚えたいメソッドは次のとおりです。
WhereSelectOrderByFirstOrDefaultAnyCountSumGroupBy
ラムダ式も登場しますが、最初は「要素を受け取り、条件や変換内容を書く式」と理解すれば十分です。
10-2. ファイル操作
ファイル操作を学ぶと、アプリのデータを終了後も残せるようになります。
テキストファイルへ保存する例です。
C#string filePath = "memo.txt";
File.WriteAllText(filePath, "C#の学習記録");
読み込む例です。
C#if (File.Exists(filePath))
{
string content = File.ReadAllText(filePath);
Console.WriteLine(content);
}
実際のアプリでは、JSON形式でオブジェクトを保存する方法もよく使われます。ファイルが存在しない場合、アクセス権がない場合、内容が壊れている場合も考慮しましょう。
10-3. データベース
データ件数が増えたり、検索や更新が複雑になったりしたら、データベースを学びます。
C#初心者は、次の順番で学ぶとよいでしょう。
テーブル、行、列の意味
SQLの基本
SELECT、INSERT、UPDATE、DELETE主キーと外部キー
SQLiteなどの小規模データベース
ADO.NETまたはEntity Framework Core
SQL ServerやPostgreSQL
Entity Framework Coreを使うと、C#のクラスとデータベースのテーブルを対応させて操作できます。ただし、SQLを知らなくてもよいわけではありません。基礎的なSQLを先に学ぶことが重要です。
10-4. ASP.NET Core
ASP.NET Coreを学ぶ前に、C#の基礎に加えて次の知識を身につけましょう。
HTMLとCSS
HTTP
URL
GETとPOST
JSON
SQL
非同期処理
依存性の注入の基本
学習順序の例は次のとおりです。
最小構成のWeb API
ルーティング
リクエストとレスポンス
モデルと入力検証
データベース接続
認証・認可
ログと例外処理
テスト
クラウドへの公開
ASP.NET Coreは、Webアプリ、API、Blazorなどを構築する.NETの主要なWeb開発技術です。Microsoft+1
10-5. Unity
Unityへ進む場合は、次のC#文法を先に理解しておきましょう。
変数と型
if文for文List
メソッド
クラス
継承
アクセス修飾子
プロパティ
例外の基本
Unityでは、MonoBehaviourを継承したクラスや、Start、UpdateなどのUnity独自の仕組みを使います。
一般的なC#アプリとは実行方法が異なるため、「C#の文法」と「Unityのルール」を分けて学ぶことが大切です。UnityではC#スクリプトを使って、ゲーム内オブジェクトの動作やイベントを制御します。Unity マニュアル+1
10-6. Git・GitHub
Gitは、コードの変更履歴を管理するツールです。GitHubは、Gitで管理したリポジトリを共有・公開できるサービスです。
最初に覚えたい操作は次のとおりです。
Bashgit init
git status
git add .
git commit -m "最初のコミット"
その後、次の概念へ進みます。
リポジトリ
コミット
ブランチ
マージ
プルリクエスト
.gitignorepushとpull
完成してからGitを導入するのではなく、小さな練習アプリの段階から使用すると操作に慣れやすくなります。
11. C#初心者から実務レベルを目指すロードマップ
11-1. 1か月目に学ぶこと
1か月目は、C#の基礎文法と開発ツールの操作を優先します。
学習項目の例は次のとおりです。
Visual StudioまたはVS Codeの基本操作
プロジェクトの作成と実行
変数とデータ型
演算子
条件分岐
繰り返し
配列とList
メソッド
デバッグ
エラーメッセージの確認
週末などに、電卓や数当てゲームを完成させましょう。
毎日長時間勉強するより、30分でもコードを書く日を増やすほうが習慣化しやすくなります。
11-2. 2〜3か月目に学ぶこと
2〜3か月目は、少し大きなプログラムを作るための技術を学びます。
クラスとインスタンス
プロパティとコンストラクター
カプセル化
継承とインターフェイス
例外処理
LINQ
ファイル操作
JSON
非同期処理の基礎
Git・GitHub
単体テストの基礎
この段階では、ToDoリストや家計簿など、データの登録・更新・削除があるアプリを作ります。
コード量が増えてきたら、メソッドやクラスの責任を意識して整理しましょう。
11-3. 4か月目以降に作るべきポートフォリオ
ポートフォリオでは、難しい技術を多く入れることよりも、目的と設計を説明できることが重要です。
作品例としては、次のものがあります。
ASP.NET Coreを使った予約管理アプリ
商品管理Web API
WPFを使った在庫管理アプリ
Unityを使った2Dゲーム
.NET MAUIを使った学習記録アプリ
ポートフォリオには、次の情報を用意しましょう。
アプリの目的
想定ユーザー
使用技術
主な機能
画面画像
環境構築手順
工夫した点
苦労した点と解決方法
今後の改善点
GitHub上のソースコード
サンプルコードをそのまま公開するだけでなく、自分で追加した機能や判断した設計を説明できる状態にします。
11-4. 実務で求められるC#スキル
実務では、文法を知っているだけでなく、既存のコードを読んで変更する力が求められます。
特に重要なスキルは次のとおりです。
C#の基礎文法
オブジェクト指向
LINQ
非同期処理
例外処理
データベースとSQL
Git
デバッグ
ログの確認
テストコード
APIの利用と作成
既存コードの読解
チーム内での報告・相談
すべてを一人で解決する必要はありません。問題を小さく切り分け、確認した内容を整理して質問できることも実務スキルの一つです。
12. C#初心者によくある質問
12-1. C#は初心者でも難しい?
C#は、最初に覚える型や記号が比較的多いため、簡単な言語とは言い切れません。しかし、開発ツールの入力補完やエラー表示が充実しており、学習順序を守れば初心者でも習得できます。
難しく感じやすいのは、C#の文法、Visual Studioの操作、.NET、オブジェクト指向を同時に理解しようとするためです。
最初はコンソールアプリに絞り、変数、条件分岐、繰り返し、メソッドを順番に学びましょう。クラスやフレームワークは、その後で問題ありません。
12-2. C#の学習時間はどれくらい?
基礎文法を一通り学ぶだけなら、数十時間程度が一つの目安です。ただし、アプリを自力で完成させたり、実務レベルを目指したりする場合は、数か月以上の継続的な学習が必要です。
学習時間は、プログラミング経験、学習頻度、目標によって大きく異なります。
目安としては、次のように考えられます。
基本文法を理解する:1〜2か月
小さなアプリを作る:2〜3か月
特定分野の基礎を学ぶ:3〜6か月
就職用ポートフォリオを作る:6か月以上
時間数だけでなく、自力でコードを書いた回数や、エラーを解決した経験が重要です。
12-3. C#とPythonはどちらから学ぶべき?
作りたいものによって選びましょう。
C#が向いている目的は次のとおりです。
Windowsアプリ
ASP.NET CoreによるWeb開発
Unityゲーム開発
.NETを使う業務システム
静的型付けやオブジェクト指向をしっかり学びたい
Pythonが向いている目的は次のとおりです。
データ分析
機械学習の学習
小規模な自動化
短いコードですぐ処理を試したい
プログラミングの基本概念を簡潔な文法で学びたい
どちらを先に学んでも、変数、条件分岐、繰り返し、関数などの基本概念は共通しています。複数言語を同時に始めるより、目的に合う一方を選んで小さな作品を完成させましょう。
12-4. C#はMacでも学習できる?
C#はMacでも学習できます。.NET SDKとVisual Studio Codeなどを導入すれば、コンソールアプリ、Webアプリ、クラスライブラリなどを開発できます。.NETはmacOSを含む複数のOSに対応しています。Microsoft Learn+2
Microsoft+2
一方、Windows FormsやWPFはWindows向けの技術です。これらを本格的に学ぶ場合は、Windows環境が必要になります。
なお、Visual Studio for Macは2024年8月31日に提供終了となっています。MacでC#を学ぶ場合は、Visual Studio CodeとC# Dev Kit、.NET CLIなどを使用します。Visual Studio+1
12-5. C#を学ぶと就職・転職に役立つ?
C#は、業務システム、Webサービス、Windowsアプリ、ゲームなどで使われているため、就職や転職で役立つ可能性があります。
ただし、「C#を学習した」というだけでは十分ではありません。採用では、次のような点も確認されます。
自分でアプリを完成させた経験
SQLやデータベースの知識
Gitの基本操作
Webやネットワークの基礎
エラーを調査した経験
コードの意図を説明する力
チーム開発への理解
求人によって必要な技術は異なります。ASP.NET Core、SQL Server、Azure、Windows Forms、WPF、Unityなど、志望分野に合わせて周辺技術も学びましょう。
まとめ
C#初心者は、最初から高度なアプリやオブジェクト指向の理論をすべて理解する必要はありません。
まずは.NET SDKと開発ツールを導入し、コンソールアプリでHello Worldを実行します。その後、変数、条件分岐、繰り返し、配列、List、メソッドを順番に学びましょう。
基礎文法を一通り学んだら、電卓、数当てゲーム、ToDoリストなどの小さなアプリを作ります。実際に作る過程でエラーを読み、必要な情報を調べる経験が、C#の理解を深めます。
次にクラスやオブジェクト指向、LINQ、ファイル操作、データベース、Gitを学び、目的に応じてASP.NET Core、Unity、WPF、.NET MAUIなどへ進みます。
C#の学習で大切なのは、教材を読む量ではなく、自分でコードを書いて変更し、失敗と修正を繰り返すことです。小さくても完成したプログラムを一つずつ増やし、着実に実務で使える力へつなげていきましょう。

