静的型付けと動的型付けに関するポエム

1 min読了の目安(約1100字IDEAアイデア記事

静的型付けと動的型付けに関する議論は尽きなくて、どっちが良いかというのはたびたび話題になったりします。私個人としては業務経験では静的型付け言語を使うほうが圧倒的に多いですが、個人の開発では動的型付けの言語もけっこう使ったりします。ので、一応は両方触ってきたという観点から、今回はこの型付けに関するポエムを書いてみたいと思います。
最近はgolangやTypeScriptといった、静的型付けの言語が人気が出てる傾向にあると感じます。それでもRuby、Python、JavaScript(あるいはJava)を使う方々への記事にある通り、静的型付けでは型が定義されるので、コンパイル時にエラーで落としてくれたり、型自体がドキュメントのような役割を果たせるので、秩序が保ちやすいという点が利点として挙げられています。最近静的型付けの言語が取り上げられるようになったのは、おそらく無秩序状態になってしまった動的型付け言語で作成されたアプリケーションの反省からではないかと感じます。

では、なぜ動的型付け言語が無秩序になってしまうのでしょうか。それは動的型付け言語自体が悪いというよりは、その特性を理解した開発を行ってこなかったからだと私は考えます。
静的オブジェクト指向は設計者が苦労を背負込むシステムの記事が、静的と動的の適所を考える上で参考になります。動的型付け言語ではクラスの設計を省略できるので、ソースの記述量が少なくて開発できる分、個々の開発者のスキルや知識に依存するような形になります。もちろん、個人や少数であったりスキルが高いメンバーがそろったチームであれば効果的に機能するでしょう。

適所を鑑みずにエンジニアとしてまだ初級レベルのメンバーがいる中で、動的型付け言語を選択してしまうと無秩序になりやすい状態になると考えられます。にもかかわらず、型という概念を使わずに実装できる動的言語を、初級者でも分かりやすいという理由だけで採用してしまったという点に、問題があると私は感じます。
本来的には、開発の進め方やチームメンバーの構成や、スキルを考慮して言語を選ぶべきと私は考えます。メンバーが使ったことある言語とか、触ってみたい言語を採用したいという気持ちはメチャメチャ分かります。ただ、チームで言語選定の基準を明確にしつつ、そのチームの特性に沿った言語で開発を行うのが継続的に機能追加などを行う上では大事で、それが秩序を保つことにもつながると思います。