value.png

技術ブログ

2023.08.28

クリーン・アーキテクチャについて

エンタープライズ・ソフトウェアのコードベースの保守性と拡張性の維持に苦労していませんか?新機能の追加やバグの修正のために、常にコードを書き直していませんか?もしそうなら、クリーン・アーキテクチャを採用する必要があるかもしれません。

このブログ記事では、クリーン・アーキテクチャの利点と、それをエンタープライズ・ソフトウェアに実装する方法について説明します。また、特定のニーズに適したクリーンアーキテクチャを選択するためのヒントも紹介します。

目次

  1. クリーン・アーキテクチャとは

  2. クリーン・アーキテクチャのダイアグラム

  3. クリーン・アーキテクチャの利点

  4. IT プロジェクトでクリーン・アーキテクチャを実装する方法

  5. プラットフォーム開発にクリーン・アーキテクチャを適用するCitynow Asia

1.クリーン・アーキテクチャとは

クリーンコードとクリーンアーキテクチャのコンセプトは、コミュニティで「アンクル・ボブ」1として知られるロバート・C・マーティンが2008年に提唱したものです。

クリーン・アーキテクチャは、クリーン・コードの概念に従った、SOLIDの原則を実装したソフトウェア・アーキテクチャのデザイン・パターンのカテゴリーになります。基本的には、ビジネス・ロジックやドメイン・ロジックをまとめ、システム内の依存関係を最小限に抑えるための、ベストプラクティスの設計原則を集めたものです。これに従えば、クリーン・アーキテクチャによって、ソフトウェア・アーキテクトはコンポーネントをデカップリングすることができます2。

SOLIDとは、5つのオブジェクト指向設計(OOD)原則の頭字語になります。

S - 単一応答の原則

O - オープンクローズの原則

L - リスコフ置換の原則

I - インターフェース分離原則

D - 依存性逆転の原則

これらの原則は、プロジェクトの成長に合わせて保守や拡張を考慮しながらソフトウェアを開発するのに適したプラクティスを確立するものです。また、これらのプラクティスを採用することで、コードからの深刻な問題の回避、コードのリファクタリング、アジャイルソフトウェア開発やアダプティブソフトウェア開発に貢献することができます3。

2.クリーン・アーキテクチャのダイアグラム

クリーン・アーキテクチャは以下の図で説明されています。

clean_architecture.png

この図は最初は少しわかりにくいかもしれないので、噛み砕いて説明しましょう。ダイアグラムは4つのレイヤーで構成されています:

  • エンティティ:Entities(エンティティ)は、ドメインとビジネス・ロジックを表す2つの内側の円のドメ イン層の1つです。これは、企業全体のビジネス・ルール、つまり、このアプリケーショ ンにとって常に真であるもの、あるいは静的なものです。エンティティは、メソッドを持つオブジェクトである場合もあれば、単なるデータ構造と関数の集まりである場合もあります。エンティティは、最も一般的な、またはより高いレベルのものをカプセル化するため、外側のレイヤーの変更によって変更される可能性が最も低くなります。

  • フレームワークとドライバー: Frameworks and drivers(フレームワークとドライバ)は、アプリケーションの外部にある詳細です。これには、ウェブフレームワーク、GUIフレームワーク、データベース、デバイス自体などが含まれます。

  • ユースケース: Use cases(ユースケース)はアプリケーション固有のビジネスルールである。システムのすべてのユースケースをカプセル化します。

  • インターフェース・アダプター: Interface adapters(インターフェース・アダプター)は、ユースケースやエンティティにとって最も便利なフォーマットから、データベースやウェブなどの外部機関にとって最も便利なフォーマットにデータを変換します。

