C#入門者におすすめの勉強方法は?
C#入門者が知っておくべき開発環境は?
C#(シーシャープ)は人気の高いプログラミング言語なので、このように考えている方も多いですよね。
しかしC#の習得難易度は高めなので、入門するために重要なポイントをしっかり押さえておく必要があります。
そこで今回は、C#を入門したい方向けに必要な知識について一通り解説します。プログラミング初心者にも分かりやすい内容となっていますので、ぜひご一読ください。
そもそもC#についてあまり良く知らないという方は、まず以下の記事でC#がどのようなものか知るところから始めましょう。
C#入門者におすすめの開発環境
C#入門者には、特によく使われている以下2つの開発環境をおすすめします。
- Visual Studio
- Unity
ひとつずつ順番に解説していきます。なお、上記2つ以外のC#開発環境についても知りたい方は、以下の記事も読むと良いでしょう。
C#開発元が作った「Visual Studio」
「Visual Studio」は、C#の開発元であるMicrosoft社が提供している開発環境。信頼性の高い開発環境で、特にこだわりがなければVisual Studioを導入すれば問題ありません。
主にWindows向けパソコンアプリ開発に使われますが、スマホアプリ開発やMac向けパソコンアプリ開発にも利用できる汎用性があります。
プログラムの作成から動作確認まで開発に必要な機能が一通りそろっているので、効率的な開発が可能です。
Visual Studioについてもっと詳しく知りたい方は、以下の記事もご覧くださいね。
ゲーム開発と言えば「Unity」
「Unity」は、最もポピュラーなゲームエンジン(ゲームに特化した開発環境)。ゲーム機でプレイするコンシューマーゲームだけでなく、スマホゲームやVRゲームなど幅広く開発できます。
Unityでは基本的にC#を使うことになりますが、簡単なゲームであればほぼプログラミングなしで開発できます。ゲームの複雑な処理を少ない労力で実現できるため、ゲーム開発に興味がある方は必ず覚えておきたい開発環境です。
Unityを入門してみたい方には、以下の記事をおすすめします。
C#を入門するための3ステップ
C#入門者には、以下の3ステップがおすすめです。
- ステップ1:C#の環境を構築する
- ステップ2:C#の基本構造を理解する
- ステップ3:C#のプログラムを実行する
各ステップについて、順番に解説していきます。
ステップ1:C#の環境を構築しよう
まずは、C#の環境構築を行う必要があります。
C#で書いたプログラムが動作するのは、基本的に「.NET Framework」という実行環境上です。先ほどご紹介したVisual Studioには.NET Frameworkが含まれているため、Visual Studioをインストールすれば問題ありません。
そのため今回は、無料版である「Visual Studio Community」を導入しましょう。
■Visual Studio Communityのインストール手順
①Visual Studio Communityの公式サイトにアクセスし、「Visual Studioのダウンロード」をクリックします。ダウンロードが始まるので、しばらく待ちましょう。
②ダウンロードが完了したら、画面下部に表示される「ファイルを開く」をクリックし、インストーラを実行します。
「このアプリがデバイスに変更を加えることを許可しますか?」と表示される場合は、「はい」を選択すればOKです。
③「続行」をクリックします。
④「ワークロードなしで続行しますか?」と表示されるので、「ワークロードの追加」をクリックします。
⑤この画面では、行いたい開発に応じて好きな環境を選択してインストールできます。
今回は「.NET デスクトップ開発」にチェックを入れましょう。(後から追加可能です)
⑥画面右下にある「インストール」をクリックするとインストールが開始されるので、しばらく待ちましょう。
インストールにかかる時間は、選択した内容やパソコンの性能によって前後します。
⑦Microsoftアカウントがない方は、「作成してください。」の部分をクリックします。
Microsoftアカウントをお持ちの方は、「サインイン」をクリックして⑬までスキップしてOKです。
⑧アカウントの作成画面で任意のメールアドレスを入力し、「次へ」をクリックします。
⑨パスワードの作成画面で任意のパスワードを入力し、「次へ」をクリックします。
⑩入力したメールアドレス宛にセキュリティコードが送信されるので、その内容を入力して「次へ」をクリックします。
⑪「次」をクリックして、簡単なクイズに回答しましょう。問題なければ、Microsoftアカウントの作成が完了します。
⑫Visual Studioのサインイン画面に戻り、「サインイン」をクリックします。
⑬先ほどと同じメールアドレスを入力し、「次へ」をクリックします。
⑭先ほどと同じパスワードを入力し、「サインイン」をクリックします。
⑮サインインに成功すると、開発環境の設定画面が表示されます。
開発設定と配色テーマを必要に応じて設定し、「Visual Studioの開始」をクリックしましょう。(設定は後から変更可能です)
その後、以下の画面が表示されればインストール完了です。
ステップ2:C#の基本構造を理解しよう
プログラムを動かす前に、C#プログラムの基本構造を理解しましょう。
以下のサンプルコードは、「Hello World!」と表示する簡単なC#プログラムです。
using System; namespace hello_world { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
サンプルコードの詳細については、1行目から順番に解説していきます。
名前空間の宣言・定義
「using System;」の箇所では、そのプログラムで使用する「名前空間」を宣言しています。名前空間とは、プログラムの部品に「苗字」のようなものを付けて、区別しやすくする概念のこと。
「System」は.NET Frameworkで使える標準ライブラリ(便利なプログラム部品)を全てまとめた名前空間です。
「using System;」と最初に書いておくことの意味は、もう少し後で分かります。
「namespace hello_world」は、新しい名前空間を定義している箇所です。「namespace 名前空間名{ ~ }」のように記述することで、{ }内に定義したプログラム部品が指定した名前空間に所属することを明示できます。
クラスの定義
「class Program」の箇所は、オブジェクト指向には欠かせない「クラス」を定義しています。クラスとは、プログラムの登場人物が持つ特徴をあらかじめ決めておく「設計図」のようなものです。
クラスの書き方については後半の章で詳しく解説しますが、C#のプログラミングではこのように定義したクラスを使っていくのが基本です。
クラスやオブジェクト指向についてあまりよく知らない方は、以下の記事で基本を押さえておきましょう。
メソッドの定義
「static void Main(string[] args)」は、Programクラスの「メソッド」を定義している箇所です。メソッドとは、プログラムで繰り返し実行したい処理をひとまとめにした便利な部品のことで、「関数」とも呼ばれます。
メソッドの中でも、このように「Main」という名前のものを特に「エントリポイント」と呼びます。C#では必ずこのMainメソッドが、プログラム起動時に呼ばれるのです。
「Console.WriteLine(“Hello World!”);」が、Mainメソッドの処理内容。標準ライブラリであるConsoleクラスのWriteLineメソッドを使うことで、指定した文字列を出力できます。
なお、ConsoleクラスはSystemという名前空間に所属する標準ライブラリです。
もし1行目で「using System;」と記述しなかった場合は、以下のようにSystemと名前空間を指定しなければなりません。
System.Console.WriteLine("Hello World!");
つまり最初に「using System;」と記述することで、System内の標準ライブラリを使用する際にわざわざ名前空間を指定する必要がなくなるのです。
ステップ3:C#のプログラムを実行してみよう
プログラムの基本構造を理解したら、C#のプログラムを実行してみましょう。Visual Studioでは、1つのプログラムを「プロジェクト」という単位で作成します。
■プロジェクト作成~プログラム実行手順
①ステップ1で導入したVisual Studio画面にある「新しいプロジェクトの作成」をクリックします。
②プロジェクトの種類を選択する画面が表示されます。今回はC#の「コンソール アプリケーション」を選択し、「次へ」をクリックしましょう。
③プロジェクト情報の設定画面が表示されるので、プロジェクト名とプロジェクト一式を作成する場所(パス)を指定しましょう。入力が完了したら、「次へ」をクリックします。
今回はプロジェクト名を「hello_world」、場所には以下のパスを指定しましたが、アクセス制限のないフォルダであれば場所はどこでもOKです。
なお、プロジェクト名を設定するとソリューション名にも同じものが自動的に入ります。ソリューションは、複数のプロジェクトを1つにまとめる入れ物のようなものです。
今回のように作成するプロジェクトが1つだけであれば、プロジェクト名とソリューション名は同じでも構いません。また、「ソリューションとプロジェクトを同じディレクトリに配置する」にチェックを入れてもOKです。
1つのアプリに複数の機能が存在する場合は、チェックを入れないことをおすすめします。その場合は、プロジェクト名には各機能の名称、ソリューション名には全機能を束ねるアプリ名をそれぞれ設定しましょう。
④「ターゲットフレームワーク」とは、作成するプロジェクトで使用する.Net Frameworkのバージョンです。
基本的にデフォルトのままで問題ないので、そのまま「作成」をクリックします。
しばらくして以下のような画面が表示されれば、プロジェクトの作成は成功です。
⑤実は前章の「Hello World!」と表示するプログラムは、プロジェクト作成時にデフォルトで作成されています。
今回は「デバッグ」メニュー内の「デバッグなしで開始」をクリックして、そのまま実行してみましょう。
⑥以下のとおり、「Hello World!」と表示されれば成功です。
C#を独学で学べる勉強方法
C#を独学で勉強する場合は、以下2つの方法がおすすめです。
- 入門サイトで勉強する
- 入門書籍で勉強する
ひとつずつ、順番に解説していきます。
入門サイトで勉強する
パソコンを使って勉強できる入門サイトを使うと、すぐに実践しやすいメリットがあります。大きく分けると「動画ベース」「テキストベース」の2種類あるので、自分に合ったものを使うと良いでしょう。
以下の記事では、おすすめプログラミング学習サイトを20点紹介しています。C#を学べる「SoloLearn」なども紹介しているので、ぜひご覧ください。
入門書籍で勉強する
C#を入門できる本も、さまざまなものが出版されています。
入門書籍だと必要な基礎知識が1冊に集約されているため、色々な教材を並行して使う必要がなく復習もしやすいのがメリットです。
以下の記事では、C#を基礎から学べるおすすめ入門書籍を6冊紹介しています。ご自身に合った書籍を選んでみましょう。
C#入門者が知っておくべき6つの基本文法
この章では、C#入門者に欠かせない以下6つの基本文法をご紹介します。
- 変数の宣言
- コメント
- 演算
- 条件分岐
- 処理のループ
- クラスやメソッドの定義
サンプルコードも交えながら、ひとつずつ解説していきます。
変数を宣言する構文
プログラミングでは、データを取り扱うための入れ物を「変数」として宣言する必要があります。C#の変数宣言は「データ型 変数名;」のように記述するのが基本。
string test1; int test2;
また、「データ型 変数名 = 値;」のように記述すれば、変数の宣言時に値も代入できます。
string test1 = "文字列"; int test2 = 11;
データ型と変数名については、それぞれ順番に解説します。
データ型の種類
データ型を指定することで、変数にどんな値が入るのかを決定します。
以下によく使うデータ型を表にまとめました。まずはこれだけ知っていれば大丈夫です。
文字列型 | string |
整数型 | int/long |
浮動小数点型 | double/decimal |
論理値型 | bool |
データ型について詳しく知りたい方には、以下の記事をおすすめします。
変数名のルール
変数名に使える文字は、以下の3種類が基本です。
- アルファベット(大文字・小文字どちらもOK)
- アンダースコア(_)
- 数字(変数名の先頭には使えないので注意)
実はひらがなや漢字も使えますが、プログラミングの慣例として使われることは少ないのでおすすめしません。
なお、以降の章でご紹介する「if」や「for」といった予約語(特別な意味を持つキーワード)は変数名には使えないので注意しましょう。
コメントを付ける構文
ソースコードにコメントを付けておくと、別の開発者が読んだときにプログラムの処理内容が理解しやすくなります。
コメントを付けた箇所は、プログラムとしての意味を持たなくなります。
C#でコメントを付ける構文は、「//」と「/* ~ */」の2種類。それぞれの書き方について解説します。
1行だけにコメントを付けたい場合
ソースコードの1行だけにコメントを付ける際のキーワードは「//」です。キーワードの直後に半角スペースを入れると見やすくなりますよ。
行の先頭に付けるとその行全体がコメント化され、行の途中に付けるとその箇所以降がコメント化されます。
以下の例では変数「test1」の宣言がコメント化されているので、変数宣言されるのは「test2」だけです。
// int test1; string test2 = “文字列”; // test2の変数宣言
複数行にコメントを付けたい場合
複数行にわたってコメントを付けたい場合は、「/*」と「*/」で囲いましょう。囲まれた箇所全体がコメント化されます。
/* この部分はコメントです! 改行して書けます。 */
コメントは、コードを誰がいつ読んでも分かりやすくしてくれる大切なものです。「自分しか読まないからいいや」と思わず、コメントを入れる癖をつけましょう。
演算を行う構文
演算を行う場合は、「演算子」を変数や値で両サイドから挟むのが基本です。
演算子とは「=」や「+」のように値や変数の関係を表したり、計算したりするときに使われる記号を指します。実は先ほどの変数宣言で使われていた「=」も演算子の1種で、変数に値や別の変数を代入する「代入演算子」と呼ばれるものです。
以下のサンプルコードでは、変数「test2」に加算演算子(+)で1をプラスした結果を、代入演算子(=)によってtest1に代入しています。
test1 = test2 + 1;
上記の例では先に記述されている「=」よりも、後に記述されている「+」の方が早い段階で処理されていることが分かります。
このように各演算子には処理の優先順位が決められており、C#で演算子を使いこなすためには優先順位も把握しなければなりません。
C#で使われる演算子で代表的なものを、いくつかご紹介します。
四則演算子 | +、-、*、/ | a+bやa*bのように使います。 |
論理演算子 | &、| | ifなどを使って条件分岐する際に使われる演算子です。a & b や a | b のように使います。 |
関係演算子 | ==、!=、>、< | 条件分岐などで条件の判断に使われる演算子です。a==bやa>bのように使います。 |
優先順位も含めたC#の演算子について更に詳しく知りたい方は、以下の記事も読むと良いでしょう。
条件分岐させる構文
たとえば「12歳以上だったら、大人料金。そうでなければ子供料金」のように、条件を満たすか満たさないかによって処理を切り替えるのが条件分岐です。
C#で条件分岐させる際には「if」というキーワードを使い、以下サンプルコードのように記述します。
if( 条件A ) { 条件Aを満たす場合の処理 } else if( 条件B ) { 条件Aは満たさないが、条件Bは満たす場合の処理 } else { 条件Aも条件Bも満たさない場合の処理 }
条件が3つ以上ある場合は、「else if(条件){ ~ }」の数を増やせばOKです。
なお、「else if」と「else」は必須ではないので、条件が少ない場合は省略できます。最初に挙げた例をプログラムにしてみましょう。
if( age >= 12 ) // 12歳以上かどうか { fee = 1000; // 大人料金 } else { fee = 500; // 子供料金 }
年齢(age)が12歳以上かどうかをifの箇所で判定し、YESなら大人料金(1000円)、NOなら子供料金(500円)を料金(fee)に代入しています。
条件分岐についてもっと理解を深めたい方には、以下の記事もおすすめです。
処理をループさせる構文
決まった処理を繰り返し実行したい時に便利な構文が、「for」と「while」です。それぞれ、詳しく解説します。
決まった回数繰り返すなら「for」
繰り返したい回数が決まっている場合は、指定した回数分ループする「for」を使うと良いでしょう。for文は、以下のように記述します。
for( 初期化処理 ; ループの継続条件 ; ループ間に行う処理 ) { ループ処理 }
イメージしづらいと思うので、具体例を挙げましょう。
以下のサンプルコードは、for文を使用して10から19までの整数を表示しています。for文の初期化処理では、以下のように変数の定義も可能です。
for( int i = 10 ; i < 20 ; i++ ) { Console.WriteLine(i); }
■実行結果
10 11 12 13 14 15 16 17 18 19
まず、初期化処理である「int i = 10」がループの開始前に1度だけ実行され、iの値が10となります。その後ループの継続条件である「i < 20」の判定を通過し、ループ処理の「Console.WriteLine(i);」によって10が表示されるのです。
ループ処理の直後に「i++」が実行されますが、これは「iに1プラスする」という意味なのでiの値は11となります。その後、再度「i < 20」の判定を通過して2度目のループ処理が実行され、この時表示される値は11です。
同じ要領でループ処理を10回繰り返すと、「i++」でiの値は20となります。そして、「i < 20」の条件を満たさなくなるので、11回目のループ処理は行われずにループ終了となるのです。
C#のfor文について更に詳しく知りたい方は、以下の記事も参考にしてくださいね。
繰り返し回数が決まっていなければ「while」
繰り返したい回数が決まっていない場合は、継続条件を満たしている限りループする「while」を使うと良いでしょう。while文は、以下のように記述します。
while( ループの継続条件 ) { ループ処理 }
以下のサンプルコードは、while文を使用して10から1までカウントダウンしています。
int i = 10; while( i > 0 ) { Console.WriteLine(i); i--; }
■実行結果
10 9 8 7 6 5 4 3 2 1
「int i = 10;」の箇所は、変数iの宣言&初期値に10を設定している処理です。その後while文のループ継続条件である「i > 0」の判定を通過して1度目のループ処理が実行され、10が表示されます。
次の行にある「i–」は「iを1マイナスする」という意味なので、iの値は9となります。その後、再度「i > 0」の判定を通過して、2度目のループ処理で9を表示するのです。
同じ要領でループ処理を10回繰り返すと、「i–」でiの値は0となります。そして、「i > 0」の条件を満たさなくなるので、11回目のループ処理は行われずにループ終了となるのです。
クラスやメソッドを定義する構文
クラスやメソッドについては先ほど軽く触れましたが、あらためて詳しい書き方について解説します。
クラスやメソッドの前提知識として欠かせない「オブジェクト指向」をよく知らない方は、以下の記事を先にご一読くださいね。
クラスやメソッドの定義
クラスを定義する時は、以下のように記述します。
class クラス名 { クラスの定義内容 }
メソッドを定義する時は、以下のように記述します。
戻り値の型 メソッド名( 引数, 引数… ) { メソッドの処理内容 }
「戻り値」とは、メソッドの呼び出し元に実行結果として返せる値のことです。戻り値を必要としないメソッドの時には「void」と書きましょう。
また「引数」とは、呼び出し元からメソッドの入力値として指定できる変数です。
以下のサンプルコードではClockクラスを定義し、その中にSetTime、GetHour、GetMinuteという3つのメソッドを定義しています。
class Clock // 時計クラス { private int now_hour = 0; // 現在の時 private int now_minute = 0; // 現在の分 public void SetTime( int hour, int minute ) // 現在時刻をセット { now_hour = hour; now_minute = minute; Console.WriteLine("ただいまの時間は、{0}:{1}です。", now_hour, now_minute ); } public int GetHour() // 現在の時間を取得 { return now_hour; } public int GetMinute() // 現在の分を取得 { return now_minute; } }
「private int」から始まる2行は、Clockクラスで使う現在時間(now_hour)と現在分(now_minute)の変数定義です。このように、頭に「private」と付けるとクラス変数を外部から直接参照・変更できなくなり、クラスの安全性が高まります。
「public void SetTime」の箇所は、引数に指定した現在時刻をクラス変数にセットして表示するSetTimeメソッドの定義です。
WriteLineメソッドで複数の変数値を表示する際には、以下のように{0}、{1}、{2}…と変数の表示位置を指定して、その後に表示したい変数を記述します。
Console.WriteLine("ただいまの時間は、{0}:{1}です。", now_hour, now_minute );
「public int GetHour()」の箇所は、現在の時間を取得するメソッドの定義です。このメソッドでは「return now_hour;」と記述することで、メソッドの戻り値を呼び出し元に返しています。
GetMinuteメソッドについても同様です。
public int GetHour() // 現在の時間を取得 { return now_hour; }
クラスやメソッドの呼び出し
先ほど定義したClockクラスやそのメソッドを、Mainメソッドで呼び出してみましょう。
サンプルコードは、以下のようになります。
static void Main(string[] args) { Clock clk = new Clock(); // 時計クラスのインスタンスを生成 // 現在時刻を12:34に設定 clk.SetTime(12, 34); // 現在時間と現在分を取得 int hour = clk.GetHour(); int minute = clk.GetMinute(); // 現在時刻を直接表示 Console.WriteLine("ただいまの時間は、やはり{0}:{1}です。", hour, minute ); }
「Clock clk = new Clock();」の箇所は、クラスのインスタンス(実体)を生成する処理です。
クラスはあくまで設計図のため、使用する際には以下のようにしてインスタンスを生成する必要があります。
クラス名 インスタンス名 = new クラス名( クラスの初期値 );
なお今回は省略しましたが、クラスの生成時には上記のように初期値を与えることも可能です。
その場合はクラス内に「コンストラクタ」と呼ばれる初期化用メソッドの定義が必要です。詳細は以下の記事をご覧ください。
「clk.SetTime(12, 34);」の箇所では生成したインスタンスを用いて、ClockクラスのSetTimeメソッドを呼び出しています。クラスのメソッドを呼び出す際には、以下のように記述します。
インスタンス名.メソッド名(メソッドの引数に渡すデータ);
「int hour = clk.GetHour();」からの2行は、GetHour/GetMinuteメソッドを呼び出して現在時刻を取得する処理です。これらは戻り値を返すメソッドなので、新しく宣言した変数「hour」「minute」に各戻り値をセットしています。
そして、最後の「Console.WriteLine」は取得した現在時刻をMainメソッドから直接表示する処理です。このプログラムを実行すると、以下のように表示されます。
ただいまの時間は、12:34です。 ただいまの時間は、やはり12:34です。
まず、SetTimeメソッドの呼び出し時に指定した「12:34」という時刻が表示されました。その後、GetHour/GetMinuteメソッドで取得した現在時刻を直接表示した場合でも、同じ現在時刻が得られていることが分かります。
C#のクラスについては以下の記事でも解説していますので、併せてご確認くださいね。
C#入門者が挫折しないためのベストな勉強法はスクール
C#は比較的難易度の高いプログラミング言語です。実際のところ、これまでの基本文法で難しさを感じた方も多いのではないでしょうか。
しかしこれはほんの入門レベルの知識で、覚えるべきことは他にも多く存在し、実際のところ独学するにはかなりハードなプログラミング言語です。
「独学でC#を習得できるか不安…」という方には、プログラミングスクールがおすすめです。
プログラミングスクールは現役エンジニアが講師を務めることが多く、適切なカリキュラムに沿って直接C#を教えてくれるので、わからないこと・困ったことがあってもすぐに解決できます。
このブログを書いている当社でも「SAMURAI ENGINEER」という完全オンライン型のプログラミングスクールを運営しています。満足度95%の現役エンジニア講師がマンツーマンでしっかりサポートいたします。
無料カウンセリングではC#を学習する上での不安や疑問、キャリアのご相談もOKです。C#の習得を成功させたい方はぜひ、気軽にお試しくださいね。
まとめ
今回はC#を入門したい方向けに、以下4点について解説しました。
- C#入門者におすすめの開発環境
- C#を入門するための3ステップ
- C#を独学で学べる勉強方法
- C#入門者が知っておくべき6つの基本文法
C#の習得は簡単ではありませんが、需要も将来性も高いプログラミング言語なのでチャレンジして損はありません。今回ご紹介した内容を参考にして、C#を習得してくださいね。
また分からなくなったら、この記事をいつでも読み返すと良いでしょう。
Visual StudioとUnityの2つ。ゲーム開発ならUnity、それ以外ならVisual Studioを選べば問題ありません。
入門サイトと入門書籍の2つ。自分に合った方法を選びましょう。
「//」と「/* ~ */」の2種類。1行だけなら「//」、複数行なら「/* ~ */」を使いましょう。