社員ブログ第2回は私、横田が務めます。
弊社はIT書籍の編集プロダクションなので、ITに関する内容をとりあげようと思います。今回のテーマは「動的型付けと静的型付けはどちらがトレンド?」です。
プログラミング言語には、型に関する記述ルールや扱い方が、ざっくり2パターンあります。それが本ブログで取り上げる「動的型付け」と「静的型付け」です。
現在とても流行しているPythonは動的型付けです。そのため、「動的型付けが流行っているのかな」と思っていたのですが、ここ数年で人気が上がっているTypeScriptというプログラミング言語は、静的型付けです。しかも、TypeScriptはJavaScriptに静的型付けを採り入れたという位置づけです。
これを知ったときに「どちらがトレンドなのかな?」と気になり、今回のブログで考えようかなと思いました。本テーマはIT業界ではよく議論されているものではありますが、まとめてみます。
まずは、動的型付けと静的型付けの違いについて紹介します。
簡潔に言うと、動的型付けは「プログラム実行時に型付けを行う」言語であり、静的型付けは「プログラムを実行する前に型付けを行う」言語です。そのため、プログラムの記法に違いが出てきます。
先ほども述べましたが、Pythonは動的型付けです。変数を宣言する際は次のようになります。
動的型付けだと変数宣言時に型の記述が不要です。実行時に適切な型が割り当てられます。
では、静的型付けはどうでしょうか。ここではJavaで紹介します。
静的型付けだと変数宣言で型の記述が必要です。
比べてみると、動的型付けは型の記述が無い分、簡潔です。数行なら大した差ではありませんが、プログラムの規模が大きいほどメリットになります。そのため、動的型付けのほうが一見よいように見えます。ただし、一見して型がわからないのは不便な場合もあります。
プログラムは、書いている時間より読んでいる時間のほうが圧倒的に長いというのは、有名な話です。そのため、プログラムはわかりやすく書くことが重要です。また、動的型付けであっても、プログラミングする際に型を意識する必要があるのは変わりません。その点を考えると、型を明記することでプログラムを書いた人の意図が相手に伝わりやすくなるのは、メリットと言えます(個人的にも、静的型付けのほうが安心感があって好きです)。
先ほどのJavaの例だと変数宣言時に型を記述しましたが、実はJava10からは型を明記せずにvarキーワードを使う宣言(型推論)が使えます(ローカル変数のみ使用可能)。こういった、静的型付けでも型を記述しない記法が取り入れられる流れがあり、「動的型付けのように冗長な記述を省略するほうが良いよね」という風潮があったように感じます。
では、今はどちらがトレンドなのかを考えます。
まずは、2020年のプログラミング言語の人気ランキングを見てみます。ここでは、10位までを抜粋して紹介します。
C言語やJavaなどの静的型付けが上位ですが、3位にPythonが入っています。トップ10を見ると、動的型付けと静的型付けの割合は五分五分のようです。
GitHubが利用動向をまとめたレポート「The State of the Octoverse」も見てみましょう。
2020年では、JavaScriptとPythonが1位と2位、Javaは3位にランクインしています。TypeScriptが年々順位を上げて、4位にランクインしていますね。
少々古いですが、こんな記事も見つけました。
https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-JF18-editorial.pdf
Javaの版権を持つOracle社の記事です。
「プログラミング言語の盛衰をたどってみれば、最新の言語設計では静的型付けが好まれるという確かなトレ ンドがあることに気づくでしょう」や、「ここ10年ほどで登場した主要な言語を考えてみてください。Go、Swift、Kotlin、Rustと、いずれも静的な型付けを行っています。さらに、かつて動的だった言語にも、静的な型付けが追加されています」といった記述があります。この記事では、静的型付けが好まれているという見解のようです。
ほかにもいくつか記事を読みましたが、「動的型付けの人気が高い時代はあったが、静的型付けが再評価されてきている」という流れはあるように思いました。ただし、お互いのデメリットを改善する機能が追加されてきていることもあり、一概にどうとは言えず議論が下火になっているようにも感じます。
一昔前は、プログラミング言語やフレームワークのトレンドがある程度わかりやすかった気がします。今はさまざまな技術が生まれ、プログラミング言語の種類も増えているので、これさえ使えばOKというものは減り、適材適所で使いましょうという風潮が強くなっているとも感じます。いくら最新の技術でも、ミニマムなシステムには不要な場合もあるでしょう。
自分もツールなどを作る際は、プログラミング言語やフレームワークありきで考えるのではなく、相性のよい道具は何かを考えるように意識していきたいなと思いました。
https://www.tiobe.com/tiobe-index/
https://octoverse.github.com/#footnote–fastest-growing-languages
https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-JF18-editorial.pdf
https://www.mmj.ne.jp/mmjblog/disliked-programming-languages/
https://typescript-jp.gitbook.io/deep-dive/getting-started/why-typescript