C#開発入門ガイド|環境構築から基礎文法・実践手順まで徹底解説

C#開発入門ガイド|環境構築から基礎文法・実践手順まで徹底解説

はじめに

C#開発を始めたいものの、「何をインストールすればよいのか」「どの文法から学べばよいのか」「学習後に何を作ればよいのか」と迷っている方は少なくありません。

C#は、コンソールアプリ、Windowsデスクトップアプリ、Webアプリ、Web API、ゲーム、スマートフォンアプリ、業務システムなど、幅広い開発に利用できるプログラミング言語です。.NETと組み合わせることで、Windowsだけでなく、LinuxやmacOSにも対応したアプリケーションを開発できます。Microsoft+1

本記事では、C#開発の全体像から環境構築、基礎文法、オブジェクト指向、サンプルアプリの作成手順、実務で必要になるスキルまでを順番に解説します。プログラミング未経験者でも実際にコードを動かしながら学べる内容です。

1. C#開発とは?初心者が最初に知るべき全体像

1-1. C#の特徴とできること

C#は、Microsoftを中心に開発されている、汎用性の高いプログラミング言語です。「シーシャープ」と読みます。

主な特徴は次のとおりです。

  • 変数や戻り値の型を明確に扱う静的型付け言語

  • クラスを中心にプログラムを設計できるオブジェクト指向言語

  • メモリ管理を自動化するガベージコレクションを搭載

  • 非同期処理を比較的簡潔に記述できる

  • 豊富な標準ライブラリや外部パッケージを利用できる

  • Windows、Linux、macOSで開発・実行できる

C#は型の安全性を重視しながら、高水準の機能と低水準の処理能力を併せ持つ言語です。大規模な業務システムから個人向けのツールまで、さまざまな規模の開発に対応できます。Microsoft+1

1-2. C#と.NETの関係

C#と.NETは同じものではありません。

C#は、プログラムを書くための「言語」です。一方の.NETは、C#で作成したプログラムをビルド・実行するためのランタイム、標準ライブラリ、SDK、開発ツールなどを含む開発プラットフォームです。

イメージとしては、次のように整理できます。

  • C#:開発者が命令を書くための言語

  • .NET SDK:プロジェクトの作成やビルドに使う開発キット

  • .NETランタイム:完成したアプリケーションを実行する環境

  • 標準ライブラリ:文字列、ファイル、ネットワークなどを扱う機能群

C#開発を行う場合、通常は.NET SDKをインストールします。SDKには対応するランタイムも含まれるため、開発者が同じバージョンのランタイムを別途インストールする必要はありません。Microsoft Learn

1-3. C#開発が使われる主な分野

C#開発が使われる代表的な分野は次のとおりです。

  • Windowsデスクトップアプリ

  • WebサイトやWebアプリ

  • Web APIやバックエンドシステム

  • Unityを使ったゲーム

  • Android、iOS向けアプリ

  • 社内向け業務システム

  • クラウドサービス

  • バッチ処理や自動化ツール

  • IoTアプリケーション

C#を学ぶ大きなメリットは、一つの言語を習得することで複数の開発分野へ進めることです。最初はコンソールアプリで文法を学び、その後にWeb開発やゲーム開発へ進むと効率的です。

1-4. Java・Python・C++との違い

C#と他の主要言語には、次のような違いがあります。

言語主な特徴向いている分野
C#型安全性と開発効率のバランスがよい業務システム、Web、ゲーム、デスクトップ
Java多くの企業システムで使われる業務システム、Web、Android関連
Python文法が簡潔でライブラリが豊富AI、データ分析、自動化、Web
C++ハードウェアに近い処理ができるゲームエンジン、組み込み、高速処理

C#とJavaは文法やオブジェクト指向の考え方に共通点があります。C#は.NETの機能と密接に統合されており、プロパティ、LINQ、非同期処理などを簡潔に記述できる点が特徴です。

Pythonはコードを短く書きやすい一方、C#は型を明確にすることで、大規模開発でもコードを管理しやすくなっています。

C++は処理速度やメモリ制御に強みがありますが、初心者には難しい概念も多くあります。アプリケーション開発を効率よく学びたい場合は、C#から始める方法が有力です。

1-5. C#開発が初心者にも学びやすい理由

C#開発が初心者にも学びやすい理由は、開発ツールが充実していることです。

Visual StudioやVisual Studio Codeを使うと、入力補完、文法エラーの表示、コードの自動整形、デバッグなどを利用できます。間違いを早い段階で発見できるため、プログラムが動かない原因を調べやすくなります。

また、変数の型やメソッドの戻り値を明確に記述するため、データの流れを理解しやすいことも利点です。最初は記述量が多く感じられるかもしれませんが、型を意識する習慣は、複雑なプログラムを作る際に役立ちます。

2. C#開発で作れるもの

2-1. Windowsデスクトップアプリ開発

C#では、Windows Forms、WPF、Windows App SDKなどを利用してWindowsデスクトップアプリを開発できます。

Windows Formsは、画面上にボタンやテキストボックスを配置しながら開発できるため、初めてGUIアプリを作る場合にも適しています。データ入力ツール、在庫管理ツール、ファイル変換ツールなどの開発に利用できます。