3.クリーン・アーキテクチャの利点

  • 懸念事項の分離: クリーン・アーキテクチャはアプリケーションをレイヤーに分離し、各レイヤーはそれぞれ責任を持ちます。この分離によって、アプリケーションの保守と修正が容易になります。

  • テスト容易性: クリーン・アーキテクチャでは、各レイヤーが他のレイヤーから独立しているため、アプリケーションのテストが容易になります。

  • 柔軟性: クリーンなアーキテクチャは、各レイヤーが他のレイヤーから独立しているため、アプリケーションの変更が容易になります。

  • スケーラビリティ: クリーンなアーキテクチャは、各レイヤーが他のレイヤーから独立しているため、アプリケーションの拡張が容易になります。

  • 保守性: クリーンなアーキテクチャは、各レイヤーが他のレイヤーから独立しているため、アプリケーションの保守が容易になります。

4.ITプロジェクトにクリーン・アーキテクチャを実装する方法

堅牢で保守可能なソフトウェア・システムの構築を追求する上で、クリーン・アーキテクチャの実装は価値あるアプローチとして際立っています。クリーン・アーキテクチャは、アプリケーション内の関心事の分離と明確な境界の確立を強調し、柔軟性と拡張性の両方を促進します。よりクリーンで保守性の高いコードを目指すこの旅に出るには、しっかりとした基礎から始めることが不可欠になります。この点で、最初のステップは極めて重要です。

  • アプリケーションのユースケースを特定する: ユースケースはアプリケーション固有のビジネスルールです。ユースケースはシステムのすべてのユースケースをカプセル化します。ユースケースは、利害関係者やシステムのユーザと話すことによって特定することができます。

  • アプリケーションのエンティティを特定する: エンティティは、ドメインロジックとビジネスロジックを表す2つの内輪のドメインレイヤーのうちの1つです。エンティティは、企業全体のビジネスルール、あるいは、このアプリケーションにとって常に真であるか、静的なものです。エンティティは、メソッドを持つオブジェクトである場合もあれば、単なるデータ構造と関数の集まりである場合もあります。エンティティは、最も一般的な、あるいは、より高いレベルのものをカプセル化し、したがって、外側のレイヤーの変更によって変更される可能性が最も低いものです。

  • アプリケーションのインターフェースを特定する: インターフェイスアダプターは、ユースケースやエンティティにとって最も便利なフォーマットから、データベースやウェブなどの外部機関にとって最も便利なフォーマットにデータを変換する。

  • ユースケースを実装する: ユースケースは、データベースやウェブなどの外部機関に依存しない方法で実装する。

  • エンティティを実装する: エンティティは、データベースやウェブなどの外部機関に依存しない方法で実装する。

  • インターフェースの実装: インターフェース・アダプターは、データベースやウェブなどの外部機関に依存しない方法で実装する。

結論として、クリーン・アーキテクチャを採用することは、堅牢で保守性の高いソフトウェア・システムを構築するための戦略的な選択になります。ユースケース、エンティティ、インタフェースを真面目に特定し、実装することで、構造化された適応性の高いアプリケーションの基礎を築くことができます。このアプローチは、コードベースを強化するだけでなく、将来のスケーラビリティと柔軟性への道を開き、最終的にはより持続可能で効率的なソフトウェア開発プロセスにつながります。

4.Citynow Asiaはプラットフォーム開発にクリーン・アーキテクチャを採用しております

QuaOプラットフォームの構築では、さまざまなユーザー、プラットフォーム、要望という観点から、さまざまな要件に対応しました。このプロジェクトは、全体的な構造を設計する際に大きな課題となりました。テンプレート化された構造とクリーンなアーキテクチャの両方を検討した結果、私たちは後者で進めることに決めました。後者の方が時間を節約でき、将来的に無駄のないメンテナンスチームを構築できるからです。当社の量子コンピューティング・プラットフォームの詳細については、BlueqatのQuantum Talkに関する最新情報をご覧ください。

私たちのチームによる無料コンサルティングをご希望の方は、今すぐご連絡ください!

参考リンクはこちら

GlobalContact

貴社のDXの取組を全力でサポートいたします。

お気軽にご相談ください。

お電話でのお問い合わせはこちら

03-4405-3731(平日10:00~18:00)