C#大好きマンなので布教のためにC#でできることをまとめておきます。 便宜上、学生やOSS開発者をコミュニティと表現します。
CUIアプリケーション
まずCUIアプリケーションとはなんぞや?となるので簡単な説明を加えると、「つよそうなはっかーがまっくろながめんでかたかたやってるやつ」です。はい、コンソールアプリケーションです。
Windows
- .NET Framework
- .NET Core
Mac
- .NET Core
Linux
- .NET Core
これだけ見れば.NET Core強そうですよね。.NET Coreはここ数年でできてきたクロスプラットフォームなフレームワークです。ですのでライブラリの充実度で言えば.NET Frameworkのほうが充実してます。
GUIアプリケーション
GUIアプリケーションとかっこよく言っちゃいますが、つまりはただの画面で操作するアプリケーションソフトウェアです。
Windows
- UWP
- WPF
- Windows Forms
これ以外にもストアアプリとかいろいろな形式がありますが主だったものはこれでしょう。Windows10向けならUWP、それ以外ならWPF、学習目的ならWindows Formsで開発するといいと思います。
Mac
- Xamarin.Mac
あまり噂を聞かないXamarin.Macさんですが、いちおう忘れずに書いておきます。Xamarinはモバイル方面がよく話に出るのですが、林檎さんとMSとGoogle大先生のプラットフォームでクロスプラットフォームな開発ができるという特徴をうたってるのでね……()。使うにはライセンスが必要です。コミュニティの方なら無償ですが、企業の方はたしかVisual Studioのライセンスが必要になります。それとMacOSのなにか。Visual StudioのライセンスあるならWin機で開発したいところですがビルドで問題になるんですよねぇ…林檎め。
Windows + Mac + Linux
- Gtk#
いちおうLinux方面のGUIアプリケーション作成手段としてGtk#があります。Monoの上で動くらしいですが、最近メンテナンスされてるのだろうか…?(あまりこっち方面詳しくないです)
iOS
- Xamarin.iOS
こちらはC#コードをがんばってAOTコンパイルしてiOSで動くようにするやつです。View側はStory Boardとかで作ります。単純に開発言語がSwiftからC#になっただけのようなものです。Xamarin.Androidと合わせてXamarin.Nativeとか言われてたりします。もちろんこちらもXamarin.Macと同様にライセンスが必要になります。
Android
- Xamarin.Android
- Embeddinator-4000
Xamarin.iOSがあればもちろんXamarin.Androidもあります。こっちはAndroidにC#環境を載せる(アプリに付ける)って品物です。いやぁすごいなぁ…。もちろんこちらもXamarin.Macと同様にライセンスが必要になります。
たまに聞くEmbeddinator-4000ですが、こちらはC#コードをCに翻訳して、Android-JavaからC#コードを使えるようにしようという品物です。あと、Linuxとかでも使えるらしいですが、Androidでの話しか聞かないのでこちらに書きます。
iOS + Android + Windows + Mac
- Xamarin.Forms
Xamarin.Nativeとの違いはView側も統一しようというものです。その分OS固有のViewは実装しずらくなりますが、全体の開発速度は早いと思います(共通なので)。MacOS向けのXamarin.Formsは開発中?かなにかで自前で手を加えてやらなければならないといった記事を見た気がします(曖昧)。こちらもXamarin.Macと同様にライセンスが必要になります。
Webアプリケーション(バックエンド)
- ASP .NET MVC
- ASP .NET Web API
- ASP .NET Core
バックエンドというのはユーザー側から全く見ることのできないサーバーサイドのプログラムのことです。ASP .NET MVCとASP .NET Web APIはWindowsでしか動かない旧来のもの。ASP .NET CoreはWindows+Mac+Linuxで動く最近できたもの。これから手を出すならASP .NET Coreでいいと思います。
Webアプリケーション(フロントエンド)
- DuoCode
- Bridge.NET
さて、問題のフロントエンドです。フロントエンドとはユーザーが見ることのできるほうでHTMLとかJavaScriptとかのアレです。C#からJavaScriptに翻訳するトランスコンパイラはMS製のものがなく、他の企業などのツールを使うしかないです。 最近まではDuoCodeしか知らなかったのですが、それよりもちょっとよさそうなBridge.NETというものがありました。どちらもコミュニティでは無償で使えると思うのですが、企業の方は課金ということになります。
C#からJavaScriptへのトランスコンパイラはTypeScriptがあるのでMS製は期待できないと思いますが。そのうちXamarinのように買収してくれませんかねぇ…。
Webサイト(静的サイトジェネレート)
- Wyam
ASP .NETはサーバープログラムのいる大掛かりのもので、静的サイトジェネレーターはプログラムからサイトを生成するだけのシンプルな方です。一度生成したらプログラムはいらないので、Github Pagesとか使えます。
Wyamは自分が推してる静的サイトジェネレーターで、ASP .NETのようにRazorを使ってcshtmlファイルからサイトをジェネレートしてくれます。日本語の記事をググったらたぶんの一昔前の自分の記事が出てきます。というか自分のしかないから誰か書いて()。
ゲーム
- Unity
- SharpDX
ちょっとC#バージョンが古くて魔改造されたC#を使わされるUnityですが、こちらはモバイルアプリのゲームからPCゲームまで作れます。速度を追い求めないならとりあえずUnityやっとけって感じです。
Unityを使わずにゲームを作るならDirextXになりますが、それを操作できるC#ライブラリとしてSharpDXを紹介しておきます(他にもありますがこれが一番良さそう)。OSSで比較的使われる方も多いみたいでいろいろと記事があるので参入障壁(言葉が思いつかなかった)は低いと思います。
VR
- Unity
VRもUnityかよ!!ってなりますが、Unityです。詳しくは知りません。
MR
- Unity
- UWP
MRってなに?VRと何が違うの?って方はMSに聞いてください(実際には聞かずに調べてください)。Hololensのやつです。
UWPは空間にそのままアプリケーションが表示されるので、よりVRらしさのあるものを作るならUnityです。
その他
- Officeアドオン
そうです、Officeアドオン作れます。VBAでExcelのマクロなんか作らなくてもいいんです。COMコンポーネントとしてそのまま操作もできますし、完全にVB系列の存在価値ないです。いままで紹介してきたものの中に多々VB系列ではできないことが含まれてます。
というわけで、C#でできることをまとめてみましたが、さすがにOS、組み込みのほうはちょっと頑張らないといけませんが、それ以外のことはコミュニティならほとんどのことが、企業の方は金さえあれば、なんでもできると言っても過言ではないでしょう。 そのうちC#の上位実装のP#や量子コンピューター向けのQ#が流行ることになるかもしれませんが、それまではC#で事足りるので是非C#を使いましょう!!!