Web開発にお勧めの言語

2019-03-22 01:50:50

 まず大前提として、要件によって異なります。


・パフォーマンス重視の場合
 C/C++
 golang
 Java

 これらの言語はJavaは例外としても、基本的にCPUネイティブで動くので無駄がありません。それ以上に重要なのがマルチスレッドに強いという部分です。自分自身をアプリケーションサーバ化し、単一プロセスでCPUリソースを使い切れます。

 中でも最速を目指すならC/C++です。しかし苦行です。言語仕様の問題というより、エコシステムが他の言語のように充実していないというのが理由です。例えばhttpsで外のデータをとってこようと思ったときに、対応するライブラリをとってくる作業が重しになります。何かやろうと思ったときに、とにかく必要な物をそろえるのが大変なのです。言語仕様自体はC++が変態化して進化し、読みやすいかは置いておくとして、魔法のようなコードが書けるので、実は最も面白い言語です。テンプレートとかオーバーロードとか、あそこまで無茶苦茶に進化した言語は他にありません。

 エコシステムを考えるとベストな選択肢はgolangです。しかし言語仕様が貧弱すぎて、本当に割り切った使い方をしないとやっていけません。多人数で大規模開発している様子が思い浮かびません。なんであんなに一長一短の方向へ行ってしまったのか、とても残念です。

 Javaは環境依存が少ない(無くはない)だけあって、他からライブラリを拾ってくるのは比較的楽です。他の言語に劣るのは、JVMの管理下のリソースをネイティブに持って行くときの変換負荷ぐらいです。言語仕様そのものも実はそんなに悪くありません。

 ちなみにこれらの言語の欠点は「Jsonと相性が悪い」ということに尽きます。Webでデータをやりとりする場合はほとんどがJsonで、一部XMLが残っている形です。読み書きのライブラリは存在しますが、特に読み込み過程の取り回しが悪いのです。言語仕様としての動的な型付けが進化していけば良いのですが、やはりスクリプト言語のようにはいきません。

 Webアプリにおいて負荷のほとんどはDBです。それを前提とするのならネイティブ系の言語をわざわざ選ぶ必要はありません。アプリケーションサーバ自体に負荷のかかる特殊なシステムを組む場合に選択肢に入れるべき言語です。
 
・組みやすさ重視
 Python
 Node.js+TypeScript

 エコシステム、型の柔軟性で選ぶならPythonです。ネイティブ系に比べれば速度は遅いですが、組みやすさは圧倒的です。静的型付けも可能なので、ある程度の入力補完も効きます。Jsonとの相性も良いです。言語機能的にはマルチスレッドも可能ですが、GIL(グローバルインタプリタロック)の問題があるので、CPUリソースを活用するときはマルチプロセス化の必要があります。

 エコシステム、型の柔軟性、実行効率で選ぶならNode.js+TypeScriptです。ラインタイムライブラリがことごとく非同期化されているので効率は良い反面考えて作らないと、DBに限界を超えた大量アクセスを仕掛けるコードが出来上がります。基本がJavaScriptなので、Jsonとの相性も良いです。ちなみにNode.jsにおいてTypeScriptを使わないという選択肢は無いです。開発効率が段違いに変わってくるので、生のJavaScriptを使っているなら無駄な作業と断言出来ます。言語仕様的にシングルスレッドなので、CPUリソースを活用するときはマルチプロセス化の必要があります。

 スクリプト言語を選ぶポイントとしてはJsonとの相性(スクリプト系は基本的に大丈夫)、開発環境の入力補完です。静的型が使えない言語は入力補完も貧弱になるので、開発効率が落ちます。スクリプト言語に静的型付けが必要ないと思うかもしれません。実行時にはそれで良いのですが、とにかく開発時の入力補完が開発効率に圧倒的な差を生みます。