【ソフトウェア開発の効率化!】クリーンアーキテクチャの導入メリットと詳しい解説について
こんにちは、たけのこです。
現役でSEやプログラマーをしていると、
ソフトウェア開発では、細かくディレクトリを分けて開発しているプロジェクトに出会う機会が多いと思います。
僕自身もSEとして働いているのですが
[chat face=”cropped-24a6ce9ea80cd88a9664fbd22d097884.png” name=”たけのこ” align=”left” border=”green” bg=”none” style=”maru”] ファイルとか、フォルダとか細かく分けすぎ!!
いっぱいファイル見なきゃいけないし。。。
なんでこんなに細かく分けるの?! [/chat]
なんて疑問に思いました。
ということで、僕が実際に直近で出会った「クリーンアーキテクチャ」という
設計手法について解説していこうと思います。
- わざわざディレクトリを分ける意味がわからない!
- 構成を細かく分けるメリットを知りたい!
- 単純にクリーンアーキテクチャについて知りたい!
といった方にオススメの記事となっています。
では、早速いきましょう!
クリーンアーキテクチャとは?
クリーンアーキテクチャとは、プロジェクトの機能やモジュールをそれぞれの層に分けることで、各層が独立して機能するように設計する手法の1つです。
これにより、外部の変更が内部に影響を与えにくくなります!
クリーンアーキテクチャという設計では、それぞれ4つの層に分けられます。
- エンティティ層(Entities):
システムのビジネスルールを適用したオブジェクトやデータ構造を定義する層。 - ユースケース層(Use Cases):
アプリケーションのビジネスルールを実装する層。 - インターフェイスアダプター層(Interface Adapters):
データの形式を変換し、エンティティ層とユースケースが使う形式とデータベース、ウェブといった、外部の形式との間を取り持つ層。 - フレームワーク&ドライバー層(Frameworks and Drivers):
フレームワークやツールなどの、一番外部に位置する層。
導入するメリットとは?
クリーンアーキテクチャを導入するメリットとしては、大きく分けて4つのメリットがあります。
- システムの拡張性が向上
- システムの保守がやりやすくなる
- テストが容易になる
- フレームワークと独立させることにより、技術スタックの変更がしやすくなる
ザックリ4つを提示しても、なんのこっちゃ分かりにくいと思いますので、1つひとつ詳しく解説していきます!
システムの拡張性向上
まず、1つ目のメリットとしてはシステムの拡張性が向上するというメリットがあります。
クリーンアーキテクチャでは、各層が独立しているため、特定の層のみを変更しても他の層に影響を及ぼすリスクが低くなります。
これにより、新しい機能の追加が入ったとしても迅速に対応することができるようになります。
システムの保守がやりやすくなる
2つ目のメリットは、システムの保守がやりやすくなるという点です。
1つ目のメリットの所でも書いたように、クリーンアーキテクチャは各層が独立している設計となっています。
そのため、上位層が下位層の実装に依存しなくなり、変更が予測可能で管理しやすくなります。
[chat face=”cropped-24a6ce9ea80cd88a9664fbd22d097884.png” name=”たけのこ” align=”left” border=”green” bg=”none” style=”maru”] 例えば、データベースからのデータ取得で失敗している場合、インターフェイスアダプター層に不具合があることが予測できるし、他の人に「DBの処理、直しといたよ~」と言われても、どのあたりのコードに修正が加えられたのか、ある程度の予測ができますので作業スピードが格段に向上することが、具体的なメリットですね! [/chat]
テストが容易になる
3つ目のメリットは、テストが容易になるという点です。
テストコードを書く際に、それぞれの層が依存関係にある場合は各層を跨いでテストコードを書く必要があると思います。ちょっとめんどくさいですよね。。。
しかし、クリーンアーキテクチャでは各層が独立しているため、ユニットテストが容易になるといった点があります。
特にビジネスロジックがUIやデータベースから分離されているため、モックやスタブを使って網羅的にテストが行えるようになりますので、間接的にシステムの品質向上にもつながります。
スタブとは:
実際の処理で使用されるメソッドを模倣して、実際に動かした際に予測される値を返却するだけのもの。
モックとは:
実際の処理で使用されるクラスのインスタンスを模倣して、実際に動作させた際の振る舞いを再現することで、テストを円滑に行なうためのオブジェクト。
フレームワークとの独立させることにより、技術スタックの変更がしやすくなる
最後のメリットとしては、フレームワークと独立させることにより、技術スタックの変更がしやすくなるという点があります。
例えば、技術職のお偉いさんが
「今使われているフレームワークは古いから、こっちの新しい技術を導入したい。」
と提示してきた際に、本来であれば様々なコードに影響してくるので大規模な改修が必要になってくると思います。
しかし、フレームワークに強く依存しない設計は、将来的な技術の移行や更新が必要になった場合に、大規模なリファクタリングを避けて済むようになります。
また副産物として、長期的にプロジェクトを持続させることができる可能性も高まります。
そう考えると、最後のメリットの部分は一般的なSEやプログラマーよりも、チームリーダーやPMの方たちのほうが大きく感じるメリットかもしれませんね~
さいごに
いかがだったでしょうか?
今回はザックリとクリーンアーキテクチャについて詳しく解説しました。
クリーンアーキテクチャを導入することにより、システム開発の柔軟性の向上や品質向上、可用性の向上にも繋がります。
これから、プライベートでプロジェクトを作成してプログラミングの勉強をする人や設計業務に携わる人は、クリーンアーキテクチャの導入を視野に入れてみてはいかがでしょうか?