0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クリーンアーキテクチャとは何ぞや #1

Last updated at Posted at 2025-08-10

何の記事?

手を動かしてわかるクリーンアーキテクチャ ヘキサゴナルアーキテクチャによるクリーンなアプリケーション開発
を読了しました。
こちらの本から学んだこと・考えたことのまとめです。

前提知識

ソフトウェアの価値とはなんぞや?

機械およびソフトウェアは、
「ワイ(人類)もっと楽できんかな~」と
何かしらの作業を代替え・効率化するために作られた道具(技術)です。

徐々に進化していき効率化に限らず、様々な価値を満たすものになりました。

(そんなソフトウェアの集大成の1つである)Copilotさんにも聞いてみると、
いくつかの価値を提示してくれます。上記の例は 自動化・効率化 に該当しますね。

価値の種類 説明
自動化・効率化 作業を減らし、時間とコストを節約する力
収益性 売上や利益を生み出すビジネス価値
社会貢献 教育・医療・環境などへのポジティブな影響
コミュニティ形成 知識共有や協働を促すつながりの力
表現手段 アートや創造活動を支えるツールとしての役割

価値といっても色とりどりですが、
ソフトウェアは 「誰かが欲していること・願いごと・やりたいこと(要求)
を満たしてなんぼ」
という点は間違いなさそうです。

機能要求と非機能要求とは?

ソフトウェアを開発するにあたって、そのソフトウェアの意義や目的を確認し、何をすべきかを整理するために 機能要求非機能要求 という考え方があります。

  • 機能要求 :システムが提供する具体的な機能や動作
  • 非機能要求:機能以外、機能の裏側にある期待値や性質

機能性質 とは何ぞや?と改めて確認するためにコトバンクの説明を抜粋します。

  • 機能:ある物が本来備えている働き、役割
  • 性質:生まれつきの気質、物の本来の特性

抽象度が高いため、電卓を例にしてみます。

  • 機能:四則演算できること
  • 非機能要求:すばやく計算結果を算出できること、入力がスムーズであること

まだ理解が浅いのですが、あるソフトウェアがあることで 「できるようになること・解決すること」機能にあたり、それ以外は非機能というざっくばらんな認識です。

私個人は、明確に分けても分けられなくてもよい、というスタンスです。
どちらにせよ要求なのは間違いない。しかし要求をより明確にする・把握する・言語化するために、2種類に分けることとわかりやすいよーという位置づけでしょうか。

(*少々脱線します)
このような機能と非機能の考え方は、他の分野にも通ずる考え方かと思います。
私が今年刺さった「書くこと」の哲学より、文章は2つの面があって ロジック:主張が読み取れる、文意が理解できるエフェクト:受けての印象や心象に影響する を紹介しています。
他の分野も含めて以下のようにまとめることもできます。

分野 ロジック(機能) エフェクト(非機能)
🏛 建築 動線設計、構造、安全性 光の入り方、素材の質感、居心地
🍽 料理 栄養バランス、調理法、味の構成 盛り付け、香り、食感、色彩
🎮 ゲーム ルール、操作性、システム、スコア判定 UIの美しさ、BGM、没入感、テンポ、世界観の演出

本題

クリーンアーキテクチャとは?

詳細は先人の記事を参考にしていただけるとわかりやすいです。
https://qiita.com/juchilian/items/d732afab315e3c7e8ba3
https://zenn.dev/muno/articles/introduce-clean-architecture

本家をたどると以下のように中心に向かう図が登場します。
「中心に重要なものを置き、内側に依存させる」 という構造を示します。
image.png

引用元:https://gist.github.com/mpppk/609d592f25cab9312654b39f1b357c60

クリーンアーキもいくつか派生と流派があります。
私が今回読んだ本では ヘキサゴナルアーキテクチャ という6角形の図を解説しています。
どうあれ中心にむかって依存させる構造は同じです。

image.png

引用元:https://dackdive.hateblo.jp/entry/2017/09/04/100000

クリーンアーキテクチャですが、
個人的には 「誰もが理解しやすい柔軟性の高いソフトウェア構造」 という認識です。

ここの柔軟性とは、仕様変更に対応できる・機能拡張しやすい・コードを変更しやすい、それらの度合いです。柔軟性の高めるためには、依存を整理する必要があり、その依存を整理しやすくするにはどうしたらいいのか?が各クリーンアーキテクチャ本には書かれています。(具体的なテクニック~マインドまで)

また、ソフトウェアは複数の人が関わり育つものであり、最終的にはコードして書くものです。クリーンはアーキテクチャ(構造)にかかっていますが、開発者≒コードを変更する人が理解し最適なコードを書けなければ、その効能は十分に発揮されません。よって、クリーン関わる人の理解のしやすさ にもかかると解釈できます。

クリーンアーキテクチャの効能

さて、そんなクリーンアーキテクチャの効能ですが 「保守容易性の維持と向上」 です。
前節では柔軟性と呼んでいました。

保守容易性 は非機能要求の1つですが、波及効果が大きく、他の特性よりも特別視してよいという考えに基づいます。結果、以下のような図にまとめることができます。

  • 長期的な開発コストの低下
    どこからどこに依存しているのおそからないコードはまさに地雷原です。その地雷原のどこは変更していいのか・変更してはいけないのか、それらの理解と判断に時間がかかること。これは即ち開発コストが増大させます。逆に理解しやすい≒クリーンアーキテクチャであれば、最初は考えることに時間がかかりますが、機能追加の開発コストを抑えることができ、長期的には安くすみます。

  • 開発者の満足度
    開発者が作業するのに負担がない・安心してできる・楽しくできるという観点です。
    これらは離職率にも寄与する点は、なかなか軽視できないです。

  • 意識決定のスピード感
    機能を実現するには様々な手段があります。開発者は、複数の手段からそれぞれの特徴を把握し、大なり小なりの設計を検討します。この時、クリーンアーキテクチャは選択肢を限定することで、開発における迷いを減らしてくれます。

次回予告

本記事はここまで。
次回からもう少し「ヘキサゴナルアーテクチャ」の詳細をまとめます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?