WPFは、XAMLというマークアップ言語を使って画面を設計します。データバインディングやスタイル機能が充実しているため、画面構成が複雑な業務アプリにも対応できます。

Visual StudioにはWindows Formsアプリを作成するためのテンプレートやデザイナーが用意されています。Microsoft Learn+1

2-2. Webアプリ・Web API開発

C#でWeb開発を行う場合は、主にASP.NET Coreを使用します。

ASP.NET Coreでは、次のようなシステムを開発できます。

  • 会員制Webサイト

  • ECサイト

  • 予約管理システム

  • 管理画面

  • REST形式のWeb API

  • リアルタイム通信アプリ

  • クラウド上で動作するバックエンド

ASP.NET Coreは、クロスプラットフォームで動作するオープンソースのWebフレームワークです。WebアプリやAPIを同じC#の知識で開発できます。Microsoft Learn+1

2-3. Unityによるゲーム開発

Unityでは、ゲーム内の処理を記述するスクリプト言語としてC#が使われています。

例えば、次のような処理をC#で実装します。

  • キャラクターの移動

  • 敵の行動

  • アイテムの取得

  • スコアの計算

  • 画面の切り替え

  • セーブデータの管理

  • ゲームクリアやゲームオーバーの判定

Unityを使えば、2Dゲーム、3Dゲーム、スマートフォンゲーム、VRコンテンツなどを制作できます。ただし、Unity独自のコンポーネントやライフサイクルも学ぶ必要があります。

2-4. スマホアプリ・クロスプラットフォーム開発

.NET MAUIを使用すると、C#とXAMLを使ってAndroid、iOS、macOS、Windows向けのアプリを開発できます。共通コードを活用しながら、各OSのネイティブ機能にもアクセスできることが特徴です。Microsoft Learn+1

すべてのコードを完全に共通化できるとは限りませんが、データ処理、通信処理、ビジネスロジックなどを共有しやすくなります。

スマホアプリ開発を目指す場合は、C#の文法だけでなく、画面設計、アプリのライフサイクル、端末権限、ストレージ、ネットワーク通信なども学びましょう。

2-5. 業務システム・社内ツール開発

C#は業務システムや社内ツールの開発にも適しています。

例えば、次のようなアプリを作れます。

  • 顧客情報管理システム

  • 売上集計ツール

  • 在庫管理システム

  • 勤怠管理システム

  • ExcelやCSVの変換ツール

  • 定型作業を自動化するバッチ

  • データベースと連携する入力画面

小規模な社内ツールであれば、コンソールアプリやWindows Formsから始められます。複数人がブラウザから利用する場合は、ASP.NET CoreによるWebアプリが候補になります。

3. C#開発に必要な環境構築

3-1. C#開発に必要なツール一覧

基本的なC#開発では、次のツールを使用します。

  • .NET SDK

  • コードエディターまたは統合開発環境

  • ターミナル

  • Webブラウザ

  • Git

  • 必要に応じてデータベース

初心者がWindowsでC#開発を始める場合は、Visual Studio Communityを利用する方法がわかりやすいでしょう。軽量な環境やmacOS、Linuxで開発したい場合は、Visual Studio CodeとC# Dev Kitを利用できます。

VS CodeによるC#開発は、Windows、macOS、Linuxに対応しています。Microsoft Learn+1

3-2. Visual StudioとVisual Studio Codeの違い

Visual StudioとVisual Studio Codeは名前が似ていますが、異なる開発ツールです。

Visual Studioは、C#開発に必要な機能を幅広く備えた統合開発環境です。プロジェクト作成、画面デザイナー、ビルド、テスト、デバッグなどを一つの画面で操作できます。特にWindowsデスクトップアプリやASP.NET Coreの開発に向いています。

Visual Studio Codeは、軽量なコードエディターです。拡張機能を追加することでC#開発に対応します。起動が比較的速く、複数のプログラミング言語を扱いやすいことが特徴です。

初心者向けの選び方は次のとおりです。

  • WindowsでC#を中心に学ぶ:Visual Studio

  • macOSやLinuxで開発する:Visual Studio Code

  • コマンド操作も学びたい:Visual Studio Code

  • Windows FormsやWPFを作りたい:Visual Studio

  • 軽量なエディターを使いたい:Visual Studio Code

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

本記事では、2026年時点の環境として.NET 10 SDKを例に説明します。

Windowsでは、公式サイトからインストーラーを取得する方法に加えて、WinGetを利用できます。PowerShellまたはコマンドプロンプトで次のコマンドを実行します。Microsoft Learn

Bash
winget install Microsoft.DotNet.SDK.10

インストール後、次のコマンドで認識されているか確認します。

Bash
dotnet --version

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

インストール済みのSDKを一覧表示する場合は、次のコマンドを使用します。

Bash
dotnet --list-sdks

macOSやLinuxでは、OSやディストリビューションに対応した公式手順でSDKをインストールしてください。.NETはWindows、Linux、macOSをサポートしています。Microsoft+1

3-4. Visual StudioでC#プロジェクトを作成する方法

Visual Studioでコンソールアプリを作成する基本手順は次のとおりです。

  1. Visual Studioを起動する

  2. 「新しいプロジェクトの作成」を選択する

  3. 検索欄に「コンソール」と入力する

  4. 「コンソール アプリ」を選択する

  5. プロジェクト名と保存場所を指定する

  6. 使用する.NETのバージョンを選ぶ

  7. 「作成」をクリックする

