2021/06/29 このエントリーをはてなブックマークに追加 はてなブックマーク - クリーンアーキテクチャなんてものはない(クリーンアーキテクチャーの読み方)

クリーンアーキテクチャなんてものはない(クリーンアーキテクチャーの読み方)

カテゴリ: ,


すでに何人かの人がクリーンアーキテクチャなんてないよ、って話はしていてイマサラだと思うんですが。
あえてブログの記事に残そうかなと思って書いてみます。

最近、改めてクリーンアーキテクチャ本を読んだり、原文を読んだり、
ここ数ヶ月ツイート色々な人のを観測したり社内で話したりしていて
考えがまとまってきたので、自分の言葉で整理してみたくなった。

「へー、クリーンアーキテクチャっていうソフトウェアアーキテクチャがあるんだー」という微妙な誤解?をちょっとでも減らす一助になればという感じです。あと、本の読み進め方のヒントにもなるかも


クリーンアーキテクチャというのはアンクルボブの書いた本。 ソフトウェアアーキテクチャのことではない。 the クリーンアーキテクチャというブログ記事はただのソフトウェアアーキテクチャの例(そして本の一部分)だが、独り歩きしている

「クリーンアーキテクチャ」なんてソフトウェアアーキテクチャはない。 「クリーン」な「設計(アーキテクチャ)」とはこんなんだよ、というのをアンクルボブが言っているだけ。 アンクルボブによる、クリーンアーキテクチャという本とthe クリーンアーキテクチャという題のブログ記事と図がある。 そこがややこしい。

そもそもクリーンって何?をアンクルボブに直接聞いてる動画があるのでそれを見るのが良い↓

https://youtu.be/n5VpIr0MnuU

クリーンという言葉はある種アンクルボブの代名詞になっている。クリーンコードとかクリーンコーダーとかクリーンアジャイルとかって本を出すくらいには。

なので、クリーン = クールなアンクルボブ、ぐらいに置き換えてみるのが良い。

そうすると、例のやつは the クールなアンクルボブアーキテクチャという図であり、ブログ記事なのだと思う。 「僕の考えたさいきょうのアーキテクチャ」ぐらいのイメージ。

だけど、日本に限らず他の国でもアンクルボブがクリーンアーキテクチャという新しいソフトウェアアーキテクチャを提唱した、みたいなことになっているらしい。
サンプルコードも探せばたくさんある。
(僕としては、「またクリーンって言ってるのかよ」ぐらいの話だったのになんでこうなった?みたいな感じはある)

the クールなアンクルボブアーキテクチャを提唱したと言われれば確かにそうかもしれない。そう考えると、別に完全な間違いというわけでもない。

でもアレは説明のためのただの例に過ぎないんじゃないか、というのが自分の解釈。

>the 「クリーン」アーキテクチャとは

あえて言及すると、例の一枚絵とその文章は:
・今までのソフトウェアアーキテクチャ色々出てきたよね、でも結局共通してる大事なのはここだよね ・試しに1つの図に統合してみたよ ・円は概要(schematic)で書いたもの。円の要素は4つ以上あっても良いしルールもない ・ただし、依存の方向は一方で、外側ほど具体的な詳細、内側ほど抽象的というのは変わらない (あえて言うなら、例示されていたScreaming Architectureの方が僕は好き。Clean Architectureの本にも登場する)

>ネーミングどうなの

提唱するならもうちょっとちゃんとした名前にするんじゃないかな…? 僕がヤンクアーキテクチャと言ってるのとそんな変わらんと思うのだが、この感覚伝わるだろうか(yy_yankはこのブログ筆者のハンドルネーム)。

>提唱するってなに

XXアーキテクチャという言葉と図を偉い人がセットで提示するというのは 「提唱された」というぐらいにインパクトがあることらしい(マーティンファウラーにしろ、大体そうといえばそう)。 提唱した、というほど大仰か?というところではあるのだけど、知見を世の中に広めているというところの貢献度は高い。

クリーンアーキテクチャを実践する、というのがアンクルボブの一枚絵を試してみるという意味で使われる場合がある。 しかしそれだと、一例を模倣したにすぎない。なぜなら、本の一部でしかないから(22章)。

厳密には、クリーンアーキテクチャという本の中身全体を実践していく姿勢が「クリーンなアーキテクチャ」の実現であり、それこそ「クリーンアーキテクチャを実践する」ということだと個人的には思う。 (そんなのクリーンアーキテクチャじゃない論争は不毛なので部分的に実践することを批判するわけではないのであしからず)

「クリーンアーキテクチャを実践する」というのは、ソフトウェアアーキテクチャの構造そのものというよりもっと広いものなんだと思う。 クリーンコードとかクリーンコーダーとか、他のクリーンシリーズを読んだりするとそこの立ち位置が分かるはず。 クリーンコードとかは模倣しよう、みたいなのは見ないのに、アーキテクチャになった途端模倣する人たちが増える気がしていて、なんだか不思議。




ここまで書くと、
「定義とか細かいことは良いんだよ、俺はあの図をやりたいんだよ」という人も居ると思う。それはそれで分かる。 自分もそれで開発が上手くいくんなら良いと思ってるが、前述した内容の通り違和感がある。

唯一、危惧するのはthe クリーンアーキテクチャの一枚絵を達成していくのが開発の目的にすり替わらないかという点。 本ではそういったアーキテクチャを使わない方が良い場合なども言及してあったので(たしか)、一部分だけ見ずに全体把握した方が色々良いのではないかなという感じがある。

そういう、ソフトウェア開発の設計(アーキテクチャ)全体を本では取り扱ってるから一枚絵に執着せずに本を万遍なく読んで学ぶのが良いと思っている。 しかし、あの一枚絵ばかりが注目されているのが現実なのだと思う。

つらつらと書いたが、クリーンアーキテクチャについて、重要とされるのは以下のみではないだろうか

  • 本を読んで大事なところを自分なりに理解して行動してみよう(どの本でも大事)
  • the クリーンアーキテクチャの一枚絵にこだわりすぎないようにしよう(ただの例として捉える)
  • DIPをやろう
  • 依存の方向は一方向にしよう

これら重要な点は、もしかすると中身がレイヤードアーキテクチャになってもオニオンになってもヘキサゴナルになっても変わらないかもしれない。 (というか、いっぱいソフトウェアアーキテクチャってあるやん?でも大事な点はこれらだよというのがあのブログ記事の主旨であり、クリーンアーキテクチャ本で言うところの22章である)



自分も何も知らずに読んでたらこういう感想になったと思う


以下の3ツイートはクリーンアーキテクチャや、図の独り歩きなどについて








Clean-Architecture-達人に学ぶソフトウェアの構造と設計-Robert-C-Martin

0 件のコメント:

コメントを投稿

GA