「Flux」アーキテクチャとは? MVCやMVPとの違いとテスタビリティー
「MVC」や「MVP」では、ModelやViewの数が膨大になり構造が複雑化するという問題があった。FluxアーキテクチャはMVCやMVPとどう違うのか。
本連載は、ソフトウェア開発のさまざまなアーキテクチャの中で、特にテストに強いものを紹介していきます。第4回は「Flux」を取り上げます。
著者紹介:石黒 邦宏
デジタル・マジック・ラボでインターネット経路制御運用に関わり、オープンソースウェアで経路制御を実現する「GNU Zebra」を開発。1999年IP Infusionを共同設立し、CTOに就任。2009年Access CTO、2015年アプリックス CTOを経て、2018年デジタルハーツホールディングスCTOに就任。
「Flux」の特長と仕組み
Fluxは、Facebookが提唱するアーキテクチャです。画面遷移が多く、情報のリアルタイムアップデートが必要なサービスの場合、MVC(Model、View、Controller)やMVP(Model、View、Presenter)といったアーキテクチャでは、ModelやViewの数が膨大になったり、ModelやView間での双方向のやりとりなどから、システム構造が非常に複雑化してしまったりという問題がありました。
Fluxはこれらの問題を解決するために提案されたアーキテクチャです。最大の特徴は、ModelとView間の双方向のデータフローではなく、全て単方向のデータフローであることです。
Fluxアーキテクチャでは、「Dispatcher」がMVCやMVPのControllerやPresenterの役割を、「Store」がModelに近い役割を担っています(図1)。Fluxはイベントが発生したときにどのようにStoreを更新するかをDispatcherが判断し、StoreはDispatcherからの指示に基づき、Viewを更新します。これらのやりとりは全て単方向で行われることから、ModelとViewの関係がシンプルになり、その結果システムの構造もシンプルになり、機能追加の際のコード修正やテストもしやすくなります。
コラム:実は似ている? 「Flux」と「MVVM」
「MVVM」も基本的には単方向のデータフローであり、その点ではFluxと似ていると言えます。しかし、MVVMとFluxではデータ連携方法に大きな違いがあります。
MVVMではViewとViewModelのデータ連携をData Bindingが担っていますが、FluxにはData Bindingのような仕組みがありません。MVVMはViewの独立性を主眼とするアーキテクチャである一方、Fluxはデータフローを簡素化し、全体のシステム構造を把握しやすくすることに主眼を置いたアーキテクチャだからです。
「この開発にはどのアーキテクチャを使えば良いか」と迷う方も少なくないでしょう。それぞれのアーキテクチャが考案された時代背景により、MVVMのViewはネイティブUI、FluxのViewはブラウザUIが想定されています。そのため、MVVMはスマートフォンアプリの開発に、FluxはWebフロントエンドの開発に向いているアーキテクチャと言えるでしょう。もちろん、開発するアプリケーションやソフトウェアの性質によって一概に言い切れない部分もありますが、参考にしてみてください。
「テスタビリティー」から考えるFluxアーキテクチャ
次に、Fluxをテスタビリティーの視点から見てみましょう。
Fluxはデータフローが単方向のためMVVMのように、イベントドリブンなテストを行う必要があります。具体的には、テストしたいモジュールに対してイベントを発生させ、そのイベントに対応する別のイベントを、モック(Mock)を作成して確認する方法です。
図1では、1つのイベントに対する処理の流れを説明していますが、実際には複数のイベントが連鎖的に発生するケースもあるため、テストの場合はそうしたケースも想定して実行する必要があります。Fluxのテストは、MVCやMVPと比較すると手間がかかります。ただ、Fluxは画面遷移が多くデータの流れが複雑なシステムの開発に向くアーキテクチャであるため、テストに手間がかかるのは必然であり、アーキテクチャ自体のデメリットとはいえないでしょう。
Fluxの特長まとめ
- 「シンプルなソフトウェア構造」にするためのアーキテクチャである
- 3つの基準「コード量」「変更への耐性」「テストのしやすさ」全てが平均的なバランス
- イベント発生の多い比較的大規模なソフトウェア開発に向いている
次回は、Cleanアーキテクチャについて説明します。
Copyright © ITmedia, Inc. All Rights Reserved.
アプリ開発でテストに強いアーキテクチャはこれだ!
「プロジェクトに合ったソフトウェアアーキテクチャを選ぶには何を基準に選べば良いのか」そうした開発者の悩みに対して、答えを探っていきます。
この記事の著者
こんなメディアも見られています
キーマンズネットに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
SpecialPR
アクセスランキング
-
1
「Gemini Notebook」になって何が変わった? NotebookLMからの変更点をおさらい
-
2
ゼロから分かる「Python in Excel」 プログラミング未経験の筆者がデータ分析してみた
-
3
生成AIで減る作業時間、残る確認と責任 ITエンジニア1265人調査
-
4
そのFTP、止めて大丈夫? 「古いファイル転送」を残すか見直すか
-
5
なぜ「情シス不在」でもIT化が回る? 39人の町工場が15年かけて見つけた答え
-
6
「AIを盗む」のではなく「AIを動かす」ために Googleが捉えた攻撃者の異変
-
7
Googleの自動化ツール「Workspace Studio」×Gemini、4つの業務効率化アイデア
-
8
7歳からのLinux愛好家が、なぜ今「Windows」に? OSの見方が変わった理由:896th Lap
-
9
その見積書、ChatGPTに入れて大丈夫? 現場で迷わない「OK/NG」の線引き
-
10
AI議事録は「文字起こし」で選ばない 表で分かる「Notta/AutoMemo/AiNote」の特性
キーマンズネット SNS
インフォメーション
注目情報をチェック
キーマンズネットをフォロー