プロジェクトを作成すると、Program.csやプロジェクトファイルが自動生成されます。

Visual Studioには、コンソール、Web、Windowsデスクトップ、Windows Forms、.NET MAUIなど、C#開発向けの各種テンプレートが用意されています。Microsoft Learn

3-5. 開発環境構築でよくあるエラーと対処法

環境構築時によくある問題の一つが、dotnetコマンドを実行しても認識されないケースです。

次の点を確認してください。

  • .NET SDKではなくランタイムだけをインストールしていないか

  • インストール後にターミナルを再起動したか

  • 環境変数PATHが正しく設定されているか

  • OSに対応したSDKをインストールしたか

  • 複数のSDKが競合していないか

Visual Studioでテンプレートが表示されない場合は、Visual Studio Installerを起動し、必要なワークロードを追加します。

例えば、次のワークロードがあります。

  • .NETデスクトップ開発

  • ASP.NETとWeb開発

  • .NET Multi-platform App UI開発

  • Unityによるゲーム開発

エラーメッセージが表示された場合は、全文を読むことが重要です。最初のエラーを解決すると、その後に表示されていた複数のエラーがまとめて解消されることもあります。

4. C#開発の基本手順

4-1. プロジェクト作成から実行までの流れ

C#開発の基本的な流れは次のとおりです。

  1. プロジェクトを作成する

  2. ソースコードを書く

  3. ビルドする

  4. エラーを修正する

  5. プログラムを実行する

  6. 動作を確認する

  7. 必要に応じてデバッグする

ターミナルからコンソールプロジェクトを作成する場合は、次のコマンドを実行します。

Bash
dotnet new console -n MyFirstApp
cd MyFirstApp
dotnet run

dotnet newは、指定したテンプレートをもとに.NETプロジェクトやファイルを作成するコマンドです。SDKにはコンソールアプリやWebアプリなどの標準テンプレートが含まれています。Microsoft Learn+1

4-2. Program.csの役割

Program.csは、コンソールアプリの処理を書き始める中心的なファイルです。

現在のC#では、トップレベルステートメントを利用できるため、最初からProgramクラスやMainメソッドを書かなくてもプログラムを実行できます。

C#
Console.WriteLine("C#開発を始めます");

従来形式では、次のように記述します。

C#
class Program
{
static void Main(string[] args)
{
Console.WriteLine("C#開発を始めます");
}
}

どちらもプログラムの開始地点として機能します。初心者は短いトップレベルステートメントから始め、クラスやメソッドを学んだ後に従来形式も理解するとよいでしょう。

4-3. コンソールアプリでHello Worldを表示する

最初のC#プログラムとして、文字列を画面に表示してみましょう。

C#
Console.WriteLine("Hello, World!");

Consoleは、コンソールへの入出力を扱うクラスです。WriteLineメソッドは、指定した値を表示した後に改行します。

改行しない場合はWriteメソッドを使用します。

C#
Console.Write("名前を入力してください:");
string? name = Console.ReadLine();

Console.WriteLine($"こんにちは、{name}さん");

Console.ReadLine()を使うと、キーボードから入力された文字列を取得できます。

4-4. ビルド・実行・デバッグの基本

ビルドとは、C#で書いたコードを実行可能な形式へ変換する処理です。

ターミナルでは次のコマンドを使用します。

Bash
dotnet build

プログラムを実行する場合は、次のコマンドです。

Bash
dotnet run

Visual Studioでは、メニューやツールバーからビルドと実行を行えます。

  • F5:デバッグを開始して実行

  • Ctrl + F5:デバッグなしで実行

  • F9:ブレークポイントの設定・解除

  • F10:次の処理へ進む

  • F11:呼び出したメソッドの内部へ進む

デバッグを利用すると、処理を一行ずつ実行しながら変数の値を確認できます。

4-5. コード修正から動作確認までの進め方

コードを修正するときは、一度に多くの変更を加えないことが大切です。

例えば、次の流れで進めます。

  1. 修正する目的を一つ決める

  2. 必要なコードだけ変更する

  3. ビルドして文法エラーを確認する

  4. プログラムを実行する

  5. 正常な入力を試す

  6. 空欄や不正な値も試す

  7. 問題がなければGitに記録する

小さな単位で動作確認を行うと、問題が発生した場所を特定しやすくなります。

5. C#開発で押さえるべき基礎文法

5-1. 変数とデータ型

変数は、プログラムで扱う値を一時的に保存するための領域です。

C#
int age = 25;
double height = 170.5;
decimal price = 1980.50m;
bool isMember = true;
char rank = 'A';
string name = "田中";

代表的なデータ型は次のとおりです。

用途
int整数100
long大きな整数10000000000L
double小数3.14
decimal金額など精度を重視する小数1200.50m
bool真偽値true
char1文字'A'
string文字列"C#"

型をコンパイラーに推論させる場合は、varを使えます。

C#
var message = "こんにちは";
var count = 10;

varを使っても型がなくなるわけではありません。右辺の値からコンパイル時に型が決定されます。

5-2. 演算子と文字列操作

