「Architecture and ReactorKit」Yoichi Tagaya, Mercari
多賀谷洋一氏で「Architecture and ReactorKit」というタイトルでの発表です。多賀谷氏は、DIフレームワークであるSwinjectの作者として知られており、現在は株式会社メルカリのエンジニアリングマネージャーを務めています。
この発表では、「ソフトウェアアーキテクチャとは何か」について語られ、Fluxの立ち位置を確認したのち、ReactorKitの良さについて触れました。
ソフトウェアアーキテクチャとは何か?
ReactorKitはFluxアーキテクチャに強くインスパイアされたフレームワークです。Fluxアーキテクチャの話をする前に、そもそもアーキテクチャ、つまりソフトウェアアーキテクチャとは何か、考えてみましょう。多賀谷氏は次の通り述べています。
「What is software architecture」とGoogleで検索すると、Peter Eeles氏の「What is a software architecture?」というタイトルの記事が上位にヒットするはずです(2018年7月現在)。この記事の本文でも参照されている通り、IEEE 1471に以下の記述があり、アーキテクチャを定義しています。
Architecture is the fundamental organization of a system embodied in its components, their relationships to each other, and to the environment, and the principles guiding its design and evolution. [IEEE 1471]
日本語に翻訳すると、以下の表現になります。
「アーキテクチャとは、システムの重要な構成のことであり、システムのコンポーネントや互いの関係、環境、その設計と展望を導く考え方を実現するものです。」
非常に抽象度が高いですが、なんとなく伝わってきます。さらに、Peter Eeles氏の記事で述べられていることを簡単にまとめていました。それが以下の通りです。
アーキテクチャは、
- 構造を定義する
- 振る舞いを定義する
- 重要な要素についてのみ考える
- チーム構成に影響を与える
- 論拠に基づく意思決定を実現する
- ステークホルダーの複数の相反する要求の均衡を保つ
- 取り巻く環境に依存する
- 同じ課題を共有するアーキテクチャパターンに準拠することができる
多賀谷氏は特に最後の3つについて重点的に説明しました。
「ステークホルダーの複数の相反する要求の均衡を保つ」にいては、社内外のステークホルダーがたくさん存在し、そして同時に彼らの要求をうまくバランスするためにアーキテクチャが機能し、そしてそれが重要であることを述べています。
次に、「取り巻く環境に依存する」では、会社の環境、例えば、株価やDAU、コードベースの古さや量、多くの新しい機能や多くのエンジニアなど、さまざまな変数に依存することを説明しています。
これらからわかるのは、未来においてステークホルダーや環境がより複雑で大きなものになることにより、選択するアーキテクチャも変わりうるということです。
最後に「同じ課題を共有するアーキテクチャパターンに準拠することができる」についてです(上記の「アーキテクチャパターン」は、発表および原文では「Architectual Style」という表現となっています)。ここでのアーキテクチャパターンは、つまり、MVCやMVVM、VIPPER、iOS Clean Architecture、Fluxなどのことを指します。これらのパターンは、それぞれの共有する課題を解決するために存在します。例えば、Fluxであればデータの更新フローの煩雑さを課題とし、一方向のデータフローによる状態管理というアプローチをしています。
ReactorKitの良さ
さて、ここまででソフトウェアアーキテクチャについてと、Fluxの立ち位置について説明がありました。ここで多賀谷氏は、MVCパターンを実現するフレームワークとしてRuby on Railsを取り上げました。Ruby on RailsはWebアプリケーションフレームワークであり、高速な開発を実現するフレームワークであることを示しています。Ruby on Railsは強力なCoC(onvention over configuration)を持っており、高速な開発を実現する大きな要因のひとつとなっています。
そして、ここでReactorKitが登場します。ReactorKitはFluxパターンを実現するフレームワークであり、Railsと同様に高速な開発を実現し、未来のステークホルダーや環境においてもフィットすることを主張しています。これはRails同様に迷わない強い規約が要因にあります。この点は菅原氏の発表でもあった「迷わず正しい設計をする」ということにつながっているように感じました。
まとめ
- アーキテクチャはステークホルダーや環境に依存する
- ReactorKitはステークホルダーや環境の成長に対応する強いフレームワーク
