(The) Clean Architecture と clean architecture を区別する

クリーンアーキテクチャについては、リーダブルコードとかと同じで、みんな知っておいてね的な大原則であって、別にこの方法でソフトウェアを開発すればもろもろいいことがあるよという方法論(ソフトウェアアーキテクチャ)ではない。

いろんなソフトウェアアーキテクチャがあってよくて、ただそのもう一段メタな位置付けとして、複数のソフトウェアアーキテクチャが共通して満たしているルールみたいなものがあり、それがクリーンアーキテクチャだと思っている。大原則(クリーンアーキテクチャ)とその実践例があり、実践例が独り歩きしている。

ということを考えていると、ちょうどよい記事が Twitter で流れてきた。

ボブおじさんの書いた「Clean Architecture」という本があり、その実現例として「The Clean Architecture」というブログ記事がある。そして、前者が話しているのはあくまで clean な architecture とはどういうものだろうね、という話だ。


なので、「クリーンアーキテクチャを取り入れたソフトウェアを開発」することをチームで決めたとして、それが、

  • The Clean Architecture というソフトウェアアーキテクチャ(clean な architecture の実践例のひとつで、ボブおじさんが書いたブログ記事が原典)を実践したい
  • clean な architecture を目指したい(そのために Clean Architecture というボブおじさんが書いた本に書かれていることをみんなで考えていきたい)

のどちらを指すのかの認識は揃えておかないと、いつのまにかあのドーナツを実践することになるよ(なぜならば、議論するときに一枚絵はとても強力なので)、ということなのだと思う。


それはそうとして、 Clean Architecture という本に書かれていることと、 The Clean Architecture というあのドーナツを文脈によって使い分けたい場合があると思う。

後者の「clean な architecture を目指したい」チームに於いても、実践する方法としてあの The Clean Architecture のドーナツを参考にすることはなにも問題ないからだ。なんらかの設計レビューやコードレビューを行っている際に、「これは Clean Architecture ではない」みたいな話になってしまったとき、それがどちらを指すのか分かりにくい。

なぜ分かりにくいのかと言うと、日本人には the とか a とかの概念が希薄なので、それが The Clean Architecture なのか Clean Architecture なのか区別しにくいからなのかもしれないと思っている。

なので、記述する際には

  • Clean Architecture(クリーンアーキテクチャ): 同名の本、およびその本で書かれているソフトウェアアーキテクチャの原則。
  • clean architecture: Clean Architecture という本で書かれている原則。より一般化した clean な architecture 的な意図が強い。
  • The Clean Architecture: 同名のブログ記事。Clean Architecture の実践例。

と使い分けて書くというコンテキストを共有していると良いのかな、などと最近思っている。(私はカタカナで書くとき Clean Architecture を指すことにしているが、これは人によって違うかもしれない)