数値計算では、次の演算子を使用します。

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

整数同士の割り算では、小数部分が切り捨てられます。

C#
double result = (double)a / b;
Console.WriteLine(result);

文字列は+で連結できます。

C#
string firstName = "太郎";
string lastName = "山田";

string fullName = lastName + firstName;

読みやすく書く場合は、文字列補間が便利です。

C#
int score = 85;
Console.WriteLine($"得点は{score}点です");

文字列には、長さの取得、置換、分割などの機能があります。

C#
string text = "C# development";

Console.WriteLine(text.Length);
Console.WriteLine(text.ToUpper());
Console.WriteLine(text.Replace("development", "開発"));

5-3. 条件分岐

条件に応じて処理を変える場合は、if文を使用します。

C#
int score = 75;

if (score >= 80)
{
Console.WriteLine("合格です");
}
else if (score >= 60)
{
Console.WriteLine("再確認が必要です");
}
else
{
Console.WriteLine("不合格です");
}

複数の値から処理を選ぶ場合は、switch文も利用できます。

C#
string command = "start";

switch (command)
{
case "start":
Console.WriteLine("開始します");
break;

case "stop":
Console.WriteLine("停止します");
break;

default:
Console.WriteLine("不明なコマンドです");
break;
}

switch式を使うと、値の変換を簡潔に書けます。

C#
string rank = score switch
{
>= 90 => "A",
>= 80 => "B",
>= 70 => "C",
_ => "D"
};

5-4. 繰り返し処理

回数が決まっている処理にはfor文を使います。

C#
for (int i = 1; i <= 5; i++)
{
Console.WriteLine($"{i}回目");
}

条件を満たす間、繰り返す場合はwhile文を使います。

C#
int count = 0;

while (count < 3)
{
Console.WriteLine(count);
count++;
}

配列やリストの全要素を処理するときは、foreach文が便利です。

C#
string[] names = { "佐藤", "鈴木", "高橋" };

foreach (string name in names)
{
Console.WriteLine(name);
}

5-5. 配列・リスト・コレクション

配列は、同じ型の複数の値をまとめて管理します。

C#
int[] scores = { 80, 90, 75 };

Console.WriteLine(scores[0]);

配列の要素数は作成後に変更できません。要素を追加・削除したい場合は、List<T>を使用します。

C#
List<string> products = new List<string>();

products.Add("パソコン");
products.Add("マウス");
products.Add("キーボード");

products.Remove("マウス");

foreach (string product in products)
{
Console.WriteLine(product);
}

キーと値を組み合わせて管理する場合は、Dictionary<TKey, TValue>が便利です。

C#
Dictionary<string, int> prices = new()
{
["ノート"] = 200,
["ペン"] = 100
};

Console.WriteLine(prices["ノート"]);

5-6. メソッドの定義と使い方

メソッドは、複数の処理を一つにまとめたものです。

C#
static void Greet(string name)
{
Console.WriteLine($"こんにちは、{name}さん");
}

Greet("山田");

計算結果を呼び出し元へ返す場合は、戻り値の型を指定します。

C#
static int Add(int a, int b)
{
return a + b;
}

int result = Add(10, 20);
Console.WriteLine(result);

メソッドを使うと、同じ処理を何度も書く必要がなくなります。また、処理ごとに名前を付けられるため、コードの目的がわかりやすくなります。

6. C#開発に必要なオブジェクト指向の基礎

6-1. クラスとインスタンス

クラスは、データと処理をまとめるための設計図です。クラスから作成された具体的なオブジェクトをインスタンスと呼びます。

C#
class User
{
public string Name { get; set; } = "";

public void Introduce()
{
Console.WriteLine($"私は{Name}です");
}
}

インスタンスは次のように作成します。

C#
User user = new User();
user.Name = "佐藤";
user.Introduce();

Userクラスは利用者の設計図であり、userは実際に作成された利用者のオブジェクトです。

6-2. プロパティとフィールド

フィールドは、クラス内部のデータを保持する変数です。

C#
class Counter
{
private int count;
}

プロパティは、クラス外部から値を取得・設定するための仕組みです。

C#
class Product
{
public string Name { get; set; } = "";
public decimal Price { get; set; }
}

値の設定を制限することもできます。

C#
class BankAccount
{
public decimal Balance { get; private set; }

public void Deposit(decimal amount)
{
if (amount > 0)
{
Balance += amount;
}
}
}

Balanceは外部から直接変更できません。Depositメソッドを通すことで、不正な値が設定されるのを防げます。

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);

コンストラクタを使うことで、必要な値が不足した状態のインスタンスが作られるのを防ぎやすくなります。

6-4. 継承とポリモーフィズム

継承を使うと、既存クラスの機能を引き継いだ新しいクラスを作れます。

C#
class Animal
{
public virtual void Speak()
{
Console.WriteLine("動物が鳴きます");
}
}

class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("ワン");
}
}

class Cat : Animal
{
public override void Speak()
{
Console.WriteLine("ニャー");
}
}

次のように、共通の型として扱えます。

C#
List<Animal> animals = new()
{
new Dog(),
new Cat()
};

foreach (Animal animal in animals)
{
animal.Speak();
}

