「ソフトウェアアーキテクチャ」とは?
ソフトウェアアーキテクチャとは、プログラム構造を抽象化し、コードをシンプルに扱うための概念です。その最大の特長は、ソフトウェアのUI(ユーザーインタフェース)や内部ロジックといった機能コンポーネントをそれぞれ分離し、独立して扱えるという点です。それぞれが独立しているため、各機能を同時並行で開発することができ、プログラム変更があった場合も他のコンポーネントへの影響を最小限に抑えられるといった利点があることから、現在多くの開発現場でソフトウェアアーキテクチャが活用されています。
なぜアプリ開発にMVCが「使えない」のか
ソフトウェアアーキテクチャという概念は、1970年代に生まれました。実は意外と古い歴史を持つ概念です。この概念を一躍有名にしたのが、1980年代初頭に登場した「MVC」です。MVCは、「Model」「View」「Controller」の頭文字を取ったもので、デザインやレイアウトなどUIを制御する「View」という要素が初めて取り入れられたアーキテクチャです。Viewを取り入れた背景には、「Windows」や「Macintosh」といったGUI(グラフィカルユーザーインタフェース)で操作するOSの普及がありました。この頃から、徐々にUIの重要性が高まり、MVCは多くのソフトウェア開発で用いられる代表的なアーキテクチャとなりました。
しかし近年、スマートフォンが急速に普及しモバイルアプリの開発が活発化したことにより、MVCでは対応できない要件も多くでてきました。モバイルアプリの場合、新しいデバイスへの対応や機能追加など頻繁にアップデートが発生するため、柔軟にプログラムの変更に対応する必要があるからです。MVCは各要素間の依存が比較的強いアーキテクチャであるため変更に対する柔軟性が低く、プログラム修正やそれに伴うテストにも手間がかかってしまうのです。
そのためMVC以外にも、MVPやMVVM、Flux、Clean Architectureなど新しいアーキテクチャが考案されました。
適切なアーキテクチャを選択する重要性
開発するソフトウェアの規模や仕様によって最適なアーキテクチャは変わります。アーキテクチャにはそれぞれの特性があり、多様な開発者の要求を全て単独で網羅するアーキテクチャは存在しません。もし、アーキテクチャの選定を誤った場合、かえって非効率な開発をする恐れもあるのです。まずは「候補となるアーキテクチャにはどのようなものがあるのか」「その特長はどういう点なのか」を把握した上で、何を選び何を捨てるのか、またプライオリティーなどを明確にし最適なアーキテクチャを選択する必要があります。
では、最適なアーキテクチャを選ぶ際の判断基準とは何でしょうか。私は「コード量」「変更への耐性」「テスタビリティー」(テストのしやすさ)の3つが重要だと考えます。特に「テスタビリティー」は重要なポイントです。なぜならテストは品質を確保するために重要な工程であり、「テスタビリティーを高める=品質の高いソフトウェアを作る」といっても過言ではないからです。また、「テスタビリティー」と「変更への耐性」には因果関係があり、テスタビリティーが高ければ必然的に変更の耐性も上がります。そのため、テスタビリティーを重視すればおのずとバランスの取れたアーキテクチャを選択できるのです。