とあるIT屋の独白

ITや経営について主に書きます

プログラミング言語自体の機能以外での選定観点

何のプログラミング言語を選べば良いのかという課題は、エンジニア界隈で盛り上がる話題の一つですよね。個人的には言語自体の機能やメンバーの志向みたいなのが一番大事とは思いますが、とはいえ使いたい言語がユースケースにはまらないのではという懸念もあります。今の時代は絶対的に優れている言語は無いと思っていて、ユースケースに応じていかに使い分けられるかという観点も大事と考えています。
というわけで、今回はあくまで個人的な見解ですが、プログラミング言語自体の機能以外での選定観点を挙げてみたいと思います。

① パフォーマンス・低レイヤー対応

OSに近い部分の操作が必要であったり、コンマ数秒の単位でのパフォーマンスを求められている場合は、現在でもC/C++を選定するのが王道でしょう。このようなユースケースで、RubyPHPが採用されることはほぼ無いでしょう。
最近だとRustが、C/C++の代替としてちょくちょく話題になっているので、低レイヤー層のプログラミングをやってる人はキャッチアップしても良いかなと思います。

② 使用するツールやパッケージに紐付く

例えばブラウザベースのアプリケーションを開発する場合、フロント部分でそれなりに凝った実装をするなら、現状ほぼJavaScript(もしくはTypeScript)一択になるでしょう(クロスプラットフォームとかWebAssemblyをメインで使わない限りは)。フロント部分がJavaScriptならバックエンドも合わせたいよねって話にはなるので、サーバサイドjsは現実的な選択肢にはなりつつあるように感じます。
あと、分かりやすいところはPHPで、WordPressEC-CUBEをシステムの基盤として採用する場合は、間違いなくPHPを選定せざるを得ないでしょう。
このケースは、いくらその言語がイケてないと感じていても、選択において他に代替手段が無いに等しいので、あまり議論の余地が無い状況になることが多いと思います。

③ ライブラリやフレームワークの存在

このケースは、他の言語でも実現不可能では無いんだけど、便利なライブラリやフレームワークがそろっているから、それ使えばいいじゃんって場合になります。
一番分かりやすいところでいくとPythonです。機械学習やデータ分析をメインで行う場合に、他の言語でも不可能ではないんだけど、普通にPythonで良いよねという結論に大体はなると思います。PythonはWebフレームワークも一応あるので、分析系と合わせて言語をPythonに統一するっていう選択も珍しくない気はします。
あと、スタートアップで使用するWebのフレームワークと言えば、まだまだRailsが使われていると感じます。少人数でスピード出したいよねっていうケースには、RubyRails)が候補に入ってくるでしょう。

④ 使用するプラットフォームとの相性(企業の観点)

インフラの基盤にGCPを使うとなった場合、バックエンドの言語はGolangが候補になるでしょう。GolangGoogleが開発しているので、GCPで何か機能を使いたいとなった場合に、環境が整備されているからです。もちろんGCP自体は他の言語もサポートしているので、他に重要なユースケースやこだわりが無い場合は、やはりGolangを選定するのが無難かなとは感じます。

cloud.google.com


個人的にはJavaもこの方針になってきてると感じます。もちろんJavaはライブラリが充実しているので、その観点で選定される可能性も十分にありうるのですが、JavaOracle傘下で開発されているので、Oracleのプラットフォームを使用する場合は、Javaを選定するのが良いのではと感じます。(もちろん他の言語でも動くとは思いますが)

最近だと、以下の記事にあるようなOCIの基盤で、Javaのアプリケーションを管理する機能もあるようですので、今後もJava特有の機能が実装される可能性はあるでしょう。

prtimes.jp


さて、ざっと言語の機能以外で個人的に意識している選定基準を書いてみましたが、直近で衰退していると言われている言語にも触れてみたいと思います。特にその言語をディスる意図は全くないのですが、言われることが比較的多いと思われるPerlScalaについて、なぜ衰退するような感じになってしまったのか書いてみます。

Perl

Perlは2000年代前半頃は、Web開発で普通に使われていたのですが、Railsの普及であったりPHPとの競争に敗れたりで、今の時点でWeb開発で採用されるということは、ほぼ無いでしょう。ここら辺はユースケースが被る言語との競争になってしまうので、致し方ない面はあります。

anond.hatelabo.jp

言語自体の書き方は好みによるので、それについてPerlが劣っているとは私は思いません。Pythonとの比較で挙げられるのは、データ分析系界隈の人がPythonを好んで使うことが多くて、それでライブラリが充実していったという経緯もあります。仮にPerlPythonに匹敵するようなライブラリが存在していたら、今の状況も変わっていたかもしれません。

el.jibun.atmarkit.co.jp

Perlは言語自体のアップデートも結構カオスになっています。この記事を書いている時点でもいまだにPerl7はリリースされていない模様ですし、コミュニティの中でもゴタゴタがあったそう。このような状況でシステム開発においてPerlを選択するのは、やはりリスクを感じてしまう気はします。

scrapbox.io

Scala

私も触っていた言語で、個人的には好きな言語です。Javaのライブラリも使えるし、Javaより便利なメソッドも揃ってるし、関数型の機能も使えるし、言語のコンセプトとしては今でも素晴らしいと感じています。

scalapedia.com

ただ、今はネガティブな印象で見られてしまうことがある気はしていますし、新規開発でScalaを採用するという話も以前よりも聞かなくなったと思います。理由としては以下の記事でいくつか挙げられていますが、個人的には「Spark絡み以外の嬉しさがもう一つというか、結果的に他にキラーなものが生まれてこなかった」というのが大きい気はします。

blog.kaelae.la

Spark自体が今はBigQueryのような競合サービスが出てきた点と、Kotlinの台頭やJavaの機能アップデートもあって、Scalaが段々と選ばれる理由付けが弱まっている気はします。

qr.ae

加えて最新バージョンのScala3へのフレームワークやライブラリの対応の遅さです。Scala3自体は2021/5にリリースされたのですが、Scalaで最もメジャーと思われるWebFrameworkのPlayFrameworkは、いまだにScala3対応が済んでいません。おそらくですが、開発言語としてScalaを採用している現場のほとんどが、まだScala3に上げてない状態と思われます。

この2つの言語は環境変化に対して、確立したユースケースを実現できなかったという点と、言語および周辺のフレームワークをきちんとアップデートできなかったという点が、ちょっと対応として微妙だったという気がします。もちろん、まだアップデート自体は続いてますので、今後も状況は注視するべきとは思いますが。
あらためて、言語自体の機能が重要なのは言うまでもないのですが、それ以外の要素でどう使ってもらうかを意識しないと、中々プログラミング言語は普及したり使ってもらえなかったりするのかなと最近感じます。ユースケースが明確な言語は廃れにくいし、逆にこのユースケースなら他の言語でもいいよねってなってしまうと、言語自体の存在意義を見直すタイミングなのかなと思います。