同じSpeakメソッドを呼び出しても、実際のインスタンスに応じて異なる処理が実行されます。この仕組みをポリモーフィズムと呼びます。

6-5. インターフェース

インターフェースは、クラスが実装すべき機能のルールを定義します。

C#
interface INotifier
{
void Send(string message);
}

インターフェースを実装するクラスは、定義されたメソッドを用意します。

C#
class EmailNotifier : INotifier
{
public void Send(string message)
{
Console.WriteLine($"メール送信:{message}");
}
}

class ConsoleNotifier : INotifier
{
public void Send(string message)
{
Console.WriteLine($"コンソール表示:{message}");
}
}

呼び出し側は、具体的なクラスではなくインターフェースに依存できます。

C#
static void Notify(INotifier notifier, string message)
{
notifier.Send(message);
}

通知方法を変更しても、Notifyメソッドを大きく修正する必要がありません。

6-6. オブジェクト指向を使うメリット

オブジェクト指向を利用する主なメリットは、次のとおりです。

  • データと処理を関連付けられる

  • 機能ごとにコードを分割できる

  • 変更の影響範囲を小さくできる

  • 共通処理を再利用できる

  • 複数人で開発しやすくなる

  • テストしやすい設計を作れる

ただし、すべての処理を細かくクラスへ分ければよいわけではありません。最初は「一つのクラスに一つの役割を持たせる」ことから意識しましょう。

7. C#開発を実践するためのサンプル手順

7-1. 簡単な計算アプリを作る

ここでは、二つの数値を入力し、四則演算を行うコンソールアプリを作成します。

最初にプロジェクトを作成します。

Bash
dotnet new console -n CalculatorApp
cd CalculatorApp

まずは固定値を使って足し算を行います。

C#
double number1 = 10;
double number2 = 5;

double result = number1 + number2;

Console.WriteLine($"計算結果:{result}");

dotnet runを実行し、15と表示されれば成功です。

7-2. 入力値を受け取って処理する

次に、利用者から数値と演算子を受け取ります。

C#
Console.Write("1つ目の数値を入力してください:");
string? firstInput = Console.ReadLine();

Console.Write("演算子を入力してください(+、-、*、/):");
string? operation = Console.ReadLine();

Console.Write("2つ目の数値を入力してください:");
string? secondInput = Console.ReadLine();

double number1 = double.Parse(firstInput!);
double number2 = double.Parse(secondInput!);

double result = operation switch
{
"+" => number1 + number2,
"-" => number1 - number2,
"*" => number1 * number2,
"/" => number1 / number2,
_ => throw new InvalidOperationException("未対応の演算子です")
};

Console.WriteLine($"計算結果:{result}");

この段階では、数字以外を入力するとエラーになります。また、未対応の演算子を入力した場合も例外が発生します。

7-3. クラスを使って処理を分ける

計算処理をCalculatorクラスへ分離します。

C#
class Calculator
{
public double Calculate(double number1, double number2, string operation)
{
return operation switch
{
"+" => number1 + number2,
"-" => number1 - number2,
"*" => number1 * number2,
"/" => Divide(number1, number2),
_ => throw new InvalidOperationException("未対応の演算子です")
};
}

private double Divide(double number1, double number2)
{
if (number2 == 0)
{
throw new DivideByZeroException("0で割ることはできません");
}

return number1 / number2;
}
}

Program.csでは、クラスを利用して計算します。

C#
Calculator calculator = new Calculator();

double result = calculator.Calculate(
number1,
number2,
operation ?? ""
);

Console.WriteLine($"計算結果:{result}");

入力処理と計算処理を分けることで、コードの役割が明確になります。

7-4. エラー処理を追加する

double.Parseでは、入力内容が不正な場合に例外が発生します。初心者向けの入力処理では、double.TryParseを使う方法が安全です。

C#
Console.Write("1つ目の数値を入力してください:");

if (!double.TryParse(Console.ReadLine(), out double number1))
{
Console.WriteLine("数値を正しく入力してください");
return;
}

Console.Write("演算子を入力してください(+、-、*、/):");
string operation = Console.ReadLine() ?? "";

Console.Write("2つ目の数値を入力してください:");

if (!double.TryParse(Console.ReadLine(), out double number2))
{
Console.WriteLine("数値を正しく入力してください");
return;
}

Calculator calculator = new Calculator();

try
{
double result = calculator.Calculate(number1, number2, operation);
Console.WriteLine($"計算結果:{result}");
}
catch (DivideByZeroException ex)
{
Console.WriteLine(ex.Message);
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}

不正な入力があっても、アプリが突然終了せず、利用者に原因を伝えられるようになります。

7-5. 完成したプログラムを改善する

完成した計算アプリには、次のような改善を追加できます。

  • 計算を繰り返せるようにする

  • 終了コマンドを用意する

  • 計算履歴をリストへ保存する

  • 計算履歴をファイルへ書き出す

  • 単体テストを追加する

  • 入力処理を別クラスへ分離する

  • 演算子ごとにクラスを分ける

  • 小数点以下の表示形式を整える

例えば、繰り返し処理を追加する場合は、while文を利用できます。

C#
while (true)
{
Console.Write("続ける場合はEnter、終了する場合はexit:");
string command = Console.ReadLine() ?? "";

if (command.Equals("exit", StringComparison.OrdinalIgnoreCase))
{
break;
}

Console.WriteLine("次の計算を開始します");
}

