【ゲーム制作】プログラミング言語は何を使えばいい？

## はじめに
　私はこれからいくつかのプログラミング言語を紹介しますが、それを見ていただく前に注意点があります。

・私自身はほぼPythonしか触ったことがない。
・android関係の知識がゼロなのでそっちの方は微塵もわからない。

　これらの点から分かる通り、この記事はかなりの部分が個人的な主観からなる情報で構成されています。Python以外は鵜呑みにしないでちゃんとリサーチしてくださいね。いや、Pythonもほんとは鵜呑みにしちゃダメなんですけど。
 　
　ちなみに、記事上の「スマホ」は全てiOSの話だと思ってください。
　ゲーム開発の対象は基本iOSかPC、一応htmlにも多少は触れてるよって感じです。
 
## ゲーム制作において、どのプログラミング言語を使うべきか
　プログラミング言語について詳しくない人がゲームを作ろうとすると、最初に気になるのはこれだと思います。もしもゲームを作りにくい言語を勉強してしまったらかなり時間を無駄にしてしまいますし、そうでないにしろ作りたいハードウェアの物に対応していなければ学習コストがもったいないです。
　結論から言うと、「大体どの言語でもゲーム作ってる人はいる」が答えにはなります。つまり、基本的に言語によってゲームが作れないということはほぼないと思って良いでしょう。
　ただし、当然ながらどの言語にもライブラリの充足度の違いから得意不得意があります。この記事ではその得意不得意を紹介していきます。

### Python
__メリット__
・汎用性が高い。
　ゲーム制作、数値計算、ツール・マクロ作成、機械学習等々なんでもできる。
・ライブラリが豊富。
 　2Dゲームも3Dゲームも制作可能。
・文法が簡単。
　初学者でもとっつきやすい。
・PCに関してはほんの一手間加えればクロスプラットフォーム。
　字面そのまま。
 
__デメリット__
・実行が遅い。
　あくまで他の言語と比べたらと言う話。プログラミング言語として十分な速さは出る。
・開発工程はやや複雑。
　リソースは自分で手に入れるしかない、開発は完全にコードベースなど、ゲーム特化な開発ツールよりもやることが複雑になる。
・スマホゲームはめんどくさいかも。
　フレームワーク「kivy」を使わないとスマートフォン向けのプログラムが作れない。個人的にはSwiftで書いた方が良いと思う。
 
### C#
__メリット__
・Unityが使える。
　Unityとはかなり有名な高性能ゲームエンジンです。Unityの採用している言語がC#であり、C#を使う＝Unityで開発するになると思います。
　Unityは色々記事とか公式HPとか見て欲しいんですが、簡単な構成であればコーディングなしでもゲームが作れたり、素材が色々用意されてたりするので、プログラミングにおいてゲーム制作しかしない人はC#がいいんじゃないでしょうか。
 
__デメリット__
・特になし？
　C#でゲームじゃないプログラミングもできますし、Unityはプラットフォームも一、二を争うレベルでマルチなはずです。ただ、スマホはSwiftの方がやりやすいかも？
　あとはUnityがただのエンジンじゃなくて開発ツール面でも強力なので、結果的に他のゲームエンジンに移りにくくはなるかもしれません。あくまで想像ですが。

### Swift
__メリット__
・iOSアプリの開発に最適。
　Apple純正言語なだけあってiPhoneアプリの開発にかなり最適化されてます。
・GUI関係のライブラリが豊富。
　アプリ開発用の言語なので当たり前ですがライブラリはかなり充実しています。3D、2DともにPythonより上でしょう。
・その他のスマホアプリやmacのアプリも制作可能になる。
　そのまんま。
 
__デメリット__
・Apple製品以外のプログラムが作れない。
　これは仕方ないですね。Appleなので。
・開発にmacOSが必須。
　windowsだと開発できないの結構な問題点ですよね……。iOSのシミュレーターとか動かす関係上違和感はないですけど。
・アプリ以外のプログラミングには向いていない。
　まあ、数値計算とか問題を解くアルゴリズムとかそういうのはあんましないと思います。

### Javascript
__メリット__
・Web上で動かすので、少しの工夫でスマホを含めたクロスプラットフォームになる。
　字面通り。
・Web系の勉強も兼ねられる。
　Web関係のプログラムは基本Javascriptを使うイメージなので、ゲーム以外にも結構役立つと思います。
 
__デメリット__
・他の言語とテンションが違う。
　Web系なので。他の言語と比べると方向性はだいぶ異なります。ブラウザでしか動きませんし。ゲームらしいゲームを作りたい、形にもこだわるという方は避けた方が良いでしょう。
・別にWebはJavascriptの特権ではない。
　デメリットかどうかは微妙ですが、htmlのゲームならpythonで書いたコードをhtmlに変換するゲームエンジンとかあるので、「Javascript=Web系の勉強になる」はそうですが、「html=Javascript」ではないです。

### (Java)
　かのマインクラフトがJavaで開発されているのは有名な話でしょう。しかし、実際のところJavaはゲーム制作向きの言語とは言えません。理由は
 ・GUI関係のライブラリが他の言語に比べて充実していない。
 ・そもそも難しい。
 ・Java自体フロントエンドよりバックエンドの方が得意。
 などが挙げられます。
　
### C++
　~~噂では昔よくゲーム制作に使われていたそうです。が、おすすめしません。
 ・文法が特殊なので勉強した成果が他の言語に転用しにくい。
 ・ライブラリもおそらく他の言語より充実していない。
 ・最近はそんなに使われていないイメージがある。
 　知識がないのでちょっとふわふわした説明になってますが、そんなに的を外してもいない、はず。~~
  
  私が無知だっただけでUnrealEngineのメイン言語らしいです。UnrealEngineはさまざまな3Dゲームに使われる、ハイクオリティなグラフィックに向いたゲームエンジンです。個人開発ではかなり難易度が高いでしょうし、文法が特殊なのは本当にそうですけど。

## 私の偏見あふれる言語選択基準
スマホゲーメイン→問答無用でSwift。（と個人的には今でも思っているが、世間的にはC#?）
パソコンゲーメイン→問答無用でC#。
パソコンゲー、スマホゲーどっちも作りたい→C#。
ゲーム以外にも作りたいものがある→PythonかC#。こういうタイプの人は複数の言語を勉強しても良いと思う。（あくまで順番に。並列はやばい）
Web関係やりながらゲームも作りたい→Javascript。
最初から3Dやりたい、別に他の言語の難易度が上がっても構わない→C++?(複数人じゃないときつそうですけど……)

　一つ留意点として、UnrealEngineやUnityは描画素材が手に入りやすく、それ以外の、たとえば言語そのものの公式環境などだと自分で素材を集めるしかないです。私の場合は自力での素材収集もそんなに苦ではないですが、規模や人にもよると思います。素材を自分で集めるのが難しい方は、Unity(C#)を使うのが無難でしょう。

## さいごに
　いかがだったでしょうか。冒頭や最後の項にある通り、この記事はかなり偏見の塊ですが、参考になったら幸いです。
　自分が良いゲームを作れるようになることももちろん良いことですが、やはり一人のゲーム好きとしてゲームのデベロッパーは多いに越したことはないですよね。
　じゃんじゃんゲームを作り、ゲーム市場を活性化させて新しいゲームが増える土壌に貢献していきたいものです。