テストに強いソフトウェアアーキテクチャはこれだ!
図解で分かるソフトウェアアーキテクチャ 「MVVM」のテスタビリティーと3つの特長
アーキテクチャを選定する上で重要な視点の一つにテスタビリティ―がある。「MVVM」はMVCやMVPとどこが違い、何に優れているのか。図を交えて解説する。
ソフトウェア開発においてさまざまな新しいアーキテクチャが提案されている中で、アプリ開発においてテストに強いアーキテクチャを紹介する本連載ですが、第3回の本稿では「MVVM」アーキテクチャについて解説いたします。
著者紹介:石黒 邦宏
デジタル・マジック・ラボでインターネット経路制御運用に関わり、オープンソースウェアで経路制御を実現する「GNU Zebra」を開発。1999年IP Infusionを共同設立し、CTOに就任。2009年Access CTO、2015年アプリックス CTOを経て、2018年デジタルハーツホールディングスCTOに就任。
「MVVM」の特長と仕組み
「MVVM」(Model/View/ViewModel)とは、「MVC」や「MVP」に連なるアーキテクチャの一つで、2005年10月にマイクロソフトのジョン・ゴスマン氏が提案したものです。当時「Adobe Flash」(以下、Flash)が全盛の時代で、リッチなWebアプリケーションはFlashで実装するのが一般的でした。同時にWebテクノロジーも進化を遂げ、Webブラウザで非同期通信を実現する「Ajax」という言葉が生まれたのも同じ2005年でした。
MVVMは、結果的にWPF(Windows Presentation Framework)や、マイクロソフトが開発したFlashライクなフレームワーク「Microsoft Silverlight」の基本アーキテクチャとして採用されました。しかし、ジョン・ゴスマン氏がMVVMを提案した時はまだWPFもSilverlightもリリースされていませんでした(WPFのリリースは2006年、Silverlightのリリースは2007年)。MVVMはまずアーキテクチャが提唱され、その後にそれを適用したプラットフォームが順次リリースされた歴史的に珍しいアーキテクチャなのです。
MVVMの主眼は、複数の異なるUIプラットフォームを並行して使えるモダンな環境下でUIをHTMLベースで開発しても、またFlashなどのNon-HTMLベースの環境で開発しても耐えられるアーキテクチャの提案にありました。
開発時にデザインとロジックを明確に分離してモダンで高度なアプリ開発を行うためという観点では、当時すでにソフトウェア開発者マーティン・ファウラー氏による「Presentation Model」(以下、PM)が存在していました。
MVVMはマーティン・ファウラー氏のPMのアーキテクチャを敷衍(ふえん)しつつも、WPFやSilverlightなどの複数UIプラットフォームをサポートする過程の中で、Data Bindingやイベントドリブンのアーキテクチャといった新しいアイデアを生み出しました。
その後、Android OSの6番目のメジャーアップデート「Android 6.0 Marshmallow」以降Data Bindingが全面的に採用され、Android開発にはなくてはならないものとなりました。またMVVMは、イベントドリブンのプログラムインタフェースを徹底していますが、この考え方が、のちのち「Flux」を生み出す下地になったと考えられます。
「テスタビリティー」から考えるMVVMアーキテクチャ
では、本連載のテーマである“テスタビリティー”という視点から見た場合はどうでしょうか。
MVCやMVPの場合、ModelやViewのインタフェースを呼び出して戻り値を確認するところから始めます。しかし、MVVMの場合は、MVCやMVPのようにViewのインタフェースが存在しないため、代わりにData Bindingを使います。
MVVMは、Data Bindingの接続ポイントを切り替えることでテストを実施でき、実装の切り替えも容易です。また、Data Bindingは基本的には単方向のデータ反映の仕組みなので、従来のテストとは違ったテスト戦略を考える必要があります。
上記の図のように、MVVMはモジュール呼び出しの戻り値はあまりなく、MVCやMVPよりもむしろ「Flux」アーキテクチャと近い側面を持っていると言えます。そのため、MVVMはMVCやMVPのような関数呼び出しと戻り値のチェックをするテスト方法はあまり有効ではなく、イベントドリブンのテスト戦略が必要になります。
MVVMの特長まとめ
・「View」の独立性が高いアーキテクチャである
・コード量は比較的少なく、変更への耐性もあり、テスタビリティにも優れている。ただし、イベントドリブンのアーキテクチャのため、それに対応したテスト戦略が必要になる
・異なったUIを持つ複数のアプリを同時に実装したい場合やViewの変更が多いアプリケーションを開発する場合に向いている
<訂正>(2019年9月9日10時)
本稿初出時に記載の「MVVM」の各モジュールの役割につきまして、図版「MVVMのイメージ」において「Model:データモデル」「View:プレゼンテーション」「ViewModel:ビジネスロジック」と記載しておりましたが、ビジネスロジックを担うモジュールについては、開発者によって考え方が異なる可能性があるため、「MVVMのイメージ」の図版を修正しました。また、それに伴い一部の文章を修正しました。
Copyright © ITmedia, Inc. All Rights Reserved.
アプリ開発でテストに強いアーキテクチャはこれだ!
「プロジェクトに合ったソフトウェアアーキテクチャを選ぶには何を基準に選べば良いのか」そうした開発者の悩みに対して、答えを探っていきます。
この記事の著者
関連記事
こんなメディアも見られています
キーマンズネットに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
SpecialPR
アクセスランキング
-
1
C言語は「危険」と言われても、専門家が「使う価値は十分にある」と言うワケ:900th Lap
-
2
かんぽ生命が営業報告を50分→10分に AI時代に見直すべき「データ入力」の仕組み
-
3
M365 Copilot全庁展開で月2000時間削減 現場がAIを「使いたくなる」習慣化の仕組み
-
4
6TBファイルのサーバ移行、M365ユーザーの八雲町がSharePointでなく「あえてBox」の理由
-
5
Claude Codeに「仕事を丸投げ」して事故らないための基本運用ルール
-
6
損保ジャパン、2万人の「Gemini活用」どう管理? 推進者が語る「リスク回避」の仕組み
-
7
「カスハラ対応」を個人に任せない 取手市がAIで変えた窓口業務
-
8
「Claude」3倍高速化の裏で、Anthropic開発者が「あえてしなかったこと」:899th Lap
-
9
社員の「セキュリティ訓練」、他社はどの程度やっている? 気になる隣の実施状況
-
10
20年物の基幹システム刷新に、マクロミルがあえて「全てを変えない」と決めた理由
キーマンズネット SNS
インフォメーション
注目情報をチェック
キーマンズネットをフォロー