小さな機能を一つずつ追加し、追加するたびに動作確認することが実践的なC#開発の基本です。

8. C#開発でよく使う実務スキル

8-1. デバッグの基本

デバッグとは、プログラムの不具合を見つけ、原因を調査して修正する作業です。

デバッグでは、次の機能を使います。

  • ブレークポイント

  • ステップ実行

  • 変数の監視

  • 呼び出し履歴の確認

  • 条件付きブレークポイント

  • ログ出力

例えば、計算結果がおかしい場合は、計算処理の直前にブレークポイントを設定します。その状態で実行し、number1number2operationの値を確認します。

「正しいはず」と考えるのではなく、「実際にどの値が入っているか」を確認することが重要です。

8-2. 例外処理の書き方

例外処理には、trycatchfinallyを使用します。

C#
try
{
int number = int.Parse("abc");
}
catch (FormatException ex)
{
Console.WriteLine($"形式が正しくありません:{ex.Message}");
}
finally
{
Console.WriteLine("処理を終了します");
}

catchでは、可能な限り具体的な例外型を指定します。

C#
try
{
string content = File.ReadAllText("data.txt");
}
catch (FileNotFoundException)
{
Console.WriteLine("ファイルが見つかりません");
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("ファイルを開く権限がありません");
}
catch (IOException ex)
{
Console.WriteLine($"入出力エラー:{ex.Message}");
}

すべての処理を大きなtry-catchで囲むのではなく、例外が発生する可能性のある範囲に限定しましょう。

8-3. ファイルの読み書き

テキストファイルへの書き込みは、File.WriteAllTextで行えます。

C#
string message = "C#開発の学習記録";
File.WriteAllText("memo.txt", message);

読み込む場合は、File.ReadAllTextを使います。

C#
string content = File.ReadAllText("memo.txt");
Console.WriteLine(content);

複数行を追記する場合は、File.AppendAllTextを利用できます。

C#
File.AppendAllText(
"log.txt",
$"{DateTime.Now}: アプリを実行しました{Environment.NewLine}"
);

実務では、ファイルの存在確認、文字コード、アクセス権限、同時書き込みなども考慮する必要があります。

8-4. NuGetパッケージの使い方

NuGetは、.NET向けライブラリを管理する仕組みです。

パッケージを追加する場合は、プロジェクトのフォルダで次のコマンドを実行します。

Bash
dotnet add package パッケージ名

追加済みパッケージは、次のコマンドで確認できます。

Bash
dotnet list package

パッケージを導入する前に、次の点を確認しましょう。

  • 目的に合っているか

  • 継続的に更新されているか

  • 対応する.NETバージョン

  • ライセンス

  • 依存パッケージ

  • 既知の脆弱性

  • 公式ドキュメントの有無

外部パッケージは便利ですが、増やしすぎると更新や保守の負担も増えます。標準ライブラリで十分に実装できる場合は、標準機能を優先する判断も必要です。

8-5. Gitによるソースコード管理

Gitは、ソースコードの変更履歴を管理するためのツールです。

基本的な流れは次のとおりです。

Bash
git init
git add .
git commit -m "初回コミット"

変更内容を確認する場合は、次のコマンドを使います。

Bash
git status
git diff

C#プロジェクトでは、ビルド時に生成されるbinフォルダやobjフォルダを通常はGitへ登録しません。.gitignoreファイルを用意して除外します。

コミットは、変更の目的が説明できる単位で行いましょう。「修正」だけではなく、「計算結果の0除算チェックを追加」のように具体的なメッセージを付けます。

8-6. コーディング規約と読みやすいコードの書き方

読みやすいC#コードを書くためには、命名と処理の分割が重要です。

クラス名やメソッド名には、通常PascalCaseを使います。

C#
class OrderService
{
public void CalculateTotalPrice()
{
}
}

ローカル変数や引数にはcamelCaseを使います。

C#
decimal totalPrice = 1000m;
string customerName = "佐藤";

意味のわからない短い名前は避けましょう。

C#
// 意味がわかりにくい
int x = 10;

// 目的がわかりやすい
int maxRetryCount = 10;

また、一つのメソッドが長くなりすぎた場合は、処理を分割します。コメントでコードを説明し続けるよりも、適切なクラス名やメソッド名で意図を表現することが大切です。

9. C#開発の学習ロードマップ

9-1. 初心者が最初に学ぶべき順番

C#開発の初心者は、次の順番で学ぶと理解しやすくなります。

  1. 開発環境の構築

  2. コンソールへの文字表示

  3. 変数とデータ型

  4. 演算子

  5. 条件分岐

  6. 繰り返し処理

  7. 配列とリスト

  8. メソッド

  9. クラスとインスタンス

  10. 例外処理

  11. ファイル操作

  12. 小規模なアプリ制作

すべてを暗記してからアプリを作ろうとすると、実践へ進めなくなります。基本文法を一通り学んだ段階で、小さなプログラムを作り始めましょう。

9-2. 基礎文法の次に学ぶべき内容

