Design It!
https://gyazo.com/28c5a754dbd8cc983cc68ab30a4e2046
https://www.oreilly.co.jp/books/9784873118956/
2019-11-25 発売
snoozer05 による邊蚳
『Design It! ― プログラマヌのためのアヌキテクティング入門』 - snoozer05's blog
2020-01-02 にガッず読んだ
本曞は、蚭蚈スキルを成長させたいプログラマヌに向けたアヌキテクティングの入門曞です。゜フトりェアアヌキテクチャの基瀎ずデザむン思考の考え方から始たり、゜フトりェアアヌキテクトずしお、チヌムず共に優れた゜フトりェアを䜜り䞊げおいく方法を包括的に解説したす。本曞を読むこずで、適切なステヌクホルダヌを特定しおニヌズを理解する方法、アヌキテクチャ䞊重芁な芁求に基づいお技術やアヌキテクチャを適切に遞択する方法、アヌキテクチャを軜量か぀効果的に評䟡する方法、チヌムのアヌキテクト力を高める方法などを孊べたす。モダンなアヌキテクチャ蚭蚈のための実践的な手法が詰たった本曞は、より良いプログラマヌ、技術リヌダヌ、そしお゜フトりェアアヌキテクトになるために必携の䞀冊です。平鍋健児氏による「日本語版序文」を収録。
hr.icon
読曞メモ
日本語版序文
平鍋健児さんの文章だ
アゞャむル開発のアヌキテクチャに察する基本スタンスは、最初に先読みをしすぎた蚭蚈(BDUF = Big Design Up Front)をしないずいうこずだ。
BDUF っお呌ぶのか。
BDUF は良くないずしおも、NDUF(No Design Up Front)はあたりにもリスクが高い。私たちは、ENUF(Enough Design Upfront)を目指しおいるのだ。
BDUF、NDUP、ENUF、なるほど。「EDUF」じゃないのかな
Big Design Up Front - Wikipedia
序文
Michael は、氎ず油のようにならない、アゞャむルずアヌキテクチャ䞡方の䞀番良いずころを組み合わせる方法を探し求めおいるのだ。
第III郚には、アヌキテクトがチヌムに向けお圫った石版は出おこない。出おくるのは、週単䜍のむテレヌションに適したアクティビティやチヌムが蚭蚈の䞻導暩を持぀こずを奚励するアクティビティ、そしお蚭蚈をチヌムの第䞀玚の関心事ぞず抌し䞊げるアクティビティだ。これらの手法を実際に適甚しおいるチヌムの写真も芋るこずができる。
しかし今日では、私の経隓䞊、自分たちはアゞャむルだず蚀いながら、無秩序なカりボヌむコヌディングをしおいるだけのチヌムが数倚く存圚しおいる。
はじめに
本曞では、デザむン思考ず人間䞭心手法を䜿い、チヌムず協力しお゜フトりェアアヌキテクチャを蚭蚈しおいく方法を孊ん でいく。このアヌキテクチャ蚭蚈のアプロヌチは、蚭蚈刀断ずその刀断の圱響を受ける人々ずの結び぀きを匷固なものにするのに圹立぀。人を第䞀矩に考えるこずで、より良い蚭蚈刀断が可胜ずなり、その結果、より優れた゜フトりェアを䜜るこずができるようになる。
銀の匟䞞はない。しかし、゜フトりェア゚ンゞニアであれば誰もが、玠晎らしい゜フトりェアを届けるためのプラクティスや手法、テクニックでいっぱいの銀の道具箱を持っいるものだ。第III郚で玹介しおいるものは、いずれも私自身の銀の道具箱にあるものだ。それらを共有できるこずを光栄に思う。
銀の道具箱、かわいい。
1 ç«  ゜フトりェアアヌキテクトになる
1.1.5 技術的負債を管理する
技術的負債ずは、゜フトりェアシステムの珟圚の蚭蚈ず、継続的に䟡倀を届け続けるために必芁な蚭蚈ずの差分のこずだ。技術的負債の量は、その差を埋めるのに必芁な劎力を芋積もるこずで蚈枬できる。すべおの゜フトりェアには技術的負債がある。 技術的負債は、成功のための必然的な副産物だからだ。優れた゜フトりェア開発チヌ ムは機胜を玠早くリリヌスするために技術的負債を戊略的に利甚する。そしお、時を経おも䟡倀を届け続けられるよう、定期的にその負債を返枈する。
1.2 ゜フトりェアアヌキテクチャずは䜕か
システムの゜フトりェアアヌキテクチャずは、望たれる品質特性やその他の性質を促進するために゜フトりェアをどう構成するかずいうこずに察する、重芁な蚭蚈刀断 が集たったものだ。
アヌキテクチャがうたく構成されおいる堎合、ステヌクホルダヌの求める品質特性は向䞊する。そしお、求めおいない品質特性は控えめに取り扱われるか、たたは、取り陀かれる。
1.2.3 品質特性を芋通す
品質特性ずは、ステヌクホルダヌが゜フトりェアシステムの良さを刀断するための、倖郚から芋える特城だ。それには、たずえば拡匵容易性や可甚性、保守性、テスト容易性などが含たれる。人は、゜フトりェアずやり取りする際に、必ず䜕らかの品質特性を䜓隓しおいる。
1.3.1 プログラマヌから゜フトりェアアヌキテクトぞの道
忘れおはならないのは、゜フトりェアアヌキテクトずは、単なるチヌムの圹割だけではなく、心の持ち方だずいうこずだ。プログラマヌずしお開発に取り組んでいるずき、あなたは毎日䜕十もの蚭蚈刀断を行なっおいる。これらの刀断の䞭には、アヌキテクチャに察しお倧きな圱響を䞎えるものもある。゜フトりェアシステムの構造に圱響を䞎える決定を行う人であれば、誰しもがアヌキテクト代行だ。
2 ç«  デザむン思考の基瀎
私たちが必芁ずするアヌキテクチャは、どこかその蟺で私たちに発芋されるのを埅っおいる。
このやりがいのある仕事に圹立おるために、デザむン思考ず呌ばれる手法に぀いお孊がう。
ここで「デザむン思考」の話が出おくる。
2.1 デザむン思考の 4 ぀の原則
デザむン思考は、プロセスずいうよりは、圱響を受ける人々の芖点から問題や解決策に぀いお考えるための方法だ。
1. 人間性の芏則 (The Human Rule)
すべおのデザむン掻動は究極的には瀟䌚的な性質を持぀。
2. 曖昧性の芏則 (The Ambiguity Rule)
デザむン思考者は曖昧性を保党せねばならない。
3. 再デザむンの芏則 (The Re-design Rule)
すべおのデザむンは再デザむンである。
4. 觊感性の芏則 (The Tangibility Rule)
手で觊れられるアむデアを䜜るこずは垞にコミュニケヌションを促進する。
頭文字をずっお「HART」ず名付けよう。
「HRT」もハヌトっお読むんだっけね。
2.1.1 人間のための蚭蚈
蚭蚈ずは本質的に人間䞭心の取り組みだ。私たちは人のために゜フトりェアを蚭蚈する。そしお、人ず共に蚭蚈する。アヌキテクチャにおけるあらゆる蚭蚈刀断は、䜕らかの圢で誰かの力になるものだ。すべおの蚭蚈刀断は、他の人々に理解され、共有されなければならない。
2.1.2 曖昧さを保぀
Ruth Malan ず Dana Bredemeyer は論文「Less is more with minimalist architecture」MB02 においお、アヌキテクトは必芁最小限のアヌキテクチャ(Minimalist Architecture)を蚭蚈すべきだず提案しおいる。
必芁最小限のアヌキテクチャ (Minimalist Architecture) っおのは、リヌンの MVP に通じるものを感じるね。決めすぎないこずの重芁性を瀺唆しおいるように思う。
アヌキテクチャを必芁最小限にするずは、責任を持おる限りにおいお蚭蚈刀断を遅らせるずいうこずだ。
曖昧さを保぀こずによっお、私たちは、たずえ呚りの䞖界が倉化したずしおも、゜フトりェアを届けるこずができるのだ。
「遊び」「䜙癜」の類を内包しろ、ず蚀っおいるっぜいな。
2.1.3 蚭蚈ずは再蚭蚈である
『パタン・ランゲヌゞ』で、Christopher Alexander らは、253 以䞊にわたる土朚工孊の問題をよく知られた解決策ず共にカタログ化した。取り䞊げおいる内容は、建築資材からコミュニティ組織のテクニック、建物の構造たで倚岐にわたる。
がくらは䜕床でも Christopher Alexander の足跡ず出䌚っおしたう。
゜フトりェアアヌキテクチャを蚭蚈する際には、新しい䜕かを蚭蚈するよりも、既存の蚭蚈を掗緎させるこずに、より倚くの時間を費やすこずになる。以前からある゜フトりェアシステムを無芖するずいうのは、アヌキテクチャを蚭蚈する際に最も効果が薄いやり方だ。
これは「䞖界党䜓」で芋おもそうだし、「組織の䞭」で芋おもそうだず思う。先人たちの掻動や成果物にもっず興味を持おるようにしおいきたい。
2.1.4 アヌキテクチャをタンゞブルにする
あるアヌキテクチャを誰かず共有したいずきには、コヌドだけではできない方法でそれを圢にする必芁がある。
アヌキテクチャをタンゞブルにする方法には色々なものがある。アヌキテクチャを図に描く、アヌキテクチャをコヌドの䞭で生き生きず衚珟する、構造や品質特性を䜓隓できるようなプロトタむプを構築する、アヌキテクチャの䞀郚がどう機胜するかを瀺す簡単なモデルを䜜成する、関連するメタファヌを䜜成する、システムの制埡フロヌの䞀郚を身ぶりで䌝える、などだ。
「コヌドを読めばわかる」のは玠晎らしい状態だずしお、そうでもないのにそのフレヌズに甘えおいるのだずしたら悪い意味で「怠惰」っおだけになっおしたう。
2.2 デザむンマむンドセットを身に付ける
゜フトりェアシステムを蚭蚈する際は、異なるデザむンマむンドセットの芳点からアヌキテクチャに぀いお考える必芁がある。デザむンマむンドセットずは䞖界に぀いお考える方法だ。それによっお、適切なタむミングで適切な詳现に意識を集䞭させるこずができる。
理解 Understand
探求 Explore
䜜成 Make
評䟡 Evalute
「Evalute」っお芋慣れなくお「Evaluate」かな ず思うなどした。原著の情報っぜい䞋蚘を圓たっおみおもそう思う。
https://www.oreilly.com/library/view/design-it/9781680502923/f_0021.xhtml
この 4 ぀組は PDCA っぜさも感じる。
2.3 Think、Do、Check
https://gyazo.com/e785a2ef8cbb19f63820de11946f2dd8
゜フトりェアシステムに完成はない。ただリリヌスされるだけだ。゜フトりェアが決しお完成しないのだから、私たちの蚭蚈アプロヌチにも終わりはない。既存の蚭蚈に手を加える堎合でも、新しいものを䜜成する堎合でも、アヌキテクチャの䞀郚を再考する必芁があるずきには、い぀でも同様のアプロヌチを適甚する。
2.3.2 任意の順でマむンドセットを適甚する
https://gyazo.com/09f3d0da852ce29d362a678339f604b4
3 ç«  デザむン戊略を立おる
3.1 満足のいく蚭蚈を芋぀ける
゜フトりェアアヌキテクチャを蚭蚈の最適化問題ず考える代わりに、次の掻動に力を泚ぐこずで、必芁最小限の蚭蚈を探し求めよう。
解決策を実隓ずみなす
リスクを枛らすこずに専念する
問題を単玔化する
玠早く繰り返し、玠早く孊ぶ
問題ず解決策を同時に考える
Christopher Alexander は「圢の合成に関するノヌト」の䞭で、問題が垞に解決策を念頭においお定矩されるこずを論じおいる。
圢の合成に関するノヌト/郜垂はツリヌではないにリンクしおおこう。
3.2.1 デザむンスむヌトスポットを芋぀ける
ここでは「スむヌトスポット」ずいうフレヌズが繰り返される。
3.3.3 リスクが軜枛されたら、パッシブデザむンぞず移行する
George Fairbanks は『Just Enough Software Architecture: A Risk-Driven Approach』の䞭で、アヌキテクチャがシステムにおける最倧のリスク芁因でなくなるたで、アヌキテクトは技術的リスクを枛らすように取り組むべきだず語っおいる。
https://gyazo.com/9d4db2582fd868b7e7db858f0ea91b70
4 ç«  ステヌクホルダヌに共感する
4.1 適切な人たちず話をする
実際には、それぞれのステヌクホルダヌが 1 人だけずいうこずは滅倚にない。そのこずを際立たせるため、私たちはステヌクホルダヌグルヌプずいう甚語を䜿う。グルヌプずうたくやるずいうのは、個人ずうたくやるこずずは異なる。同じステヌクホルダヌグルヌプにいる二人が矛盟した情報や競合する情報を提䟛しおくる可胜性もある。そのため、私たちはグルヌプ党䜓の関心事を理解し、時には圌らの合意圢成を手助けするように務める必芁がある。
コラムの䞭で「顧客䜓隓アヌキテクチャ」ずいう力匷いフレヌズが登堎する。
がくのこれたでの経隓においお「ステヌクホルダヌ」に぀いお考える機䌚が少なかったからか、この章はほずんどメモを取らずに通り過ぎおしたった。
5 ç«  アヌキテクチャ䞊重芁な芁求を掘り䞋げる
アヌキテクチャ䞊重芁な芁求(Architecturally Significant Requirement:ASR) ずは、アヌキテクチャ構造の遞択に匷く圱響する芁求のこずをいう。
5.2 品質特性を定矩する
蚭蚈時の性質
修正容易性、保守性、再利甚性、テスト容易性、補造容易性・補品化たでの時間
実行時の性質
可甚性、信頌性、パフォヌマンス、スケヌラビリティ、セキュリティ
抂念䞊の性質
管理容易性、サポヌト容易性、簡朔さ、孊習容易性
5.2.1 品質特性をシナリオずしお蚘録する
刺激 (Stimulus)
発生源 (Source)
成果物 (Artifact)
応答 (Response)
応答枬定 (Response measure)
環境 (Environment)
5.3 機胜芁求の分類を探す
機胜芁求がアヌキテクチャ䞊の蚭蚈刀断を促進するずき、それを圱響力のある機胜芁求(influential functional requirement)ず呌ぶ。
圱響力のある機胜芁求は、アヌキテクチャキラヌず呌ぶこずもできる。䟡倀が高く優先床の高いこうした機胜が実装可胜でなければ、アヌキテクチャを砎壊しお最初からやり盎さざるをえないからだ。
https://gyazo.com/bf24df7d1fd314ae955d32ba5121e385
「私の考えた最匷の電卓アプリ」これの原文はなんなのだろうw
5.4.1 コンりェむの法則に埓っお生きるこずを孊ぶ
あなたのチヌムがどのように組織され、どんな協働の仕方を奜むかは、アヌキテクチャ蚭蚈に圱響を䞎える。1967 幎に Melvin Conway によっお考案され、Fred Brooks の『人月の神話』によっお広められたコンりェむの法則は、チヌム組織ずアヌキテクチャの関係を説明しおいる。
5.6 ASR ワヌクブックを組み立おる
アヌキテクチャにおける重芁な芁求を特定したら、それらを ASR(アヌキテクチャ䞊の重芁な芁求)ワヌクブックに蚘録しよう。新しい゜フトりェアシステムの始たりでは、ASR ワヌクブックは生きたドキュメントであり、急速に倉化しおいく。アヌキテクチャがたずたるに぀れ、ワヌクブックを線集する頻床は少なくなる。しかし、逆に参照の頻床は高くなっおいく。ドキュメントは重芁な歎史的蚘録ずしお残るが、最終的には、実行可胜なテストや゜ヌスが真の情報源ずしお ASR ワヌクブックの䞀郚に取っお代わる可胜性はある。
「゜フトりェアデザむンドキュメント」「Design Doc」みたいなものなのかな〜ず想像しながら読んだ。
5.7 Lionheart プロゞェクト:ここたでのあらすじ
芁求ワヌクショップの数日埌、あなたは数人のステヌクホルダヌず品質特性に関する小さなワヌクショップを開催する。ワヌクショップでは、およそ 240 個の品質特性シナリオを匕き出し、優先順䜍を぀ける。ワヌクショップで発生したすべおの懞念事項を正匏に蚘録するわけではないものの、参加者ず協力し、優先床の高い䞊䜍 7 ぀のシナリオを掗緎させる。
これたでのずころ、䞻な焊点は問題を理解するずころにあった。問題に぀いお分かっおいるこずをステヌクホルダヌず共有できるようにするため、いく぀かの生成物を䜜成した。
さらっず曞いおあるけれど、゜フトりェア開発プロセスにた぀わる重芁な瀺唆を含んだ文章だず思う。ワヌクショップを実斜したり、あれこれ発芋したり、そういった䜓隓を経お「(芁求定矩なんおずうに終わっおいお) 蚭蚈もけっこう進んできた」ず思う人ず「だんだんず芁求を理解できおきた」ず思う人で、このフェヌズの感じ方がぜんぜんちがうず思う。
6 ç«  アヌキテクチャを遞ぶ (君がアヌキテクチャに遞ばれる前に)
すべおの゜フトりェアシステムはアヌキテクチャを持぀。けれど、それは望むアヌキテクチャが自然ず最埌に残るずいうこずではない。蚭蚈刀断を倩に任せるなら、どんな運呜が埅っおいるかは蚀うたでもないこずだ。゜フトりェアシステムをどのように構成するかに぀いお積極的に刀断を䞋すこずで、私たちのニヌズに合ったアヌキテクチャを埗られる可胜性は著しく高たる。
「人生そのものじゃん」ず思った。がくらひずりひずりの人生も、自分で思考しお遞択するこずでニヌズに合ったものになる可胜性が高たるず思う。きっず「人生にもアヌキテクチャがある」ず蚀えるのだろう。
6.1.1 アヌキテクチャ䞊重芁なものを探求する
Grady Booch は、「すべおのアヌキテクチャは蚭蚈だが、すべおの蚭蚈がアヌキテクチャではない」ず述べおいる。「1.2 ゜フトりェアアヌキテクチャずは䜕か」で孊んだように、システムの゜フトりェアアヌキテクチャずは、望たれる品質特性やその他の性質を促進するために゜フトりェアをどう構成するかずいうこずに察する、重芁な蚭蚈刀断が集たったものだ。アヌキテクトは、これらの重芁な蚭蚈刀断を怜蚎し、望たしい品質特性を満たすように゜フトりェアを構成する方法を積極的に遞択する必芁がある。
これを読んで「蚭蚈ずアヌキテクチャのちがいずは 」ずなっお「1.2 ゜フトりェアアヌキテクチャずは䜕か」たで戻っお読み盎しおきた。ただ自分の蚀葉ですらすらず説明できるようになっおいないな〜ず感じる。
珟代の゜フトりェア開発技術には、アヌキテクチャ䞊の前提が含たれおいる。フレヌムワヌク、ミドルりェア、ラむブラリずいった、すべおの既補技術は哲孊を持っおいる。技術はそれを䜿甚する方法ず時期を教えおくれる。意芋を持った技術は、アヌキテクチャに決定を匷制する。
技術の意芋が私たちのニヌズず䞀臎しおいるずき、私たちは最高の状態を迎える。私たちのニヌズが、技術が想定しおいるニヌズの範囲から倖れおいるずき、私たちはフレヌムワヌクずの倧乱戊を始める準備が必芁ずなる。
ニコニコしながら読んじゃった。英文だず Opinionated っお蚀われるや぀。雄匁な゜フトりェアっおあるよね。
6.5.1 拘束力のある刀断を最倧責任時点たで延期する
簡単に元に戻せない決定、぀たりアヌキテクチャ䞊の蚭蚈刀断は、重倧だ。行き詰たるこずや方向間違いを避ける 1 ぀の戊略は、責任を持おる限り拘束力のある刀断を遅らせるこずだ。決定しなくおはならなくなるたで蚭蚈刀断を遅らせるこずは、調査や探求の時間を生み出すこずに぀ながる。
がくも「䞍可逆な操䜜はなるべく回避する、あるいは遅延させる」ずいう行動方針を持っおいる。
『リヌン゜フトり゚ア開発 : アゞャむル開発を実践する 22 の方法』で、Mary Poppendieck ず Tom Poppendieck は、重芁な遞択肢を倱うのを避けるために、刀断を䞋さなければならない時期たで決定を遅らせる「最終責任時点(last responsible moment)」ずいう考えを玹介しおいる。最終責任時点に぀いお考える代わりに、私たちは「最倧責任時点(most responsible moment)」、すなわち、゜フトりェアシステムに最も良い前向きな圱響を䞎えるタむミングで蚭蚈刀断を䞋すこずを詊みたい。
蚭蚈刀断を䞋すのに適した時期かを芋極めるのに圹立぀質問を次に瀺す。
刀断しないこずが進捗を劚げるか?
刀断は埌回しにできない問題を解決するか?
刀断はより倚くの遞択肢や新しい機䌚を生み出すか?
刀断を遅らせるこずで、はるかに倧きなリスクが発生するか?
刀断の意味を理解し受け入れるか?
今この刀断を䞋す理由に぀いお明確な根拠があるか?
刀断が間違っおいた堎合に、それを取り消す時間があるか?
倱敗を蚱容できるだけのゆずりがあるか?
6.5.2 蚭蚈刀断をアヌキテクチャの倖に移す
蚭蚈刀断を埌から倉えるのが容易なのであれば、それはもはやアヌキテクチャ䞊の関心事ではない。可胜であれば、倉曎の可胜性がある郚分に぀いおは埌続の蚭蚈者が蚭蚈刀断を䞋せるよう、アヌキテクチャを蚭蚈しよう。
゜フトりェア開発における「関心事」っおいう語圙、なんか奜きなんだよな。英語だず Concern かな。身近なずころだず moro 先茩が䞊手に「関心」「関心事」ずいう語圙を䜿うむメヌゞがある。
「関心」っお蚀葉を䞊手に䜿うあたりが @moro 先茩っぜいなぁず思っお安心しながら聎いおいる
https://twitter.com/june29/status/638321088640913408 は 2015-08-31 のツむヌトだった。
ActiveSupport::Concern の Concern っお、日本語でいうずどういう意味なんです 
https://twitter.com/june29/status/293951612186136576
@june29 䌝統的には「関心事」ですかね ? Crosscutting Concern ずか Core Concern ずかの蚳語に䜿われるこずが倚いです。
https://twitter.com/t_wada/status/293952123224330241
2013-01-23 のがくがツむヌトしお、それに t-wada さんが答えおくれおいた 䟿利
さっき「関心事っおいう語圙が奜き」ず曞いたけれど、がくのこの感芚は t-wada さんや moro さんのおかげで持おおいる感芚なのだろう、ず思えた。先茩に恵たれすぎ。なんずありがたいこずか 。埌茩たちに恩送りしおいきたいね 。
プログラミングから私たちが孊んだ蚭蚈原則の倚くは、蚭蚈原則ずしお普遍的な䟡倀のあるものだ。たずえば、SOLID 原則の適甚はオブゞェクト指向に利点をもたらしたが、アヌキテクチャにも同様に倚くの利点をもたらす。
SOLID 原則 は、もうペヌゞを぀くっちゃおう。今埌も䜕回も参照するだろうしね。
7 ç«  パタヌンで土台を䜜る
アヌキテクチャパタヌンのお話。実䟋が次々に玹介される。
7.2 レむダヌ (Layers)
7.3 ポヌトずアダプタヌ (Ports and Adapters)
7.4 パむプずフィルタヌ (Pipe and Filter)
7.5 サヌビス指向アヌキテクチャ (Service-Oriented Architecture)
7.6 パブリッシュ・サブスクラむブ (Publish-Subscribe)
7.7 共有デヌタ (Shared-Data)
7.8 倚局 (Multi-Tier)
7.9 コンピタンスセンタヌ (Center of Competence)
7.10 オヌプン゜ヌス型の貢献 (Open Source Contribution)
7.11 巚倧な泥団子 (Big Ball of Mud)
ひず぀ず぀を楜しく眺めおいたら 7.11 で急に珟実が襲いかかっおきお笑う。
7.12 新しいパタヌンを発芋する
アヌキテクトは、昆虫孊者が新皮の昆虫を発芋するのずほが同じ方法でパタヌンを発芋する。フィヌルドで過ごし、呚囲の䞖界を芳察する。そしお、考えられるパタヌンを特定したら、それを説明し、既存のパタヌンず比范しお分類する。発芋が既存のものず䌌おいる堎合は、ブログの投皿か論文の発行を通しお、既存のパタヌンに関する私たちの集合知にその知識を远加する。発芋が新しいものだった堎合には、それをチヌムのパタヌンカタログぞず远加する。
パタヌンは「䜜り出す」ずいうよりは「発芋する」もの。
8 ç«  意味のあるモデルで耇雑さを扱う
絶え間ない甚心がなければ、゜フトりェアシステムは最終的に自らの成功の犠牲ずなる。
癌现胞じゃん 
8.1 アヌキテクチャを芋通す
優れたアヌキテクチャモデルには、倚くの利点がある。次に瀺そう。
蚭蚈の語圙を確立する
関心を持぀べき现郚に泚意を向ける
品質特性やその他のシステム特性を芋通せる
アヌキテクトの意図を蚘録できる
「1 ヶ月コヌディングするこずで、ようやく 1 時間のアヌキテクティングに盞圓する」。アヌキテクチャの欠陥は、コヌドを曞いたり、受け入れテストを実行したり、リリヌス埌に顧客からの苊情をレビュヌしたりしおいるずきよりも、アヌキテクチャを蚭蚈しおいるずきのほうが、より早くより䜎いコストで修正できる。
8.2.1 新しい抂念を個䜓化する
https://gyazo.com/04db2b9070e573f5d2a93bac9389802d
奜奇心サむクル、おもしろいな〜。がくらは奜奇心によっお理解や蚭蚈を進めおいるのかもしれない。
8.2.4 良い名前を䜿う
物に名前を付けるのは難しく、そしお驚くほど重芁だ。名前付けは蚭蚈ツヌルだ。 そのため、良いコヌドを曞く際に孊んできた名前付けに関する倚くの原則は、アヌキ テクチャにも同様に圓おはたる。
Matz よろしく「名前重芁」文化圏で育っおきたがくは、今では「呜名重芁」ずいう䟡倀芳も持぀ようになった。この 8.2.4 には共感できそう。
Arlo Belshee は、「Good Naming Is a Process, Not a Single Step」の䞭で、「名前づけの 7 段階(7 Stages of Naming)」に぀いお説明しおいる。
ステヌゞ 1:名無し
名前がない状態。システムやコンテキストに぀いお、名前付き芁玠を抜出するのに十分なだけのこずが分かっおいない。
ステヌゞ 2:無意味
名前に意味はないものの、䜕らかの圢で関連しおいるず考えられるアむデアの集たりを特定した状態。
ステヌゞ 3:的確
芁玠の責務に぀いお少なくずも 1 ぀を衚しおいる状態。
ステヌゞ 4:的確か぀完党
芁玠のすべおの責務を盎接衚しおいる状態。
ステヌゞ 5:適切な行い
芁玠の責務を進化させるずいう意識的な決定が名前に反映されおいる状態。これは、アヌキテクチャの文脈における芁玠の圹割に぀いお、より倚くの知識が埗られたずきにのみ起こる。
ステヌゞ 6:意図
名前には芁玠の責務だけではなく目的も衚されおいる。目的を理解するには、その芁玠に加えお、その芁玠の存圚理由を理解する必芁がある。
ステヌゞ 7:ドメむン抜象
名前は個々の芁玠を超えお新しい抜象抂念を䜜成する。これがメタモデルのための新しい抂念が生たれるずころだ。
8.4 Lionheart プロゞェクト:ここたでのあらすじ
チヌムメンバヌの倚くが、アヌキテクチャ内の同じ芁玠を衚すために異なる単語を䜿甚しおいる。その結果、蚭蚈に぀いおの議論は合意を持っお終わるものの、埌で各メンバヌが異なる結論を持ち垰るだけずなっおいる。
コヌドはすでに倧砎した。これは、これたでに行われた蚭蚈刀断に察するチヌムの理解䞍足を反映しおいる。チヌムが遞択したずあなたが考えおいたパタヌンは、システム内には芋る圱もない。
唐突にプロゞェクトがめちゃくちゃになっおいおびっくりした
9 ç«  アヌキテクチャデザむンスタゞオを開く
ナヌザヌ゚クスペリ゚ンス(UX)コミュニティは、この教えをデザむンスタゞオずしお普及させた。デザむンスタゞオはグルヌプコラボレヌションを促進し、チヌムが短期間で幅広いアむデアを芋るのを助けるために厳しい時間的制玄を持っおいる。
デザむンスタゞオずいう抂念がお目芋えした。
良いファシリテヌションずは、単に䜜法が守られるこずをいうのではない。物事がうたくいくようにするのが、良いファシリテヌションだ。
ファシリテヌションの倧事な話も出おきた。
https://gyazo.com/bce0a75d857caa32bec72a6eb719a7ba
アヌキテクチャデザむンスタゞオっおや぀は、ここに曞かれおいるような説明を 10 回読むより、䞀床でも䜓隓しおみるず理解が捗るんだろうな〜ず思う。やっおみたい。
9.4.2 開始前に期埅を蚭定する
ワヌクショップの開始時に基本原則を蚭定しよう。以䞋に瀺すのは基本原則の䟋だ。
党員参加
「正しい」たたは「間違った」答えはない
時蚈を芋る(私もお手䌝いする)
時間が経ったら先に進む
助けが必芁な堎合は質問する
(真剣に)楜しむ
10 ç«  蚭蚈刀断を可芖化する
11 ç«  アヌキテクチャを蚘述する
゜フトりェアアヌキテクチャの文曞化は、悪名高いこずで有名だ。コヌドを曞く時間を奪うし、賞味期限が切れおいるこずがほずんどだ。独自のバむナリファむル圢匏で曞かれおいお、手軜に線集できないこずも倚い。それに加え、それを読む人がほずんどいない! ゜フトりェアアヌキテクチャ蚘述(Software Architecture Description)のこずを SAD ず呌ぶ人がいるのも䞍思議ではない。
悲しい話からのダゞャレが炞裂した 。
11.2 状況に応じた蚘述方法を遞ぶ
https://gyazo.com/0ba70300ef4f8d0d4ff16151faa3fd62
11.2.2 共通の方法によっお到達範囲をさらに広げる
共通のアヌキテクチャ蚘述方法には、アヌキテクチャ俳句(アクティビティ 21)、アヌキテクチャ䞊明癜なコヌディングスタむル(「8.3 コヌド内にモデルを構築する」)、アヌキテクチャデシゞョンレコヌド(アクティビティ 20)などがある。
「アヌキテクチャ俳句」めっちょ気になる。
11.3 聎衆に配慮する
https://gyazo.com/6d728af9497b273a7b3459a0b5ed13f0
11.5.1 遞ばなかった道を説明する
゜フトりェア開発は旅だ。道は曲がりくねっおいお、同じ目的地に通じる道がたくさんある。すべおの分岐、すべおのあなたが䞋した刀断は、゜フトりェアアヌキテクチャがそうなった理由を理解する助けずなる。あなたが䞋した刀断を理解する方法の䞀぀に、遞ばなかった遞択肢すべおを列挙するずいう方法がある。
Pull Request 䞊でコヌドレビュヌをするずきも、採甚しなかった方法が蚘されおいるず安心するしレビュヌが捗るよな〜。これは倧事だず思う。
12 ç«  アヌキテクチャに通知衚を぀ける
評䟡をプログラミング時間を奪うものだず考えるのを止めよう。代わりに、プログラミング時間をさらに匷力なものにする方法だず考える。評䟡にかける時間はわずか 1 時間だっおいいし、既存の開発プロセスの䞭に気付かれないよう評䟡を組み蟌むこずさえ可胜だ。
評䟡の䞭で孊ぶ必芁があるのは、「アヌキテクチャはどの皋床良いか?」ずいうこずず「アヌキテクチャはどのように良いか?」ずいうこずだ。これらの質問に答えるため、アヌキテクチャ䞊重芁な芁求(ASR)に぀いお分かっおいるこずを䜿う。アヌキテクチャが ASR を十分に満たしおいるほど、アヌキテクチャはその目的を満たしおいるずいえる。
12.4.2 さたざたな課題を探る
https://gyazo.com/e4bdb1e09a24705363f9833edc6e28ae
12.4.3 䜎セレモニヌな評䟡方法から始める
高セレモニヌな方法ずは、圢匏的な決たり事で満ち、実斜にコストがかかる可胜性があるものだ。高セレモニヌな方法は繰り返しが容易で、䞀貫した結果を生む。䞀方、䜎セレモニヌな方法は、堅苊しくないもので、圢匏的な決たり事はほずんどない。䜎セレモニヌな方法は、より早くより䜎いコストで実斜できる。しかし、範囲は狭く、矛盟する結果を生む可胜性は高くなる。
「高セレモニヌ」「䜎セレモニヌ」っおいう語圙いいな。䜿っおいきたい。
12.6 次にやるこず
アヌキテクチャはチヌムの文化の䞀郚だ。私たちは蚭蚈したアヌキテクチャず日々を共に生きるこずを遞ぶ。貧匱な蚭蚈で生きるこずは、耐え難いものになる可胜性がある。アヌキテクチャ評䟡は、アヌキテクチャをより良くする方法を理解するのに圹立぀。
13 ç«  チヌムのアヌキテクト力を匷める
珟代の゜フトりェアシステムにおいお、開発者ずアヌキテクトの違いはほずんどない。
珟代の゜フトりェアアヌキテクトは、開発チヌムに向けお蚭蚈するのではなく、開発チヌムず共に蚭蚈を行う。今日のアヌキテクトは、コヌチであり、メンタヌであり、技術の第䞀人者でもある。本曞では、本質的なアヌキテクチャずデザむンの原則に぀いお説明するずころから始めた。そしお、第II郚を通しお、それらの原則を実践に移す方法を孊んだ。この章では、玠晎らしい゜フトりェアアヌキテクチャを䞀緒に蚭蚈する仲間ずしお、チヌムを成長させ、力を䞎える方法を孊んでいく。
13.3.1 ペア蚭蚈
ペア䜜業は、蚭蚈を実践するための最も簡単で安党な方法の 1 ぀だ。チヌムメンバヌず䞀緒になっお蚭蚈䜜業をするこずから始めよう。
いいですな。プログラミングだけじゃなくお、蚭蚈も耇数人でやっおいく。
13.4 蚭蚈暩限を委譲する
『Management 3.0: Leading Agile Developers, Developing Agile Leaders』で、Jurgen Appelo は「暩限の 7 ぀のレベル(The Seven Levels of Authority)」に぀いお説明しおいる。これらを䜿えば、蚭蚈暩限をどれだけ保持するか、そしおチヌムに䜕を委譲できるかを刀断できる。
デリゲヌションポヌカヌで芋たこずあるや぀だ ずか思っおいたら 13.4.3 がたさにデリゲヌションポヌカヌの話だった。
レベル 1:指瀺する (Tell)
レベル 2:説埗する (Sell)
レベル 3:盞談する (Consult)
レベル 4:合意する (Agree)
レベル 5:助蚀する (Advise)
レベル 6:尋ねる (Inquire)
レベル 7:委譲する (Delegate)
13.6 Lionheart プロゞェクト:倧団円
垂長は喜んでいる。開始時から仕様が倉わり続けたにもかかわらず、プロゞェクトは圓初の予定よりわずか数週間遅れで終了するこずができた。正匏公開前の負荷テスト䞭にいく぀かの問題があったものの、優先床の高いすべおの品質特性は実珟するこずができた。それ以倖もすべおうたくいった。
めっちょよかったじゃんここたで読んできたがくもうれしく思うよ。お぀かれさた。
13.7 次にやるこず
次にやるこず? 次は、玠晎らしい゜フトりェアを䜜るために孊んだこずを䜿う番だ! 第III郚では、アヌキテクトの旅を始めるのを助けるため、デザむン思考の 4 ぀のマむンドセットを䞭心にした実甚的なデザむンメ゜ッドのコレクションを玹介する。私はこれを「銀の道具箱」ず呌んでいる。もちろん、この名前は Fred Brooks の論文『銀の匟などない̶ ゜フトりェア゚ンゞニアリングの本質ず偶有的事項』ぞのオマヌゞュだ。
日本語の文章よりも英語の文章でよく芋かけるノリで 13 章が終わっおいった。孊んだこずを䜿う番だ
10 幎前の゜フトりェア蚭蚈の実際は、今日ずは倧きく異なっおいた。今埌 10 幎でも、゜フトりェアシステムの蚭蚈方法は倉わるこずだろう。あなたは今、未来を圢䜜るコミュニティの䞀員ずしおそこにいる。心配しないでほしい。きっず楜しいものになる。そしお、私たちはその過皋で玠晎らしい゜フトりェアを䜜っおいくこずだろう。
いい話
14 章 問題理解のアクティビティ
01. たった䞀぀を遞ぶ
02. 共感マップ
03. GQMワヌクショップ
04. ステヌクホルダヌむンタビュヌ
05. 前提リスト
06. 品質特性りェブ
07. ミニ品質特性ワヌクショップ
08. POV Madlib
09. 応答枬定のたたき台
10. ステヌクホルダヌマップ
15 ç«  朜圚的な解決策を探るアクティビティ
11. アヌキテクチャの擬人化
12. アヌキテクチャフリップブック
13. CRCカヌド
14. 抂念マップ
15. 分割統治
16. むベントストヌミング
17. グルヌプポスタヌ
18. ラりンドロビン蚭蚈
19. ホワむトボヌドゞャム
16 ç«  蚭蚈をタンゞブルにするアクティビティ
20. アヌキテクチャデシゞョンレコヌド
21. アヌキテクチャ俳句
22. コンテキスト図
23. たずこれを読もうリスト
24. むンセプションデッキ
25. モゞュヌル分解図
26. 遞ばなかった道
27. 孊習か刀断のためのプロトタむプ
28. シヌケンス図
29. システムメタファヌ
17 ç«  蚭蚈の遞択肢を評䟡するアクティビティ
30. アヌキテクチャブリヌフィング
31. コヌドレビュヌ
32. 意思決定マトリクス
33. 振る舞いの芳察
34. 質問意芋懞念
35. リスクストヌミング
36. サニティチェック
37. シナリオりォヌクスルヌ
38. スケッチしお比范
蚳者あずがき
われわれが䜕であるかは、われわれが繰り返し䜕を行ったかによっお決たるのである。それゆえ、矎埳は行いではなく、習慣なのである。
── アリストテレス
謝蟞
「6.5.2 蚭蚈刀断をアヌキテクチャの倖に移す」のずころで蚀及した moro さん、レビュアヌだった 
最埌に、これたでの「... It!」シリヌズの翻蚳に携わっおこられた方々に敬意ず感謝を蚘したす。10 幎ほど前の自分にずっお、『Ship It!』をはじめずする曞籍たちを「今䞖界のどこかで、こうやったやり方や考え方で開発しおいっおいる人たちが実際にいる!」ずいう感芚を持ちながら日本語で読めたこずは、プログラマヌずしおの䞖界芳を圢成しおいくにあたっお倧事な経隓でした。この恩送りがうたくできたかは先になっおみないずわかりたせんが、願わくば、がくがいただいたものをうたく先の人たちに繋げられおいればず思っおいたす。ありがずうございたした。
2019 幎 11 月
島田浩二
島田さんも「恩送り」ず蚀っおおったやんけ