【社内勉強会】クリーンアーキテクチャ【AStudy】

こんにちは、のんです。

今回は2021/10/28(金)に実施したAStudyより、タイタンさんに登壇いただいた「クリーンアーキテクチャ」をとりあげます。

AStudyとは?

AStudyとは"ASKUL Study"の略で、知識の共有を目的として、ASKULで独自に行なっているイベントです。 勉強会やイベント、カンファレンス、LTなどを企画していますが、現在はLTを中心に実施しています。 テーマは自由で、毎回3~4名の方がスピーカーとなってお話いただいています。

2018年3月からスタートし、ほぼ毎月実施しています。

アーキテクチャ

アーキテクチャにはいくつか考え方があり、今回お話しいただいたクリーンアーキテクチャ以外にもインフラアーキテクチャやソフトウェアアーキテクチャなどがあります。これらはいずれもシステムをどのように組み立てていくかの考え方になります。

例としては同じTODOアプリケーションを作成した場合、採用するアーキテクチャによって完成したものは同じでもプログラムを見ると構造が異なっていきます。参考として、さまざまなアーキテクチャを用いたTODOアプリケーションの実装 をgoogleが公開しています。

img1

ソフトウェアアーキテクチャ

ソフトウェアアーキテクチャとは、ソフトウェアに関する決定事項を指しクリーンアーキテクチャもその1つになります。中でも重要な考え方は大きく分けて「分割」と「結合」になります。

分割

分割とはソフトウェアをどのように分割していくのかという考え方でオブジェクト思考に近い考え方です。 基本的な考え方として代表的なMVCモデルと呼ばれるものがあります。

MVCモデルとはユーザとのやりとりを行う「View」、アプリケーションの処理が行われている「Controller」、そしてデータベースを「Model」とした3層構造です。ユーザが触れる画面とさまざまな処理を行うロジック、データベースをそれぞれ分割しています。利点としてはそれぞれが独立しているのでUI変更の影響を処理を行っている箇所が受けにくいことや、ユーザが直接データベースに触れることを防ぐなどがあります。

結合

結合とはMVCモデルなどを用いて分割したものをどのように結合していき相互作用をさせるかという考え方になります。分割・結合することにより持続可能なソフトウェアをバランスよく開発していくことができます。たとえば機能ごとに分割されているので変更や改修が発生した場合の影響範囲を狭くできます。また影響範囲が少ないことにより、ユーザが実際に触れる部分の変更や内部処理の変更が比較的容易なためコストを抑えてアプリケーションを更新していくことが可能です。

クリーンアーキテクチャ

クリーンアーキテクチャ とは、ビジネスロジックを中心に考え、ビジネスロジック以外の影響を受けないようソフトウェアをクリーンに保っていくための考え方になります。金額計算プログラムを例にした場合「金額の合計を計算する」ことや「異なる2つの通貨の金額を比較する」などがビジネスロジックにあたります。これらの操作がDBやUIなどの外側の影響を受けないように依存関係を考えていきます。

クリーンな状態のソフトウェアには、変更を行うことが容易であることや保守の労力が少なくすむことなどの利点があります。 本記事ではクリーンアーキテクチャにて紹介されているものの1つである依存の向きについて紹介します。

次の図ではシステムのアーキテクチャをソフトウェアのさまざまな領域にわけています。円の外側はUIやデータベースなどシステムを実現するための仕組みとなっており、円の中心はビジネルロジックなどのシステムの方針となっています。円の中心にある方針やルールを実現するため円の外側が内側に依存しますが、円の外側(UIやライブラリなど)に変更が起こったとしても円の中心に影響が出てはいけません。

img1

例としてはWebサイトの画面を変更するためにビジネスロジックを変更することや、データベースを別のサービスに変更するため企業が決めたビジネスルールを変更することがないということです。使用する技術のためにビジネスルールがあるのではなく、企業が決めたビジネスルールやロジックを実現するため技術があるというような依存関係になります。

以上のルールによってソフトウェアを階層ごとに分割し依存の向きを守ることによって、円の外側にあたるデータベースやwebフレームワークが時代の進歩によって変更する必要が起きた場合にも、ビジネスルールを変更することなく置き換えることができます。

おわりに

本記事ではAStudyにてご説明いただいたアーキテクチャの内容をまとめました。業務でもアーキテクチャを意識した開発が行われています。奥が深くまだまだ私自身が勉強不足な部分も多いですが今回ご登壇いただいた内容により、理解を深めることができました。今後もアーキテクチャを意識し、役割や分割を意識して開発を行っていきたいと思います。

次回のAStudyレポートもお楽しみに!

バックナンバー

2021年

【社内勉強会】Spring Boot Camp【AStudy】

【社内勉強会】いまさら聞けないAWS【AStudy】

【社内勉強会】第27回AStudy開催レポート

【社外向け勉強会】AStudy+ 開催レポート

【社内勉強会】第26回AStudy開催レポート

【社内勉強会】第25回AStudy開催レポート

【社内勉強会】AStudy Advent Calendar 2020開催レポート

2020年

【社内勉強会】第24回AStudy開催レポート

ASKUL Engineering BLOG

2021 © ASKUL Corporation. All rights reserved.