基礎文法を理解した後は、次の内容へ進みます。

  • オブジェクト指向

  • ジェネリック

  • LINQ

  • ラムダ式

  • 非同期処理

  • 単体テスト

  • データベース操作

  • HTTP通信

  • 依存性注入

  • ログ出力

  • 設定ファイル

  • Git

特にLINQは、配列やリストの絞り込み、並べ替え、集計などに使われます。

C#
List<int> scores = new() { 50, 80, 90, 65, 100 };

List<int> passedScores = scores
.Where(score => score >= 70)
.OrderByDescending(score => score)
.ToList();

C#開発の実務では頻繁に利用するため、コレクションの基礎を理解した後に学びましょう。

9-3. Web開発を目指す場合の学習手順

C#によるWeb開発を目指す場合は、次の順番がおすすめです。

  1. C#の基礎文法

  2. オブジェクト指向

  3. HTMLとCSS

  4. HTTPの基礎

  5. ASP.NET Core

  6. Razor Pages、MVCまたはBlazor

  7. Web API

  8. SQLとデータベース

  9. Entity Framework Core

  10. 認証と認可

  11. テスト

  12. クラウドへの公開

ASP.NET Coreでは、WebアプリやWeb APIを.NET CLIまたはVisual Studioから作成できます。Microsoft Learn+1

最初の練習では、タスク管理アプリや簡単な商品管理アプリを作ると、画面入力、データ保存、一覧表示、編集、削除をまとめて学べます。

9-4. Unity開発を目指す場合の学習手順

Unity開発を目指す場合は、次の内容を順番に学びます。

  1. C#の基礎文法

  2. クラスと継承

  3. Unityエディターの操作

  4. GameObjectとComponent

  5. Transform

  6. 入力処理

  7. 当たり判定

  8. Rigidbodyを使った物理処理

  9. UI

  10. シーン管理

  11. データ保存

  12. ゲームのビルド

Unityを始める前に、変数、条件分岐、繰り返し、メソッド、クラスを理解しておくと学習が進みやすくなります。

最初から大規模なRPGを作るのではなく、ブロック崩し、クリックゲーム、簡単な2Dアクションなど、完成させやすい作品から始めましょう。

9-5. 実務レベルに近づくための練習方法

実務レベルに近づくには、教材のコードを写すだけでなく、自分で仕様を考えて実装する経験が必要です。

おすすめの練習方法は次のとおりです。

  • 既存のサンプルに機能を追加する

  • エラーが出る入力を意図的に試す

  • 一度作ったコードを整理し直す

  • 単体テストを書く

  • Gitで変更履歴を管理する

  • READMEに起動方法を書く

  • データベースを利用する

  • APIと連携する

  • 完成したアプリを公開する

  • 他の人にコードを読んでもらう

特に重要なのは、アプリを最後まで完成させることです。小規模でも、設計、実装、テスト、修正、公開まで経験すると、C#開発の全体像を理解できます。

10. C#開発で初心者がつまずきやすいポイント

10-1. 環境構築で失敗する原因

環境構築で失敗する主な原因は、SDKとランタイムの違いを理解せずにインストールしていることです。

アプリを開発する場合は、基本的に.NET SDKが必要です。ランタイムだけでは、プロジェクトの作成やビルドができません。

また、インストール後にエディターやターミナルを再起動していないため、設定が反映されていないこともあります。

問題が発生したら、最初に次のコマンドを確認しましょう。

Bash
dotnet --info

インストール済みのSDK、ランタイム、OS情報などが表示されます。

10-2. エラー文の読み方がわからない

エラー文は、最初からすべて理解する必要はありません。まずは次の情報を探します。

  • エラーが発生したファイル

  • 行番号

  • エラーコード

  • 問題の種類

  • 期待されている型

  • 実際に渡された型

例えば、次のコードでは文字列を整数型へ直接代入しているため、型のエラーになります。

C#
int age = "20";

修正例は次のとおりです。

C#
int age = 20;

または、文字列を数値へ変換します。

C#
int age = int.Parse("20");

エラーが複数表示された場合は、最初のエラーから順番に修正しましょう。先頭の問題が原因で、その後のエラーが連鎖していることがあります。

10-3. オブジェクト指向が理解しにくい

オブジェクト指向は、説明だけを読んでも理解しにくい分野です。

最初は、現実のものをそのままクラスへ置き換えようとせず、プログラム上の役割で考えます。

例えば、計算アプリなら次のように分けられます。

  • Calculator:計算を担当する

  • InputReader:入力を受け取る

  • ResultWriter:結果を表示する

  • CalculationHistory:履歴を管理する

「どのクラスが、どの処理に責任を持つか」を考えると、クラス分割の目的がわかりやすくなります。

継承やインターフェースを無理に使う必要はありません。まずはクラス、プロパティ、コンストラクタ、メソッドを使って、小さな処理を分割する練習から始めましょう。

10-4. 何を作ればよいかわからない

作るものが決まらない場合は、自分が日常で使える小さなツールを選びましょう。

初心者向けの題材には、次のようなものがあります。

  • 電卓

  • じゃんけんゲーム

  • 数当てゲーム

  • ToDoリスト

  • 家計簿

  • 勤怠時間計算ツール

  • CSV集計ツール

  • パスワード生成ツール

  • ファイル名一括変更ツール

  • 簡単な在庫管理アプリ

