すでに何人かの人がクリーンアーキテクチャなんてないよ、って話はしていてイマサラだと思うんですが。
あえてブログの記事に残そうかなと思って書いてみます。
最近、改めてクリーンアーキテクチャ本を読んだり、原文を読んだり、
ここ数ヶ月ツイート色々な人のを観測したり社内で話したりしていて
考えがまとまってきたので、自分の言葉で整理してみたくなった。
「へー、クリーンアーキテクチャっていうソフトウェアアーキテクチャがあるんだー」という微妙な誤解?をちょっとでも減らす一助になればという感じです。あと、本の読み進め方のヒントにもなるかも
先に結論
クリーンアーキテクチャというのはアンクルボブの書いた本。 ソフトウェアアーキテクチャのことではない。 the クリーンアーキテクチャというブログ記事はただのソフトウェアアーキテクチャの例(そして本の一部分)だが、独り歩きしている
クリーンアーキテクチャというソフトウェアアーキテクチャは無い
「クリーンアーキテクチャ」なんてソフトウェアアーキテクチャはない。 「クリーン」な「設計(アーキテクチャ)」とはこんなんだよ、というのをアンクルボブが言っているだけ。 アンクルボブによる、クリーンアーキテクチャという本とthe クリーンアーキテクチャという題のブログ記事と図がある。 そこがややこしい。
アンクルボブの言う「クリーン」とは
そもそもクリーンって何?をアンクルボブに直接聞いてる動画があるのでそれを見るのが良い↓
クリーンという言葉はある種アンクルボブの代名詞になっている。クリーンコードとかクリーンコーダーとかクリーンアジャイルとかって本を出すくらいには。
なので、クリーン = クールなアンクルボブ、ぐらいに置き換えてみるのが良い。
そうすると、例のやつは the クールなアンクルボブアーキテクチャという図であり、ブログ記事なのだと思う。 「僕の考えたさいきょうのアーキテクチャ」ぐらいのイメージ。
クリーンアーキテクチャが提唱された?
だけど、日本に限らず他の国でもアンクルボブがクリーンアーキテクチャという新しいソフトウェアアーキテクチャを提唱した、みたいなことになっているらしい。
サンプルコードも探せばたくさんある。
(僕としては、「またクリーンって言ってるのかよ」ぐらいの話だったのになんでこうなった?みたいな感じはある)
the クールなアンクルボブアーキテクチャを提唱したと言われれば確かにそうかもしれない。そう考えると、別に完全な間違いというわけでもない。
でもアレは説明のためのただの例に過ぎないんじゃないか、というのが自分の解釈。
>the 「クリーン」アーキテクチャとは
あえて言及すると、例の一枚絵とその文章は:
・今までのソフトウェアアーキテクチャ色々出てきたよね、でも結局共通してる大事なのはここだよね
・試しに1つの図に統合してみたよ
・円は概要(schematic)で書いたもの。円の要素は4つ以上あっても良いしルールもない
・ただし、依存の方向は一方で、外側ほど具体的な詳細、内側ほど抽象的というのは変わらない
(あえて言うなら、例示されていたScreaming Architectureの方が僕は好き。Clean Architectureの本にも登場する)
>ネーミングどうなの
提唱するならもうちょっとちゃんとした名前にするんじゃないかな…? 僕がヤンクアーキテクチャと言ってるのとそんな変わらんと思うのだが、この感覚伝わるだろうか(yy_yankはこのブログ筆者のハンドルネーム)。
>提唱するってなに
XXアーキテクチャという言葉と図を偉い人がセットで提示するというのは 「提唱された」というぐらいにインパクトがあることらしい(マーティンファウラーにしろ、大体そうといえばそう)。 提唱した、というほど大仰か?というところではあるのだけど、知見を世の中に広めているというところの貢献度は高い。
「クリーンアーキテクチャを実践する」とは?
クリーンアーキテクチャを実践する、というのがアンクルボブの一枚絵を試してみるという意味で使われる場合がある。 しかしそれだと、一例を模倣したにすぎない。なぜなら、本の一部でしかないから(22章)。
厳密には、クリーンアーキテクチャという本の中身全体を実践していく姿勢が「クリーンなアーキテクチャ」の実現であり、それこそ「クリーンアーキテクチャを実践する」ということだと個人的には思う。 (そんなのクリーンアーキテクチャじゃない論争は不毛なので部分的に実践することを批判するわけではないのであしからず)
「クリーンアーキテクチャを実践する」というのは、ソフトウェアアーキテクチャの構造そのものというよりもっと広いものなんだと思う。 クリーンコードとかクリーンコーダーとか、他のクリーンシリーズを読んだりするとそこの立ち位置が分かるはず。 クリーンコードとかは模倣しよう、みたいなのは見ないのに、アーキテクチャになった途端模倣する人たちが増える気がしていて、なんだか不思議。
”Cleanシリーズ”というコンテキストをきちんと語り継がなかった日本語圏の受容のされ方の問題でもありそう(あの頃、Scott Amblerがオブジェクトの広場のインタビューで”我々の業界は物忘れが激しい”的なことを言っていたのを”そうだよな〜”と他人事のように読んでいたことを思い出す) https://t.co/V2Gfk5hT6o
— Kakutani Shintaro (@kakutani) April 28, 2021
"Clean シリーズ" = ボブおじさんこと Robert C. Martin の一連の著作のこと
— Takuto Wada (@t_wada) April 28, 2021
『Clean Code』
『Clean Coder』
『Clean Architecture』
『Clean Agile』 https://t.co/RfLXFoaBm6
the クリーンアーキテクチャの一枚絵をソフトウェアアーキテクチャとみなしても良いじゃん
ここまで書くと、
「定義とか細かいことは良いんだよ、俺はあの図をやりたいんだよ」という人も居ると思う。それはそれで分かる。
自分もそれで開発が上手くいくんなら良いと思ってるが、前述した内容の通り違和感がある。
唯一、危惧するのはthe クリーンアーキテクチャの一枚絵を達成していくのが開発の目的にすり替わらないかという点。 本ではそういったアーキテクチャを使わない方が良い場合なども言及してあったので(たしか)、一部分だけ見ずに全体把握した方が色々良いのではないかなという感じがある。
そういう、ソフトウェア開発の設計(アーキテクチャ)全体を本では取り扱ってるから一枚絵に執着せずに本を万遍なく読んで学ぶのが良いと思っている。 しかし、あの一枚絵ばかりが注目されているのが現実なのだと思う。
大事なこと
つらつらと書いたが、クリーンアーキテクチャについて、重要とされるのは以下のみではないだろうか
- 本を読んで大事なところを自分なりに理解して行動してみよう(どの本でも大事)
- the クリーンアーキテクチャの一枚絵にこだわりすぎないようにしよう(ただの例として捉える)
- DIPをやろう
- 依存の方向は一方向にしよう
これら重要な点は、もしかすると中身がレイヤードアーキテクチャになってもオニオンになってもヘキサゴナルになっても変わらないかもしれない。 (というか、いっぱいソフトウェアアーキテクチャってあるやん?でも大事な点はこれらだよというのがあのブログ記事の主旨であり、クリーンアーキテクチャ本で言うところの22章である)
以下、独断と偏見で選んだツイート
自分も何も知らずに読んでたらこういう感想になったと思うクリーンアーキテクチャ読み終わった。
— Matsuzaki (@matsumana) June 26, 2021
クリーンアーキテクチャに関係しそうなのは22〜25章だけ。34章はレイヤードアーキテクチャ。それ以外の章はあんまり関係ない事が薄く書かれているという印象。。。
結局、クリーンアーキテクチャとは何なのかわからない。。。
以下の3ツイートはクリーンアーキテクチャや、図の独り歩きなどについて
クリーン・アーキテクチャという形式的なアーキテクチャパターンがあるわけではなくクリーンなアーキテクチャを実現する原則や観点をまとめたものが「クリーン・アーキテクチャ」。ボブおじさんが例示したHowを無根拠になぞることがクリーン・アーキテクチャではない、という理解でいいと思う
— かとじゅん (@j5ik2o) April 28, 2021
『Clean Architecture』を学ぶ人に伝えたいのは、あの「ドーナツ状の図」をまずは忘れようということですね。アーキテクチャの一例にすぎない同心円状の図が独り歩きしてしまっているし、本の中にはもっと大事なことがたくさん書いてあります。https://t.co/4SyMIUJCLa
— Takuto Wada (@t_wada) August 4, 2020
私はクリーンアーキテクチャについては、
— t_yano (@t_yano) April 28, 2021
・ビジネスロジックおよびドメインと、それ以外の詳細(特にIO)をシステムにおいて明確に分割しろ
・それらの依存関係を一方通行にしろ
以上のことは言ってないと思ってて、本でもそのことは繰り返し語ってると思ってるんよね。 https://t.co/O5cgsfQs34
クリーンアーキテクチャの本質はマジでこれだと思う
誰あろう俺様ことアンクルボブ、貴様らがおしめをしていた頃からコードを書いてきたこのワシが!! 我が経験と思索、その哲学を伝えてやるぞ〜!!! ガハハ!!!
— Kakutani Shintaro (@kakutani) April 28, 2021
勇気を振り絞って「Cleanとは何か」は言質を取った!(kenjiが日本のみんなに伝わるように字幕をつけてくれてる!!べんり!) https://t.co/CMZwvUcRKW
— Kakutani Shintaro (@kakutani) April 28, 2021
Clean-Architecture-達人に学ぶソフトウェアの構造と設計-Robert-C-Martin
0 件のコメント:
コメントを投稿