C#コードの書き方入門|初心者がつまずく基本文法・実行方法・エラー解決まで徹底解説
はじめに
C#コードを学び始めると、「どこに何を書けばいいのか」「なぜエラーになるのか」「Visual StudioとVS Codeのどちらを使えばいいのか」など、最初の段階で多くの疑問が出てきます。
C#は、Webアプリ、Windowsアプリ、ゲーム、業務システム、クラウドアプリなど幅広い分野で使われているプログラミング言語です。文法は比較的読みやすい一方で、型、クラス、メソッド、プロジェクト構成など、初心者がつまずきやすい要素もあります。
この記事では、C#コードの基本的な書き方から、実行方法、文法、エラー解決、練習用コードまでを初心者向けに順番に解説します。最初から完璧に理解する必要はありません。まずは短いC#コードを書いて、動かしながら少しずつ慣れていきましょう。
1. C#コードとは?初心者が最初に知っておきたい基礎知識
C#コードとは、C#というプログラミング言語で書かれた命令の集まりです。コンピューターに対して「文字を表示する」「計算する」「条件によって処理を変える」「データを保存する」といった指示を出すために使います。
たとえば、画面に文字を表示するC#コードは次のように書けます。
C#Console.WriteLine("Hello, C#");
この1行は、「Hello, C#」という文字をコンソール画面に表示する命令です。C#コードは、このような命令を組み合わせてアプリケーションを作っていきます。
1-1. C#でできること:Webアプリ・Windowsアプリ・ゲーム開発
C#では、さまざまな種類のアプリケーションを開発できます。
Webアプリを作る場合は、ASP.NET Coreを使って、予約サイト、管理画面、ECサイト、APIサーバーなどを開発できます。Windowsアプリを作る場合は、WPF、Windows Forms、WinUIなどを使って、デスクトップアプリを開発できます。
ゲーム開発では、UnityでC#コードが広く使われています。キャラクターを動かす、敵を出現させる、スコアを加算するなどの処理をC#で書きます。
また、C#は業務システムやクラウドサービスでもよく使われます。Microsoft Azureとの相性もよく、企業向けの開発でも採用されやすい言語です。
1-2. C#コードの基本的な特徴
C#コードの特徴は、読みやすく、型に厳しく、オブジェクト指向に対応していることです。
たとえば、数値を入れる変数にはint、文字列を入れる変数にはstringのように、データの種類を指定します。
C#int age = 20;
string name = "Taro";
このように型を明確にすることで、間違ったデータの扱いをコンパイル時に見つけやすくなります。
また、C#ではクラスやメソッドを使ってコードを整理できます。大きなプログラムでも、役割ごとに分けて書きやすいのが特徴です。
1-3. C#と.NETの関係
C#はプログラミング言語で、.NETはC#コードを動かすための実行基盤やライブラリ群です。
イメージとしては、C#が「文章を書くための言語」、.NETが「その文章を実際に動かすための環境」です。C#コードを書いただけではアプリは動きません。通常は.NET SDKを使ってビルドし、実行します。
たとえば、次のコマンドでC#のコンソールアプリを作成できます。
Bashdotnet new console
dotnet newは.NETのプロジェクトやファイルをテンプレートから作成するコマンドです。
現在のC#学習では、古い.NET Frameworkではなく、基本的には新しい.NETを使って学ぶのがおすすめです。C# 14は.NET 10でサポートされている安定版のC#として案内されています。
1-4. JavaやC言語との違い
C#はJavaに似た文法を持っています。どちらもクラスを中心にプログラムを組み立てるオブジェクト指向言語です。
一方、C言語はより低レベルな処理に向いています。メモリ管理やポインタなど、初心者には難しい概念も多く登場します。
C#は、C言語のような記述スタイルを一部受け継ぎながらも、.NETの豊富な機能を使えるため、アプリ開発を比較的始めやすい言語です。
たとえば、文字を表示するだけならC#では次のように書けます。
C#Console.WriteLine("Hello");
C言語では、ヘッダーファイルの読み込みやmain関数などを明示的に書く必要があります。C#でも正式な構造はありますが、最近のテンプレートでは初心者向けに短い書き方が使えるようになっています。
1-5. 初心者がC#コードでつまずきやすいポイント
初心者がC#コードでつまずきやすいポイントは、主に次のような部分です。
セミコロン;を書き忘れる、波括弧{}の対応がずれる、文字列を"で囲み忘れる、型が合わない、変数名を間違える、nullの扱いでエラーになる、といったミスは非常によくあります。
また、C#では「コード単体」ではなく「プロジェクト」として動かすことが多いため、Program.cs、.csproj、dotnet runなどの関係が最初はわかりにくいかもしれません。
しかし、これらはすべて練習で慣れます。大切なのは、エラーを怖がらず、短いC#コードを何度も書いて実行することです。
2. C#コードを書く前に必要な開発環境
C#コードを書くには、コードを書くためのエディタやIDE、そしてC#コードをビルド・実行するための.NET SDKが必要です。
初心者の場合は、まずVisual StudioまたはVisual Studio Codeを使うのが一般的です。
2-1. Visual StudioとVisual Studio Codeの違い
Visual Studioは、C#開発に必要な機能がまとまった統合開発環境です。プロジェクト作成、コード補完、デバッグ、ビルド、画面設計などを1つのアプリで行えます。WindowsでC#を本格的に学ぶなら、Visual Studioは非常に使いやすい選択肢です。
Visual Studio Codeは、軽量なコードエディタです。拡張機能を追加することでC#開発にも使えます。動作が軽く、macOSやLinuxでも使いやすいのが特徴です。
初心者で「環境構築に迷いたくない」場合はVisual Studio、「軽いエディタでコマンド操作にも慣れたい」場合はVisual Studio Codeが向いています。
2-2. 初心者におすすめの開発環境
C#コードを初めて書く人には、Visual Studioがおすすめです。プロジェクト作成から実行まで画面操作で進めやすく、エラー箇所も見つけやすいからです。
特にWindows環境で学ぶ場合は、Visual Studioの「コンソールアプリ」テンプレートを使うと、すぐにC#コードを書いて実行できます。Microsoftのチュートリアルでも、Visual StudioでC#コンソールアプリを作成・実行・デバッグする手順が案内されています。
一方、将来的にWeb開発やクラウド開発、Git操作、ターミナル操作に慣れたい場合は、Visual Studio Codeも役立ちます。
2-3. .NET SDKのインストール方法
C#コードを実行するには、.NET SDKをインストールします。SDKとはSoftware Development Kitの略で、開発に必要なツール一式のことです。
.NET SDKをインストールすると、ターミナルやコマンドプロンプトでdotnetコマンドが使えるようになります。
インストール後、次のコマンドで確認できます。
Bashdotnet --version
バージョン番号が表示されれば、.NET SDKが使える状態です。表示されない場合は、インストールが完了していないか、パスが通っていない可能性があります。
2-4. C#プロジェクトの作成手順
ターミナルでC#プロジェクトを作成する場合は、次の手順で進めます。
Bashmkdir MyCSharpApp
cd MyCSharpApp
dotnet new console
これで、コンソールアプリ用のC#プロジェクトが作成されます。フォルダの中には、主に次のようなファイルができます。
MyCSharpApp.csproj
Program.cs
.csprojファイルはプロジェクトの設定ファイルです。どの.NETを使うか、どんなライブラリを参照するかなどの情報が入ります。
Program.csは、最初に実行されるC#コードを書くファイルです。
2-5. Program.csの役割
Program.csは、C#アプリの開始地点になるファイルです。コンソールアプリでは、最初から次のようなコードが書かれていることがあります。
C#Console.WriteLine("Hello, World!");
最近のC#では、トップレベルステートメントという書き方により、Mainメソッドやclass Programを書かなくても短いコードで実行できます。トップレベルステートメントは、明示的なMainメソッドなしでプログラムを書ける仕組みです。
ただし、学習が進むと次のような昔ながらの書き方も理解する必要があります。
C#using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello, World!");
}
}
どちらもC#コードとして正しい書き方です。初心者はまず短い書き方で慣れ、その後で正式な構造を理解するとよいでしょう。
3. はじめてのC#コード:Hello Worldを書いて実行する
C#コードの最初の練習として、画面に文字を表示する「Hello World」を書いてみましょう。
3-1. 最小構成のC#コード例
最小構成のC#コードは次のとおりです。
C#Console.WriteLine("Hello, World!");
このコードをProgram.csに書き、次のコマンドを実行します。
Bashdotnet run
実行結果は次のようになります。
Hello, World!
たった1行ですが、これも立派なC#コードです。まずはこの形を覚えましょう。
3-2. Console.WriteLineの意味
Console.WriteLineは、コンソール画面に文字や数値を表示するための命令です。
C#Console.WriteLine("こんにちは");
Console.WriteLine(123);
実行すると、次のように表示されます。
こんにちは
123
WriteLineのLineは「行」を意味します。つまり、表示したあとに改行されます。
改行したくない場合は、Console.Writeを使います。
C#Console.Write("Hello");
Console.Write("C#");
実行結果は次のようになります。
HelloC#
3-3. using Systemとは何か
古い形式のC#コードでは、先頭に次のような行を書くことがあります。
C#using System;
これは、Systemという名前空間にある機能を使うための宣言です。ConsoleもSystem名前空間に含まれています。
using System;を書くと、次のように短く書けます。
C#using System;
Console.WriteLine("Hello");
書かない場合は、次のように完全な名前で書くこともできます。
C#System.Console.WriteLine("Hello");
最近のプロジェクトテンプレートでは、暗黙的なusingやグローバルusingにより、using System;を書かなくてもConsole.WriteLineが使える場合があります。
3-4. Mainメソッドとは何か
Mainメソッドは、C#プログラムの実行開始地点です。
従来のC#コードでは、次のように書きます。
C#using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello, World!");
}
}
このコードでは、Mainメソッドの中に書いた処理が上から順番に実行されます。
C#static void Main()
{
Console.WriteLine("1行目");
Console.WriteLine("2行目");
Console.WriteLine("3行目");
}
実行結果は次のようになります。
1行目
2行目
3行目
トップレベルステートメントを使う場合、Mainメソッドを明示的に書かなくても、内部的にはプログラムの開始地点として扱われます。
3-5. C#コードを実行する方法
C#コードを実行する基本的な方法は、プロジェクトフォルダで次のコマンドを実行することです。
Bashdotnet run
dotnet runは、C#コードをビルドしてから実行します。
Visual Studioを使う場合は、画面上部の実行ボタン、またはF5キーでデバッグ実行できます。デバッグなしで実行する場合はCtrl + F5を使うこともあります。
VS Codeを使う場合は、ターミナルでdotnet runを実行する方法がわかりやすいです。
3-6. 実行結果が表示されないときの確認ポイント
実行結果が表示されない場合は、まず次の点を確認しましょう。
Program.csにコードを書いているか、保存してから実行しているか、プロジェクトフォルダでdotnet runしているか、エラーが出ていないかを確認します。
また、Visual Studioでコンソール画面がすぐ閉じる場合は、デバッグなしで実行するか、最後に入力待ちを追加すると確認しやすくなります。
C#Console.WriteLine("Hello");
Console.ReadLine();
Console.ReadLine()は、ユーザーがEnterキーを押すまで待つ命令です。
4. C#コードの基本文法
C#コードを書くうえで、まず覚えるべき基本文法は、コメント、変数、データ型、演算子、文字列、入力処理です。
4-1. コメントの書き方
コメントは、プログラムとして実行されないメモです。コードの説明を書きたいときに使います。
1行コメントは//で書きます。
C#// 画面にメッセージを表示する
Console.WriteLine("Hello");
複数行コメントは/* */で書きます。
C#/*
ここは複数行コメントです。
プログラムとしては実行されません。
*/
Console.WriteLine("C#");
コメントは便利ですが、書きすぎると逆に読みにくくなります。コードを見ればわかる内容ではなく、「なぜこの処理が必要なのか」を書くとよいです。
4-2. 変数とデータ型
変数は、データを入れておく箱のようなものです。
C#int age = 25;
string name = "Yamada";
intは整数、stringは文字列を表します。
よく使うデータ型には、次のようなものがあります。
C#int count = 10; // 整数
double price = 123.45; // 小数
string name = "Taro"; // 文字列
bool isActive = true; // 真偽値
char grade = 'A'; // 1文字
C#では、変数に入れるデータの型が重要です。たとえば、int型の変数に文字列を入れることはできません。
C#int age = "20"; // エラー
この場合、"20"は文字列なので、整数として扱うには変換が必要です。
4-3. 文字列・数値・真偽値の扱い
文字列は"で囲みます。
C#string message = "こんにちは";
数値はそのまま書きます。
C#int score = 80;
double rate = 1.5;
真偽値はtrueまたはfalseです。
C#bool isPassed = true;
bool isDeleted = false;
条件分岐では、真偽値をよく使います。
C#bool isAdult = true;
if (isAdult)
{
Console.WriteLine("成人です");
}
4-4. 演算子の使い方
C#では、計算や比較に演算子を使います。
C#int a = 10;
int b = 3;
Console.WriteLine(a + b); // 足し算
Console.WriteLine(a - b); // 引き算
Console.WriteLine(a * b); // 掛け算
Console.WriteLine(a / b); // 割り算
Console.WriteLine(a % b); // 余り
比較演算子もよく使います。
C#int score = 80;
Console.WriteLine(score >= 60); // True
Console.WriteLine(score == 100); // False
Console.WriteLine(score != 0); // True
=は代入、==は等しいかどうかの比較です。初心者は間違えやすいので注意しましょう。
4-5. 文字列連結と文字列補間
文字列をつなげるには+を使います。
C#string name = "Taro";
Console.WriteLine("こんにちは、" + name + "さん");
ただし、複数の値を埋め込む場合は文字列補間のほうが読みやすいです。
C#string name = "Taro";
int age = 20;
Console.WriteLine($"名前は{name}、年齢は{age}歳です");
$"..."の中に{変数名}を書くと、変数の値を文字列に埋め込めます。C#コードを読みやすくするために、文字列補間は積極的に使うとよいでしょう。
4-6. 入力を受け取るConsole.ReadLine
Console.ReadLine()を使うと、ユーザーの入力を受け取れます。
C#Console.WriteLine("名前を入力してください");
string? name = Console.ReadLine();
Console.WriteLine($"こんにちは、{name}さん");
Console.ReadLine()の戻り値は、入力がない場合にnullになる可能性があります。そのため、最近のC#ではstring?と書くことがあります。
数値として使いたい場合は、文字列から数値に変換します。
C#Console.WriteLine("年齢を入力してください");
string? input = Console.ReadLine();
int age = int.Parse(input!);
Console.WriteLine($"あなたは{age}歳です");
ただし、数字以外を入力するとエラーになります。安全に変換するにはint.TryParseを使います。
C#Console.WriteLine("年齢を入力してください");
string? input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"あなたは{age}歳です");
}
else
{
Console.WriteLine("数字を入力してください");
}
5. 条件分岐と繰り返し処理のC#コード
条件分岐と繰り返し処理を使うと、C#コードでより実用的な処理を書けるようになります。
5-1. if文の書き方
if文は、条件が正しいときだけ処理を実行します。
C#int score = 80;
if (score >= 60)
{
Console.WriteLine("合格です");
}
score >= 60がtrueなら、波括弧の中の処理が実行されます。
5-2. else・else ifの使い方
条件に当てはまらない場合の処理を書くにはelseを使います。
C#int score = 40;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
複数の条件を分けたい場合はelse ifを使います。
C#int score = 85;
if (score >= 90)
{
Console.WriteLine("評価A");
}
else if (score >= 70)
{
Console.WriteLine("評価B");
}
else if (score >= 60)
{
Console.WriteLine("評価C");
}
else
{
Console.WriteLine("不合格");
}
上から順番に条件が判定され、最初に一致した処理だけが実行されます。
5-3. switch文の基本
switch文は、値によって処理を分けるときに便利です。
C#int day = 3;
switch (day)
{
case 1:
Console.WriteLine("月曜日");
break;
case 2:
Console.WriteLine("火曜日");
break;
case 3:
Console.WriteLine("水曜日");
break;
default:
Console.WriteLine("不明な曜日");
break;
}
caseに一致した処理が実行されます。defaultは、どのcaseにも一致しない場合の処理です。
5-4. for文の書き方
for文は、決まった回数だけ処理を繰り返すときに使います。
C#for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
実行結果は次のようになります。
0
1
2
3
4
i++は、iを1増やすという意味です。
5-5. while文の書き方
while文は、条件が成り立っている間、処理を繰り返します。
C#int count = 0;
while (count < 5)
{
Console.WriteLine(count);
count++;
}
while文では、条件がずっとtrueのままだと無限ループになります。ループの中で条件が変わるように注意しましょう。
5-6. foreach文の使い方
foreach文は、配列やListの中身を順番に取り出すときに使います。
C#string[] names = { "Taro", "Hanako", "Jiro" };
foreach (string name in names)
{
Console.WriteLine(name);
}
配列やListのすべての要素を処理したい場合は、for文よりforeach文のほうが読みやすくなることが多いです。
5-7. breakとcontinueの違い
breakは、繰り返し処理を途中で終了します。
C#for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}
Console.WriteLine(i);
}
このコードは、iが5になった時点でループを終了します。
continueは、現在の回だけスキップして次の繰り返しに進みます。
C#for (int i = 0; i < 5; i++)
{
if (i == 2)
{
continue;
}
Console.WriteLine(i);
}
このコードでは、2だけ表示されません。
6. 配列・List・メソッドを使ったC#コード
データをまとめて扱うには、配列やListを使います。処理を整理するには、メソッドを使います。
6-1. 配列の宣言と使い方
配列は、同じ型のデータを複数まとめて扱うための仕組みです。
C#int[] scores = { 80, 90, 70 };
Console.WriteLine(scores[0]);
Console.WriteLine(scores[1]);
Console.WriteLine(scores[2]);
配列の番号は0から始まります。scores[0]は最初の要素です。
配列の長さはLengthで取得できます。
C#Console.WriteLine(scores.Length);
繰り返し処理と組み合わせると、すべての要素を表示できます。
C#for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine(scores[i]);
}
6-2. Listの基本的な使い方
Listは、後から要素を追加・削除しやすいコレクションです。
C#List<string> names = new List<string>();
names.Add("Taro");
names.Add("Hanako");
names.Add("Jiro");
foreach (string name in names)
{
Console.WriteLine(name);
}
Listを使うには、通常は次のusingが必要です。
C#using System.Collections.Generic;
最近のプロジェクトでは暗黙的なusingにより、省略できる場合もあります。
6-3. 配列とListの違い
配列は、基本的に要素数が固定です。
C#int[] numbers = new int[3];
この配列には3つの整数を入れられますが、後から簡単に4つ目を追加することはできません。
一方、Listは後から要素を追加できます。
C#List<int> numbers = new List<int>();
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
numbers.Add(40);
最初から要素数が決まっているなら配列、後から増減するならListを使うと考えるとわかりやすいです。
6-4. メソッドを作る理由
メソッドは、処理をひとまとまりにしたものです。
同じ処理を何度も書くと、コードが長くなり、修正も大変になります。メソッドに分けることで、C#コードを読みやすく、再利用しやすくできます。
C#static void SayHello()
{
Console.WriteLine("こんにちは");
}
SayHello();
SayHello();
この例では、SayHelloメソッドを呼び出すたびに「こんにちは」と表示されます。
6-5. 引数と戻り値の考え方
引数は、メソッドに渡す値です。
C#static void SayHello(string name)
{
Console.WriteLine($"こんにちは、{name}さん");
}
SayHello("Taro");
SayHello("Hanako");
戻り値は、メソッドから返される値です。
C#static int Add(int a, int b)
{
return a + b;
}
int result = Add(3, 5);
Console.WriteLine(result);
このコードでは、Addメソッドが計算結果を返します。
6-6. コードを分けて読みやすくするコツ
C#コードを読みやすくするには、1つのメソッドに多くの処理を詰め込みすぎないことが大切です。
たとえば、入力、計算、表示を別々のメソッドに分けると、処理の流れがわかりやすくなります。
C#static int Add(int a, int b)
{
return a + b;
}
static void ShowResult(int result)
{
Console.WriteLine($"結果は{result}です");
}
int answer = Add(10, 20);
ShowResult(answer);
最初は短いコードでも、役割ごとに分ける意識を持つと、後から大きなアプリを作るときに役立ちます。
7. クラスとオブジェクト指向の基本
C#コードを学ぶうえで、クラスとオブジェクト指向は避けて通れません。最初は難しく感じますが、「データと処理をひとまとめにする仕組み」と考えると理解しやすくなります。
7-1. クラスとは何か
クラスは、データと処理の設計図です。
たとえば、人を表すPersonクラスを作ると、名前や年齢などのデータをまとめられます。
C#class Person
{
public string Name { get; set; } = "";
public int Age { get; set; }
}
このクラスは、「人には名前と年齢がある」という設計図です。
7-2. インスタンスとは何か
インスタンスは、クラスという設計図から作られた実体です。
C#Person person = new Person();
person.Name = "Taro";
person.Age = 20;
Console.WriteLine($"{person.Name}は{person.Age}歳です");
new Person()によって、Personクラスのインスタンスを作っています。
クラスが「たい焼きの型」だとすると、インスタンスは「実際に焼かれたたい焼き」です。
7-3. フィールドとプロパティの違い
フィールドは、クラスの中に直接持つ変数です。
C#class Person
{
public string name = "";
}
プロパティは、外部から値を読み書きするための仕組みです。
C#class Person
{
public string Name { get; set; } = "";
}
C#では、外部に公開するデータにはプロパティを使うことが一般的です。プロパティを使うと、後から値のチェックや読み取り専用などの制御を追加しやすくなります。
7-4. コンストラクタの使い方
コンストラクタは、インスタンスを作るときに呼ばれる特別なメソッドです。
C#class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
使うときは次のように書きます。
C#Person person = new Person("Taro", 20);
Console.WriteLine($"{person.Name}は{person.Age}歳です");
コンストラクタを使うと、インスタンス作成時に必要な値をまとめて設定できます。
7-5. 初心者向けのクラス作成例
簡単な商品クラスを作ってみましょう。
C#class Product
{
public string Name { get; set; }
public int Price { get; set; }
public Product(string name, int price)
{
Name = name;
Price = price;
}
public void ShowInfo()
{
Console.WriteLine($"{Name}の価格は{Price}円です");
}
}
Product apple = new Product("りんご", 150);
apple.ShowInfo();
このC#コードでは、商品名と価格を持つProductクラスを作り、ShowInfoメソッドで情報を表示しています。
7-6. オブジェクト指向でつまずきやすい考え方
初心者がつまずきやすいのは、「クラス」と「インスタンス」の違いです。
クラスは設計図、インスタンスは実体です。Personというクラス自体が人なのではなく、new Person()で作ったものが具体的な人を表します。
また、最初から完璧なオブジェクト指向設計を目指す必要はありません。まずは「関連するデータと処理を1つにまとめる」ことを意識すれば十分です。
8. C#コードの実行方法
C#コードは、Visual Studio、VS Code、ターミナルなどから実行できます。ここでは代表的な方法を紹介します。
8-1. Visual StudioでC#コードを実行する方法
Visual StudioでC#コードを実行する基本手順は次のとおりです。
Visual Studioを起動し、「新しいプロジェクトの作成」を選びます。次に「コンソールアプリ」を選択し、プロジェクト名と保存場所を指定します。
作成されたProgram.csにC#コードを書き、実行ボタンまたはF5キーで実行します。デバッグなしで実行したい場合は、Ctrl + F5を使います。
Visual Studioは、エラー箇所を赤線で表示してくれるため、初心者でも原因を見つけやすいです。
8-2. VS CodeでC#コードを実行する方法
VS CodeでC#コードを書く場合は、.NET SDKをインストールし、C#関連の拡張機能を入れておくと便利です。
基本的な流れは次のとおりです。
Bashmkdir SampleApp
cd SampleApp
dotnet new console
code .
VS Codeでフォルダを開いたら、Program.csを編集します。実行するときは、VS Codeのターミナルで次のコマンドを入力します。
Bashdotnet run
VS Codeは軽量ですが、最初はターミナル操作に慣れる必要があります。
8-3. dotnet runコマンドで実行する方法
dotnet runは、C#プロジェクトをビルドして実行するコマンドです。
Bashdotnet run
このコマンドは、.csprojファイルがあるプロジェクトフォルダで実行します。
もし別のフォルダで実行すると、プロジェクトが見つからずエラーになることがあります。その場合は、cdコマンドでプロジェクトフォルダへ移動してから実行しましょう。
8-4. ビルドと実行の違い
ビルドとは、C#コードをコンピューターが実行できる形に変換し、エラーがないか確認する作業です。
実行とは、ビルドされたプログラムを実際に動かすことです。
ビルドだけ行う場合は、次のコマンドを使います。
Bashdotnet build
ビルドして実行する場合は、次のコマンドです。
Bashdotnet run
C#コードに文法エラーがある場合、ビルドの段階でエラーになります。
8-5. 1つのcsファイルだけを実行できないときの対処法
従来のC#では、基本的に.csファイル単体ではなく、プロジェクトとして実行することが多くありました。そのため、test.csだけを作っても、環境によってはそのまま実行できないことがあります。
基本的には次のようにプロジェクトを作るのが安全です。
Bashdotnet new console
dotnet run
なお、.NET 10 SDK以降では、ファイルベースアプリとして単一のC#ファイルを実行・公開できる仕組みも案内されています。
ただし、初心者のうちはプロジェクト形式で学ぶほうが、C#の標準的な構成を理解しやすいです。
8-6. 実行ファイルを作成する方法
実行ファイルを作るには、dotnet publishを使います。
Bashdotnet publish -c Release
Releaseは公開用のビルド構成です。作成されたファイルは、bin/Release以下のフォルダに出力されます。
環境に合わせて、Windows用、Linux用、macOS用などに出力することもできます。ただし、配布方法はプロジェクトの種類や対象環境によって変わります。最初はdotnet runで動かす練習を優先しましょう。
9. C#コードでよくあるエラーと解決方法
C#コードを書いていると、必ずエラーに出会います。エラーは失敗ではなく、修正すべき場所を教えてくれるヒントです。
9-1. コンパイルエラーとは
コンパイルエラーは、C#コードをビルドするときに発生するエラーです。文法が間違っている、型が合わない、変数名が存在しないなどの場合に起こります。
C#Console.WriteLine("Hello")
このコードは、最後にセミコロン;がないためエラーになります。
正しくは次のように書きます。
C#Console.WriteLine("Hello");
9-2. 実行時エラーとは
実行時エラーは、ビルドには成功したものの、プログラムを動かしている途中で発生するエラーです。
たとえば、文字列を数値に変換しようとして失敗すると、実行時エラーになります。
C#string text = "abc";
int number = int.Parse(text);
"abc"は数値ではないため、変換できません。
安全に変換するには、int.TryParseを使います。
C#string text = "abc";
if (int.TryParse(text, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("数値に変換できません");
}
9-3. NullReferenceExceptionの原因と対処法
NullReferenceExceptionは、nullの変数に対してメソッドやプロパティを使おうとしたときに発生します。
C#string? name = null;
Console.WriteLine(name.Length);
nameがnullなので、Lengthを取得できません。
対処法として、nullかどうかを確認します。
C#string? name = null;
if (name != null)
{
Console.WriteLine(name.Length);
}
else
{
Console.WriteLine("nameはnullです");
}
また、null合体演算子??を使う方法もあります。
C#string? name = null;
string displayName = name ?? "未設定";
Console.WriteLine(displayName);
9-4. 型変換エラーの原因と対処法
型変換エラーは、異なる型の値を無理に代入したり変換したりすると発生します。
C#string text = "100";
int number = text; // エラー
文字列を整数にするには、変換処理が必要です。
C#string text = "100";
int number = int.Parse(text);
Console.WriteLine(number);
ただし、入力値が必ず数値とは限らない場合は、TryParseを使いましょう。
C#string text = "100";
if (int.TryParse(text, out int number))
{
Console.WriteLine(number);
}
else
{
Console.WriteLine("変換できません");
}
9-5. セミコロン忘れ・波括弧忘れの見つけ方
C#コードでは、多くの文の最後にセミコロン;が必要です。
C#int age = 20;
Console.WriteLine(age);
セミコロンを忘れると、次の行でエラーが出ることもあります。エラーが表示された行だけでなく、その直前の行も確認しましょう。
波括弧{}の対応も重要です。
C#if (true)
{
Console.WriteLine("OK");
}
開始の{と終了の}が対応していないと、広い範囲でエラーが出ることがあります。Visual StudioやVS Codeの自動整形機能を使うと、波括弧のずれを見つけやすくなります。
9-6. エラーメッセージの読み方
エラーメッセージは難しく見えますが、次の情報を確認すると原因を探しやすくなります。
まず、どのファイルでエラーが起きているかを見ます。次に、何行目でエラーが起きているかを確認します。そして、エラー内容を読みます。
たとえば、「;が必要です」というエラーなら、セミコロン忘れの可能性があります。「現在のコンテキストに存在しません」というエラーなら、変数名やメソッド名の間違いが考えられます。
9-7. デバッグで原因を見つける方法
デバッグとは、C#コードを一行ずつ確認しながら、変数の中身や処理の流れを調べることです。
Visual Studioでは、行番号の左側をクリックしてブレークポイントを設定できます。その状態で実行すると、指定した行で処理が止まります。
止まった状態で変数の値を確認すると、「思っていた値と違う」「この条件に入っていない」などの原因を見つけやすくなります。
初心者は、エラーが出たらすぐにコードを大きく変更するのではなく、まずエラーメッセージと変数の値を確認する習慣をつけましょう。
10. 初心者向けC#コードの練習例
ここでは、初心者が練習しやすいC#コードを紹介します。実際にコピーして動かし、少しずつ書き換えてみましょう。
10-1. 四則演算をするコード
C#int a = 10;
int b = 3;
Console.WriteLine($"足し算: {a + b}");
Console.WriteLine($"引き算: {a - b}");
Console.WriteLine($"掛け算: {a * b}");
Console.WriteLine($"割り算: {a / b}");
Console.WriteLine($"余り: {a % b}");
整数同士の割り算では、小数部分は切り捨てられます。小数で計算したい場合はdoubleを使います。
C#double a = 10;
double b = 3;
Console.WriteLine(a / b);
10-2. 入力した名前を表示するコード
C#Console.WriteLine("名前を入力してください");
string? name = Console.ReadLine();
Console.WriteLine($"こんにちは、{name}さん");
Console.ReadLine()で入力を受け取り、文字列補間で表示しています。
10-3. 偶数・奇数を判定するコード
C#Console.WriteLine("整数を入力してください");
string? input = Console.ReadLine();
if (int.TryParse(input, out int number))
{
if (number % 2 == 0)
{
Console.WriteLine("偶数です");
}
else
{
Console.WriteLine("奇数です");
}
}
else
{
Console.WriteLine("整数を入力してください");
}
%は余りを求める演算子です。2で割った余りが0なら偶数です。
10-4. 配列の合計値を求めるコード
C#int[] numbers = { 10, 20, 30, 40, 50 };
int total = 0;
foreach (int number in numbers)
{
total += number;
}
Console.WriteLine($"合計は{total}です");
total += numberは、total = total + numberと同じ意味です。
10-5. Listにデータを追加・表示するコード
C#List<string> fruits = new List<string>();
fruits.Add("りんご");
fruits.Add("みかん");
fruits.Add("バナナ");
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
Listは後から要素を追加できるため、データ数が変わる場合に便利です。
10-6. クラスを使った簡単なコード例
C#class Student
{
public string Name { get; set; }
public int Score { get; set; }
public Student(string name, int score)
{
Name = name;
Score = score;
}
public void ShowResult()
{
Console.WriteLine($"{Name}さんの点数は{Score}点です");
}
}
Student student = new Student("Taro", 85);
student.ShowResult();
クラスを使うと、名前と点数のような関連するデータをまとめて扱えます。
11. 読みやすいC#コードを書くコツ
C#コードは、動けばよいというものではありません。後から読み返したときに理解しやすく、修正しやすいことも重要です。
11-1. 変数名・メソッド名の付け方
変数名やメソッド名は、意味がわかる名前にしましょう。
悪い例です。
C#int x = 20;
string s = "Taro";
短すぎて、何を表しているのかわかりにくいです。
良い例です。
C#int age = 20;
string userName = "Taro";
メソッド名も、処理の内容がわかる名前にします。
C#static int CalculateTotal(int price, int quantity)
{
return price * quantity;
}
11-2. インデントをそろえる
インデントがそろっていると、C#コードの構造が見やすくなります。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
インデントが崩れていると、どの処理がどのブロックに含まれているのかわかりにくくなります。エディタの自動整形機能を使うと便利です。
11-3. コメントを書きすぎない
コメントは大切ですが、書きすぎると読みにくくなります。
C#// ageに20を代入する
int age = 20;
このコメントは、コードを見ればわかるため不要です。
一方で、処理の意図を説明するコメントは役立ちます。
C#// 未入力の場合はゲストユーザーとして扱う
string displayName = name ?? "ゲスト";
コメントは「何をしているか」よりも「なぜそうしているか」を書くと効果的です。
11-4. 1つのメソッドを長くしすぎない
1つのメソッドに多くの処理を書きすぎると、読みづらくなります。
入力、計算、表示など、役割ごとにメソッドを分けましょう。
C#static int CalculateTaxIncludedPrice(int price)
{
return (int)(price * 1.1);
}
static void ShowPrice(int price)
{
Console.WriteLine($"税込価格は{price}円です");
}
小さなメソッドに分けることで、テストや修正もしやすくなります。
11-5. 命名規則を守る
C#では、一般的にクラス名やメソッド名はパスカルケースで書きます。
C#class ProductService
{
public void ShowProduct()
{
}
}
変数名や引数名はキャメルケースで書くことが多いです。
C#int totalPrice = 1000;
string userName = "Taro";
命名規則をそろえると、C#コード全体の統一感が出て読みやすくなります。
11-6. 初心者が避けたい書き方
初心者が避けたいのは、意味のない変数名、長すぎるメソッド、深すぎるネスト、コピペだらけのコードです。
たとえば、if文の中にさらにif文が何重にも入ると、処理を追いにくくなります。
C#if (isLogin)
{
if (isAdmin)
{
if (isActive)
{
Console.WriteLine("管理者です");
}
}
}
条件を整理したり、早めに処理を抜けたりすると読みやすくなります。
C#if (!isLogin)
{
return;
}
if (!isAdmin)
{
return;
}
if (!isActive)
{
return;
}
Console.WriteLine("管理者です");
最初から完璧なコードを書く必要はありませんが、「未来の自分が読みやすいか」を意識しましょう。
12. C#コードを効率よく学ぶ手順
C#コードを効率よく学ぶには、基本文法を覚えたあと、実際に手を動かして小さなプログラムを作ることが大切です。
12-1. まず覚えるべき基本文法
最初に覚えるべきなのは、変数、データ型、条件分岐、繰り返し、配列、List、メソッドです。
これらを使えるようになると、簡単なコンソールアプリを作れるようになります。
たとえば、入力された点数を判定するプログラム、買い物リストを表示するプログラム、数値の合計を求めるプログラムなどを作れます。
12-2. 実際にコードを書いて動かす
C#コードは、読むだけではなかなか身につきません。短くてもよいので、必ず自分で書いて実行しましょう。
最初は写経でも構いません。ただし、コピーして終わりではなく、変数名を変える、表示する文字を変える、条件を変えるなど、少しずつ改造してみることが大切です。
12-3. エラーを読みながら修正する
プログラミング学習では、エラーを避けるよりも、エラーを読んで直す力が重要です。
エラーが出たら、まずエラーメッセージを読みます。次に、ファイル名と行番号を確認します。そのうえで、セミコロン忘れ、型の不一致、変数名の間違い、波括弧の不足などをチェックしましょう。
エラーを1つ直すたびに、C#コードへの理解は深まります。
12-4. 小さなアプリを作ってみる
基本文法に慣れたら、小さなアプリを作ってみましょう。
おすすめは、電卓、ToDoリスト、成績判定アプリ、じゃんけんゲーム、簡単な家計簿などです。
最初はコンソールアプリで十分です。画面の見た目よりも、入力、処理、出力の流れを理解することを優先しましょう。
12-5. 次に学ぶべき内容
基本文法の次は、クラス、例外処理、ファイル入出力、LINQ、非同期処理、データベース接続などを学ぶとよいです。
Webアプリを作りたい場合は、ASP.NET Coreを学びます。ゲームを作りたい場合は、UnityのC#コードに進むとよいでしょう。Windowsアプリを作りたい場合は、WPFやWinUIなどを学ぶ選択肢があります。
12-6. C#学習で挫折しないコツ
C#学習で挫折しないためには、最初から大きなアプリを作ろうとしないことです。
まずは、10行から30行程度の短いC#コードをたくさん書きましょう。エラーが出ても、すぐに諦めず、原因を1つずつ確認します。
また、わからない用語が出てきたら、すべてを一度に理解しようとせず、「今はそういうものがある」と受け止めて先に進むことも大切です。
13. C#コードに関するよくある質問
ここでは、C#コードを学び始めた人が疑問に思いやすい内容に答えます。
13-1. C#コードはスマホでも書ける?
スマホでもC#コードを書くこと自体は可能です。オンラインエディタや一部のアプリを使えば、簡単なコードを試せる場合があります。
ただし、本格的に学ぶならパソコンを使うのがおすすめです。Visual Studio、VS Code、.NET SDKを使った開発環境のほうが、プロジェクト作成、デバッグ、ファイル管理をしやすいからです。
13-2. C#は初心者に難しい?
C#は初心者にとって簡単すぎる言語ではありません。型、クラス、メソッド、プロジェクト構成など、覚えることは多いです。
しかし、文法は比較的整理されており、Visual Studioなどの開発環境も充実しています。そのため、順番に学べば初心者でも十分に習得できます。
最初はコンソールアプリから始めると、C#コードの基本に集中しやすいです。
13-3. C#コードを無料で実行できる?
C#コードは無料で実行できます。.NET SDKやVisual Studio Codeは無料で利用できます。Visual Studioにも個人開発者や学習者が利用しやすい無料エディションがあります。
まずは.NET SDKをインストールし、dotnet new consoleとdotnet runでコンソールアプリを動かしてみましょう。
13-4. C#とUnityのコードは同じ?
Unityで使うC#も、基本的にはC#です。変数、if文、for文、クラス、メソッドなどの基本文法は共通しています。
ただし、UnityではMonoBehaviour、Start、Update、GameObjectなど、Unity独自のクラスや仕組みを使います。
そのため、まずC#コードの基本文法を学んでからUnityに進むと、スクリプトの理解がしやすくなります。
13-5. C#コードをコピペしても動かない理由は?
C#コードをコピペしても動かない理由はいくつかあります。
.NETのバージョンが違う、必要なusingが足りない、クラスの外に書くべきでないコードを書いている、プロジェクトの種類が違う、ファイル名や名前空間が合っていない、コードの一部だけをコピーしている、といった原因が考えられます。
また、Web上の古いC#コードは、現在のプロジェクトテンプレートと書き方が違う場合があります。エラーが出たら、エラーメッセージを確認し、どの行で何が問題になっているかを見ましょう。
13-6. どのバージョンのC#を学べばよい?
初心者は、基本的に現在の.NET SDKで標準的に使えるC#を学べば問題ありません。C#の言語バージョンは、ターゲットにする.NETのバージョンと関係しており、対象のTFMに関連付けられたバージョンより新しいC#言語バージョンの使用はサポートされません。
最初から最新機能をすべて覚える必要はありません。変数、条件分岐、繰り返し、配列、List、メソッド、クラスといった基礎は、バージョンが変わっても重要です。
まとめ
C#コードは、Webアプリ、Windowsアプリ、ゲーム開発、業務システムなど幅広い分野で使われる実用的なプログラミング言語です。
初心者はまず、Console.WriteLineで文字を表示するところから始め、変数、データ型、条件分岐、繰り返し、配列、List、メソッド、クラスへと順番に学ぶのがおすすめです。
C#コードを書くには、Visual StudioやVisual Studio Code、.NET SDKを使います。最初はプロジェクトを作成し、Program.csにコードを書き、dotnet runで実行する流れに慣れましょう。
学習中は、セミコロン忘れ、型の不一致、nullの扱い、波括弧のずれなどでエラーが出ることがあります。しかし、エラーメッセージを読み、原因を1つずつ直すことが上達への近道です。
C#コードは、短いコードを何度も書いて動かすことで少しずつ理解できます。最初から完璧を目指すのではなく、小さな成功体験を積み重ねながら、読みやすく実用的なC#コードを書けるようになっていきましょう。