重要なのは、独創的なアイデアではなく、完成させられる規模にすることです。最初は機能を一つに絞り、完成後に追加機能を考えましょう。

10-5. 挫折しないための学習の進め方

C#開発の学習では、すべてを一度で理解しようとしないことが大切です。

次のような進め方を意識しましょう。

  • 毎日短時間でもコードを書く

  • 学習内容を一つに絞る

  • エラーを記録する

  • サンプルコードを自分なりに変更する

  • 小さな成功体験を積み重ねる

  • 完璧に理解してから次へ進もうとしない

  • 定期的に以前のコードを書き直す

エラーは失敗ではなく、プログラムの状態を知らせる情報です。エラーを自分で調べて解決した経験が、実務で使える力につながります。

11. C#開発に関するよくある質問

11-1. C#開発は初心者でも始められる?

C#開発は、プログラミング未経験者でも始められます。

Visual StudioやVisual Studio Codeには入力補完やエラー表示などの支援機能があり、公式の初心者向けチュートリアルやコードサンプルも用意されています。Microsoft Learn+1

ただし、Webアプリやゲームを最初から作ろうとすると、C#以外の知識も必要になります。まずはコンソールアプリで変数、条件分岐、繰り返し、メソッド、クラスを学ぶのがおすすめです。

11-2. C#とC++はどちらを学ぶべき?

作りたいものによって選ぶべき言語は変わります。

業務システム、Webアプリ、Windowsアプリ、Unityゲームを作りたい場合は、C#が有力です。開発環境やライブラリが充実しており、アプリケーションの機能開発へ集中しやすいからです。

ゲームエンジン、組み込みシステム、OSに近い処理、厳密なメモリ制御、高い処理性能が求められる分野では、C++が選ばれることがあります。

プログラミング初心者が一般的なアプリ開発を学ぶ目的であれば、C#から始めるほうが取り組みやすいでしょう。

11-3. C#開発にVisual Studioは必須?

Visual Studioは必須ではありません。

.NET SDKとコードエディターがあれば、ターミナルからプロジェクトの作成、ビルド、実行が可能です。Visual Studio CodeとC# Dev Kitを組み合わせてもC#開発を行えます。Microsoft Learn+1

ただし、Windows FormsやWPFなどのWindowsデスクトップアプリを開発する場合は、Visual Studioのデザイナーやデバッグ機能が便利です。

初心者は無理にコマンド操作へ限定せず、目的に合ったツールを選びましょう。

11-4. C#開発で仕事はある?

C#は、業務システム、Webアプリ、Web API、Windowsデスクトップアプリ、クラウドサービス、Unityゲームなど、複数の開発分野で利用されています。

仕事を目指す場合は、C#の文法だけでなく、希望する分野に応じた関連技術を学ぶ必要があります。

Web系であれば、次の知識が重要です。

  • ASP.NET Core

  • HTML、CSS、JavaScript

  • SQL

  • Entity Framework Core

  • HTTPとWeb API

  • Git

  • テスト

  • クラウド

業務システム系であれば、データベース設計、例外処理、ログ、認証、既存コードの読解力なども求められます。

Unity系であれば、Unityエディター、ゲームオブジェクト、物理演算、UI、アニメーション、パフォーマンス改善などを学びましょう。

11-5. C#開発を習得するまでにどれくらいかかる?

習得までの期間は、学習時間、過去の経験、目標とする分野によって異なります。

基礎文法を使って簡単なコンソールアプリを作る段階であれば、継続的に学習することで比較的早く到達できます。一方、実務でWebシステムや業務アプリを設計・開発するには、データベース、テスト、Git、セキュリティ、フレームワークなどの知識も必要です。

期間だけを目標にするより、次のような到達基準を設定すると学習状況を判断しやすくなります。

  • 変数や条件分岐を使って処理を書ける

  • メソッドへ処理を分割できる

  • クラスを使って役割を分けられる

  • エラーメッセージを読んで修正できる

  • ファイルやデータベースへデータを保存できる

  • Gitで変更履歴を管理できる

  • 小規模なアプリを一人で完成させられる

  • 他の人が書いたコードを読める

C#開発は、一度学習して終わるものではありません。基礎を身につけた後も、実際のアプリ制作を通して知識を広げていくことが重要です。

まとめ

C#開発は、Windowsデスクトップアプリ、Webアプリ、Web API、Unityゲーム、スマートフォンアプリ、業務システムなど、幅広い分野に活用できます。

初心者は、最初に.NET SDKとVisual StudioまたはVisual Studio Codeを準備し、コンソールアプリから学習を始めましょう。その後、変数、条件分岐、繰り返し、配列、メソッド、クラス、例外処理という順番で進めると、無理なく理解を深められます。

基礎文法を学んだ後は、小さな計算アプリやToDoリストなどを作り、入力、処理、出力、エラー対応を一通り経験することが大切です。さらに、Git、NuGet、ファイル操作、データベース、単体テストなどを身につけることで、実務に近いC#開発へ進めます。

すべての文法を暗記してから開発を始める必要はありません。まずはプロジェクトを一つ作成し、短いコードを実行してください。小さな機能を作って動作確認し、エラーを修正するサイクルを繰り返すことが、C#開発を習得する最も確実な方法です。