CloudCIRCUS Meetup #3 1/2
こんにちは!
クラウドサーカス開発部です。
第3回のMeetupは当社の技術顧問であるまつもとゆきひろさんにも登壇していただき、大規模開発と動的型付け言語をテーマにお話しさせていただきました。
はじめに
Meetupの全内容は、YouTubeを通じてご覧いただけます。
今回のテーマは当社のサービスであり、動的型付けと大規模開発の両方を満たすBowNowがきっかけとなりました。BowNowは動的型付け言語であるRubyで開発されております。一般的に動的型付け言語は大規模開発に向いていないとされております。しかし、それらを認識はしていても言語化できていない方も多いのではないでしょうか。今回の記事を通じてお伝えし、今後の皆さんの開発体験のヒントになればと思います。
本記事では、前半と後半に記事を分けてリリースさせていただき、今回は動画の前半で話されている「動的型付け言語」についてお伝えさせていただきます。
動的型付け言語について
動的型付け言語のメリット
まず歴史的なお話からすると、Rubyをはじめとする動的型付け言語は、主に1990年代後半ぐらいから2000年代初期のころまでは非常に人気が高かったです。理由は、生産性が高いからです。そこまでコードを書かなくとも、特に型について考えなくても、ソフトウェアが書けるという利点があります。
Rubyには、型を宣言する文法がありません。型がなくてもソフトウェアは動くため、ある意味冗長化されていると言えます。むしろ書かない方が完結にソフトウェアが終わるので、見通しが良くなります。また、拡張性が開いているという意味で、非常に柔軟性が高いため、変更に対しての制約も少ない点も人気があった理由と言えるでしょう。
エンタープライズ向けの開発が静的型付けを後押しした
その後、2009年に開発されたGo言語など、特に2010年以降からは様々な言語が静的な型を付けるようになりました。近年ではエンタープライズ向けサービスの開発が増えた背景などから、静的な型宣言の付いた言語の方が人気になっていったのではないかと考えられます。
スモール開発においては、動的型付け言語が力を発揮する反面、コードベースが大きくなってきたり、プロジェクトが大きくなってきたりすると、メソッドの乖離値の型がわからなくなってしまうというデメリットもあります。
その点、静的型付け言語は、コンパイル時に網羅的に型チェックが行われるので安心して開発を進めることができます。web2.0のシステムが当たり前になってきて、webのソフトウェアの複雑度やコード、開発の規模が大きくなりがちなところがありました。それぞれの機能が依存し合うことが増え、様々な組み合わせが増えてくるので、間違いをより網羅的に見つけたいというニーズに対して最適解であることは理解できます。
ただ、これから挙げる点に関しては多少なりとも静的型付け言語に対する誤解があることはお伝えしたいと思います。
1つ目は、静的型付け言語を使う方の中には、パフォーマンスが早くなるという理由で使う方もいます。ただし、それは静的な型じゃないと達成できないものではないので、その点は誤解かと思っています。
例えば、Chromeブラウザの中に入っているV8というJavascriptのVMがあるのですが、これには型宣言はありません。それにもかかわらず、型の付いた言語のVMと比べても遜色ないスピードで動きます。場合によっては実行時にしかできない最適化をすることもあり、それらも含めて性能を出すので、「型をつける」ことが性能を良くすることにはならないと考えます。
2つ目は、型がドキュメントになるという意見です。もちろん、ドキュメントとコンパイルチェックによるプログラミング体験の向上は静的型のメリットだと思いますが、これは若干、過大評価されていると感じます。
型チェックという責務をプログラミング言語から切り離すことがRubyの姿
Ruby3.0以降では、静的な型情報も別ファイルで持つようにしています。それを使うと型の不整合を発見するような、静的解析を行うスタティックアナライザーというタイプのプログラムが実行されます。このように言語以外のツールでも開発体験は向上しますし、Rubyと他ツールによる型情報などを十分に使うと、例えば、Typescriptで開発しているのと同じような補完やチェック、型の不整合を教えてくれることもあります。
現状は型情報が揃っていないのですが、将来的にはTypescriptと同じぐらいの快適な開発環境が手に入る可能性があります。これらを踏まえると、Rubyという言語に型宣言が組み込まれることが必須条件ではないかもしれないと考えられます。
また、これらのことから「静的型付けだから」性能が良くなるというのは誤解です。ソフトウェア開発の本質は、アプリケーションが動作することを担保することです。Rubyは型宣言を入れることで性質を変えるのではなく、外部のツールに任せていきたいと考えております。
そろそろ次のテーマである「Rubyでやる大規模開発」について話していきましょう。
そうですね!ありがとうございます!
過去の歴史から言語のトレンドを見ていくことで、その言語の特性などが見えたのではないでしょうか?
アプリケーションが動作するという本質から外れずにツールである言語をどう活用していくのか?が現状の状況に関して行える最善策かもしれません。
次回の記事では、Rubyでの大規模開発をテーマにモジュラモノリスの重要性やプロダクトマネジメントの観点からソフトウェア開発についてお伝えさせていただきます。
この記事が気に入ったらサポートをしてみませんか?