滅入るんるん

何か書きます

C#でできることまとめ

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#を使いましょう!!!