C# (C sharp) とは2002年に登場したMicrosoft謹製のプログラミング言語の一つです。
有名なC/C++やJava、Python等よりも後に開発された言語で、比較的新しい言語です。歴史が浅いとも言えますが、その分構文が洗練されており、他の言語の良い言語仕様を積極的に取り入れるなど、便利で使いやすい言語 となっています。他言語経験者の方にざっくりと雰囲気を説明するならば、JavaとC++を足して2で割ったオブジェクト指向言語をベースに、SQL等色んなものを混ぜこぜにした感じです。(一番よく似ている言語は?と言われれば、Javaです。)
プログラミング初心者の方には難しいと感じるかもしれませんが、このような特徴から、他の言語を勉強する際にC#で学んだ知識を流用しやすい ため、一つで三つも四つも美味しい言語 と言えるでしょう。勿論、ある程度別の言語を触ったことのある経験者の方からすれば、過去に触っていた言語やその周辺知識を流用することが出来る ため、馴染みやすい言語 とも言えるでしょう。
学習にあたって、特にVisual Studioを使用した場合、IntelliSense(VisualStusioにある入力補完機能のこと)の恩恵を受けられるため、大してタイピングはせずとも、またC#に詳しくない状態でも、サクサクと書けてしまいます。Windowsで開発をする方には、一番オススメ と言っても良い程素晴らしい言語です。(他OSの方にも勿論オススメです!)
Visual Studio (推奨)
言わずと知れた、Microsoft謹製のIDE(統合開発環境)です。動作はだいぶもっさりしていますが、先述したIntelliSenseや、アプリの画面を作る際のプレビューア機能などが特に優れており、C#でプログラミングする際には無類の強さを発揮する開発環境 だと言えるでしょう。Windowsの方でC#を触ってみたい方は何も考えずにすぐさま導入しても良いレベルです(但し、相応のスペックと空き容量が必要)。大抵のC#の学習サイトでは、このVSを使うことを前提として話を進めている場合が殆どです。
余談ですが、DXライブラリを用いたゲーム開発をする際にはほぼ必須と言っても良い環境でもあります。
Visual Studio for Mac (旧Xamarin Studio) (推奨)
上記のVisual StudioのMac版です。僕の手元にMacが無いのでどの程度上記の機能が移植されているのか不明です・・・。その昔、MicrosoftがXamarin社を買収した際に、Xamarin Studioを元にVSforMacにしたそうです。
Xamarinで開発したiOSアプリをAppleストアに出す際、XCodeが必須となるため(つまり、Macが無いとiOSアプリを一般向けに公開することが出来ない)、VS for Macで開発するパターンが多いそうです。(因みに、最近はVSでもiOSのテストが出来るそうなので、開発まではVSで行うことが可能です。)
Visual Studio Code
またまたMicrosoft謹製の今度はエディタです(こちらはオープンソース)。Gitの機能が最初から統合されていたり、ターミナルが統合されている上に、拡張機能が豊富、おまけにIntelliSenseも働くスグレモノです。但し、あくまでもエディタですので、VSのプレビューアやソリューションファイルと言ったものは存在せず、GUIアプリ開発という点で見るとVSに比べてかなり効率が落ちます。Unityのスクリプト程度であれば、VSCodeでも十分でしょう。VSを入れるための容量が勿体ない場合(大してVSを使う予定がなく、わざわざVSを入れるのが面倒な場合)等にはかなりオススメの選択だと言えます。
C#に限らず、他の言語を書くことも考慮した上での エディタとしての完成度は、非常に高い です(GUIアプリではなく、もう少し軽めの開発をする際にはバツグンにオススメだと言えます)。
C#が使われている例としては以下のものが挙げられます。
Unityのスクリプト (ちょろっと勉強するだけで、すぐ書けるようになります。オススメです。)
WPFやUWPアプリケーション開発 (ちょっと勉強が必要ですが、お手軽にGUIアプリが作れるようになります。)
Xamarinによるクロスプラットフォームアプリケーション開発 (勉強量が鬼のように多く、バグとの闘いになることが多いですが、その分莫大なメリットが得られます。まだまだ発展途上なので、将来性はバツグンです(2018年4月時点)。)
よく分からない単語が多いですね。以下で一つ一つ説明していきたいと思います。
Unity
マルチプラットフォーム対応のゲーム開発環境。3D・2Dともに、比較的簡単に高度なゲームを作ることが可能 (詳しくはUnity入門資料を参照してください)。
WPF
デスクトップからアイコンをクリックして起動するタイプの昔ながらの WindowsGUIアプリケーション (ソフトウェア、と言った方が近いかも)のこと。開発という観点で見た場合、後述するUWP、Xamarinよりもライブラリが豊富で安定している。”Windows Presentation Foundation”の略。
UWP
Windows10から登場した、Windowsの入っているあらゆるプラットフォーム形式に対応したアプリケーションのこと。パソコンだけではなく、タブレットやスマホ、VR等でも共通のコードで動作する。 しかし、WPFに比べて欲しいライブラリがやや不足している。”Universal Windows Platform”の略。
Xamarin
Android、iOS、UWPアプリケーションをC#で開発できる環境のこと。それぞれを別々に、プラットフォーム固有の機能を活かした開発が可能なXamarinネイティヴ と、コードを最大限まで共通化し、ほぼ一つのコードで上記三つ全てのアプリケーションを同時に開発することが可能なXamarin.Forms が存在する。但し、まだまだ発展途上なため、UWP以上にライブラリが不足しており、特にFormsに関しては登場してから年数が浅い(2016年~)こともあって、開発途中で不明なバグに遭遇することが多い(最近はだいぶ改善されてきている)。
余談だが、最近Formsのコード共通化対象が更に拡大する計画が進行中で、上記のWPFやLinux、Macアプリのコードも共通化しようと日々開発が進められている。ますます将来が期待される。
ゲーム制作サークルだけあって、Unityはほぼ確実に触ると思いますし、時々開催されるハッカソンでも、アプリ開発の上で役立つことは間違いないです。(勿論、C言語等ではおなじみの、コンソールアプリケーションの作成をはじめとして、上記の内容以外にも出来ることは色々あります。)
それでは、具体的な学習法の紹介に移りたいと思います。
応用例で示したようことが出来るようになる上で押さえておいて欲しいキーワードをまとめておきます(グループ分けの意味等は後ほど説明します)。[C# によるプログラミング入門 | ++C++; // 未確認飛行 C](http://ufcpp.net/study/csharp/)を読み込んで理解してもらえると良いです(日本語で書かれているC#のサイトとしてはここが最良かと思います)。 |
なお、太字 で示したキーワードは 特に重要なもの です。
グループ1
変数(型、var型)
メソッド
条件分岐
オブジェクト指向
クラス
コンストラクタ
クラスメンバ/メソッドとインスタンスメンバ/メソッドの違い
インターフェース
プロパティ
グループ2
ジェネリック
デリゲート
匿名関数
ラムダ式
イベント
イテレータ
LINQ
ref/outキーワード
null許容型
async/awaitキーワード(非同期処理)
Unityスクリプトが書けるようになりたい人
(※C#はあくまでもUnityでスクリプトを記述する上で必要な程度です。ですので、そこまで本腰を入れて勉強しなくても大丈夫 です。この先の学習法を実践する前に、まずはUnity講座の資料を当たってみてください。)
プログラミング全く経験したことが無い方は、Step1.で学びつつ、グループ1のキーワードを確実に押さえていってください(これだけで十分です)。他の言語でも良いので、プログラミングの経験がある方は、キーワードのグループ1を押さえつつ、C#の書き方を把握し、慣れる程度で十分かと思われます。
WPFソフトが作れるようになりたい人
Step1とStep2-1を参考にしつつ、キーワードをグループ2まで含めて全て理解してください。適宜Google先生を頼りましょう。
本格的な開発をしたい方は、Step3まで勉強してみると良いかと思います。
UWPアプリが作れるようになりたい人
Step1とStep2-2を参考にしつつ、キーワードをグループ2まで含めて全て理解してください。適宜Google先生を頼りましょう(便利なライブラリが使えなくても泣かない)。
WPFと同様、本格的な開発をしたい方は、Step3まで勉強してみると良いかと思います。
Xamarinでクロスプラットフォームアプリが作れるようになりたい人
Step1とStep2-3を参考にしつつ、キーワードをグループ2まで含めて全て理解してください。適宜(どころかかなり頻繁に)Google先生に頼ってください。便利なライブラリが無くても、不明なバグに悩まされても、難しすぎて泣きたくなってもめげない †根性† が一番必要です。
WPFやUWPと同様、本格的な開発をしたい方は、Step3まで勉強してみると良いかと思います。
一週間で身につくC#言語の基本の基礎と発展の部分をこなし、プログラミングの基礎とオブジェクト指向等を押さえてしまいましょう。手を動かして理解することが大事 です。
やや情報が古めですが、日本Microsoft社のかずきさんのブログ、「WPF入門」がおすすめです。ここの内容が理解できれば、大抵のWPFアプリは作れるようになります。
日本Microsoft社のかずきさんによる、かずきのUWP入門がおすすめです。SlideShareかLinkedInのアカウントを取得すれば、PDFをダウンロードできるようになります。
Xamarin.Formsに関しては、日本Microsoft社のかずきさんの、かずきのXamarin.Forms入門がおすすめです。UWP入門同様、SlideShareかLinkedInアカウントを取得すれば、PDFをダウンロードできるようになります。
そもそもXamarin.Formsの新規プロジェクトを作成する段階で、PCL方式とShared Project方式の二つがあって迷うかと思います。ネットの資料では、たいていがPCLで作成しておりますので注意してください。(進歩が激しく、最近は、PCLという言葉自体がなくなりかけているらしいです・・・。”Shared Project”と書かれていない方を選ぶようにしてください。)
Xamarin.Native(Xamarin.AndroidやXamarin.iOS)に関しては、それぞれネットに上がっている資料を適宜参照してください。(詳しくなくてごめんなさい。)
WPFやUWP、Xamarinで本格的な開発をする際に役立つ技術が、“MVVM” です。この技術を実現する上で役立つライブラリがPrismとなっております。
Prismに関しては、それぞれStep2の資料の最後に言及があります。より詳しく知りたい場合は、簡単MVVM入門 with Prism (51代プロ研しくがわ氏による解説!) や、今さら入門するMVVMに必要な技術要素(Xamarin.Forms & UWP)や、Prism for Xamarin.Forms入門を参考にしてみてください。(Google先生、あとは頼みましたぞ・・・!)
C#はこの通り、応用範囲が広く、かつ便利な言語です。長々とした駄文を書き連ねてしまって、申し訳ない限りではありますが、この資料を通じて少しでも読者の皆さんが C#er に傾いてくれたのなら、嬉しい限りです。
皆さんの精進を心より願っております。ぐんぐん強くなって、今度は逆に僕にC#を教えてください!
Last edited on 2018/4/3 | Written by MIS.W 51代 プロ研 あたふた@at0x0ft |