何の記事?
『手を動かしてわかるクリーンアーキテクチャ ヘキサゴナルアーキテクチャによるクリーンなアプリケーション開発』
を読了しました。
こちらの本から学んだこと・考えたことのまとめです。
前提知識
ソフトウェアの価値とはなんぞや?
機械およびソフトウェアは、
「ワイ(人類)もっと楽できんかな~」と
何かしらの作業を代替え・効率化するために作られた道具(技術)です。
徐々に進化していき効率化に限らず、様々な価値を満たすものになりました。
(そんなソフトウェアの集大成の1つである)Copilotさんにも聞いてみると、
いくつかの価値を提示してくれます。上記の例は 自動化・効率化
に該当しますね。
価値の種類 | 説明 |
---|---|
自動化・効率化 | 作業を減らし、時間とコストを節約する力 |
収益性 | 売上や利益を生み出すビジネス価値 |
社会貢献 | 教育・医療・環境などへのポジティブな影響 |
コミュニティ形成 | 知識共有や協働を促すつながりの力 |
表現手段 | アートや創造活動を支えるツールとしての役割 |
価値といっても色とりどりですが、
ソフトウェアは 「誰かが欲していること・願いごと・やりたいこと(要求)
を満たしてなんぼ」 という点は間違いなさそうです。
機能要求と非機能要求とは?
ソフトウェアを開発するにあたって、そのソフトウェアの意義や目的を確認し、何をすべきかを整理するために 機能要求
と 非機能要求
という考え方があります。
-
機能要求
:システムが提供する具体的な機能や動作 -
非機能要求
:機能以外、機能の裏側にある期待値や性質
機能
や 性質
とは何ぞや?と改めて確認するためにコトバンクの説明を抜粋します。
-
機能
:ある物が本来備えている働き、役割 -
性質
:生まれつきの気質、物の本来の特性
抽象度が高いため、電卓を例にしてみます。
-
機能
:四則演算できること -
非機能要求
:すばやく計算結果を算出できること、入力がスムーズであること
まだ理解が浅いのですが、あるソフトウェアがあることで 「できるようになること・解決すること」 が機能
にあたり、それ以外は非機能
というざっくばらんな認識です。
私個人は、明確に分けても分けられなくてもよい、というスタンスです。
どちらにせよ要求なのは間違いない。しかし要求をより明確にする・把握する・言語化するために、2種類に分けることとわかりやすいよーという位置づけでしょうか。
(*少々脱線します)
このような機能と非機能の考え方は、他の分野にも通ずる考え方かと思います。
私が今年刺さった「書くこと」の哲学より、文章は2つの面があって ロジック:主張が読み取れる、文意が理解できる
と エフェクト:受けての印象や心象に影響する
を紹介しています。
他の分野も含めて以下のようにまとめることもできます。
分野 | ロジック(機能) | エフェクト(非機能) |
---|---|---|
🏛 建築 | 動線設計、構造、安全性 | 光の入り方、素材の質感、居心地 |
🍽 料理 | 栄養バランス、調理法、味の構成 | 盛り付け、香り、食感、色彩 |
🎮 ゲーム | ルール、操作性、システム、スコア判定 | UIの美しさ、BGM、没入感、テンポ、世界観の演出 |
本題
クリーンアーキテクチャとは?
詳細は先人の記事を参考にしていただけるとわかりやすいです。
https://qiita.com/juchilian/items/d732afab315e3c7e8ba3
https://zenn.dev/muno/articles/introduce-clean-architecture
本家をたどると以下のように中心に向かう図が登場します。
「中心に重要なものを置き、内側に依存させる」 という構造を示します。
引用元:https://gist.github.com/mpppk/609d592f25cab9312654b39f1b357c60
クリーンアーキもいくつか派生と流派があります。
私が今回読んだ本では ヘキサゴナルアーキテクチャ という6角形の図を解説しています。
どうあれ中心にむかって依存させる構造は同じです。
クリーンアーキテクチャですが、
個人的には 「誰もが理解しやすい柔軟性の高いソフトウェア構造」 という認識です。
ここの柔軟性
とは、仕様変更に対応できる・機能拡張しやすい・コードを変更しやすい、それらの度合いです。柔軟性の高めるためには、依存
を整理する必要があり、その依存を整理しやすくするにはどうしたらいいのか?が各クリーンアーキテクチャ本には書かれています。(具体的なテクニック~マインドまで)
また、ソフトウェアは複数の人が関わり育つものであり、最終的にはコードして書くものです。クリーン
はアーキテクチャ(構造)にかかっていますが、開発者≒コードを変更する人が理解し最適なコードを書けなければ、その効能は十分に発揮されません。よって、クリーン
は 関わる人の理解のしやすさ にもかかると解釈できます。
クリーンアーキテクチャの効能
さて、そんなクリーンアーキテクチャの効能ですが 「保守容易性の維持と向上」 です。
前節では柔軟性
と呼んでいました。
保守容易性 は非機能要求の1つですが、波及効果が大きく、他の特性よりも特別視してよいという考えに基づいます。結果、以下のような図にまとめることができます。
-
長期的な開発コストの低下
どこからどこに依存しているのおそからないコードはまさに地雷原です。その地雷原のどこは変更していいのか・変更してはいけないのか、それらの理解と判断に時間がかかること。これは即ち開発コストが増大させます。逆に理解しやすい≒クリーンアーキテクチャであれば、最初は考えることに時間がかかりますが、機能追加の開発コストを抑えることができ、長期的には安くすみます。 -
開発者の満足度
開発者が作業するのに負担がない・安心してできる・楽しくできるという観点です。
これらは離職率にも寄与する点は、なかなか軽視できないです。 -
意識決定のスピード感
機能を実現するには様々な手段があります。開発者は、複数の手段からそれぞれの特徴を把握し、大なり小なりの設計を検討します。この時、クリーンアーキテクチャは選択肢を限定することで、開発における迷いを減らしてくれます。
次回予告
本記事はここまで。
次回からもう少し「ヘキサゴナルアーテクチャ」の詳細をまとめます。