<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>判断から始めるソフトウェア設計 on 設計で、迷わなくなるために | 奥田智紘</title><link>https://design.okuda-studio.com/books/002-design-starts-with-decisions/</link><description>Recent content in 判断から始めるソフトウェア設計 on 設計で、迷わなくなるために | 奥田智紘</description><generator>Hugo -- 0.159.2</generator><language>ja</language><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://design.okuda-studio.com/books/002-design-starts-with-decisions/index.xml" rel="self" type="application/rss+xml"/><item><title>第1章：設計ができないのではなく、判断が残っていないだけ</title><link>https://design.okuda-studio.com/books/002-design-starts-with-decisions/01-there-is-no-judgment-left/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://design.okuda-studio.com/books/002-design-starts-with-decisions/01-there-is-no-judgment-left/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%A8%AD%E8%A8%88%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E5%88%A4%E6%96%AD%E3%81%8C%E6%AE%8B%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%A0%E3%81%91"&gt;設計ができないのではなく、判断が残っていないだけ&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%A8%AD%E8%A8%88%E3%81%8C%E5%A3%8A%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%84%E3%81%A4%E3%81%8B"&gt;設計が壊れるのは、いつか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%89%AF%E3%81%84%E8%A8%AD%E8%A8%88%E8%80%85%E3%81%AF%E3%81%86%E3%81%BE%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%84%E3%82%8B%E3%81%A8%E3%81%AF%E9%99%90%E3%82%89%E3%81%AA%E3%81%84"&gt;良い設計者は、うまいコードを書いているとは限らない&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%83%A2%E3%83%8E%E3%83%AA%E3%82%B9%E3%81%AF%E5%95%8F%E9%A1%8C%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84"&gt;モノリスは、問題そのものではない&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%A7%8B%E9%80%A0%E3%82%88%E3%82%8A%E5%85%88%E3%81%AB%E5%88%A4%E6%96%AD%E3%81%8C%E3%81%82%E3%82%8B"&gt;構造より先に、判断がある&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%86%8D%E7%8F%BE%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%AF%E6%8A%80%E8%A1%93%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84"&gt;再現できなかったのは、技術ではない&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%93%E3%81%AE%E6%9C%AC%E3%81%8C%E6%89%B1%E3%81%86%E3%81%AE%E3%81%AF%E6%AD%A3%E8%A7%A3%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84"&gt;この本が扱うのは「正解」ではない&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%A8%AD%E8%A8%88%E3%81%A8%E3%81%AF%E6%9C%AA%E6%9D%A5%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E5%88%A4%E6%96%AD%E3%81%A7%E3%81%82%E3%82%8B"&gt;設計とは、未来に対する判断である&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="設計ができないのではなく判断が残っていないだけ"&gt;設計ができないのではなく、判断が残っていないだけ&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;多くの現場では、&lt;br&gt;
「設計が弱い」「設計ができていない」&lt;br&gt;
という言葉が使われます。&lt;/p&gt;
&lt;p&gt;コードが複雑になっている。&lt;br&gt;
変更に弱い。&lt;br&gt;
触るのが怖い。&lt;/p&gt;
&lt;p&gt;そうした状態をまとめて、&lt;br&gt;
「設計の問題」と呼ぶことは珍しくありません。&lt;/p&gt;
&lt;p&gt;ただし本書では、&lt;br&gt;
この捉え方を少しだけ変えます。&lt;/p&gt;
&lt;p&gt;多くの場合、&lt;br&gt;
問題は設計そのものではありません。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;判断が、残っていないのです。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="設計が壊れるのはいつか"&gt;設計が壊れるのは、いつか&lt;/h3&gt;
&lt;p&gt;設計が壊れる瞬間は、&lt;br&gt;
突然訪れるわけではありません。&lt;/p&gt;
&lt;p&gt;ある日いきなり破綻するのではなく、&lt;br&gt;
小さな判断が、少しずつ積み重なった結果として現れます。&lt;/p&gt;
&lt;p&gt;たとえば、&lt;/p&gt;
&lt;p&gt;とりあえず今はこれでいい。&lt;br&gt;
前からこうなっている。&lt;br&gt;
あとで直せばいい。&lt;br&gt;
ここまで影響しないと思った。&lt;/p&gt;
&lt;p&gt;こうした判断自体が、&lt;br&gt;
必ずしも間違っているわけではありません。&lt;/p&gt;
&lt;p&gt;問題は、&lt;br&gt;
その判断がどんな前提で行われたのかが、&lt;br&gt;
コードにも、ドキュメントにも、&lt;br&gt;
残っていないことです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;設計が壊れるのは、判断の理由が失われたときです。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="良い設計者はうまいコードを書いているとは限らない"&gt;良い設計者は、うまいコードを書いているとは限らない&lt;/h3&gt;
&lt;p&gt;設計ができる人、という言葉から、&lt;br&gt;
次のような人物像を思い浮かべる人も多いかもしれません。&lt;/p&gt;
&lt;p&gt;抽象化がうまい人。&lt;br&gt;
新しいアーキテクチャに詳しい人。&lt;br&gt;
きれいなコードを書ける人。&lt;/p&gt;
&lt;p&gt;しかし本書では、&lt;br&gt;
それを設計者の条件だとは考えません。&lt;/p&gt;
&lt;p&gt;良い設計者とは、&lt;br&gt;
&lt;strong&gt;判断を説明できる人&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;なぜこの構造にしたのか。&lt;br&gt;
なぜ今はやらなかったのか。&lt;br&gt;
なぜ将来の変更を見送ったのか。&lt;/p&gt;
&lt;p&gt;それらを、&lt;br&gt;
感覚や雰囲気ではなく、&lt;br&gt;
後付けの理由でもなく、&lt;br&gt;
当時の制約と目的を使って説明できること。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;設計とは、構造ではなく、説明可能な判断です。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="モノリスは問題そのものではない"&gt;モノリスは、問題そのものではない&lt;/h3&gt;
&lt;p&gt;モノリスは、&lt;br&gt;
しばしば問題視されます。&lt;/p&gt;
&lt;p&gt;ただし本書では、&lt;br&gt;
モノリスを悪者にはしません。&lt;/p&gt;
&lt;p&gt;モノリスとは、&lt;br&gt;
&lt;strong&gt;過去の判断が積み重なった結果&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;問題になるのは、&lt;/p&gt;
&lt;p&gt;その判断が今も有効なのか分からない。&lt;br&gt;
なぜそうなったのか説明できない。&lt;br&gt;
変えようとしても、判断材料が残っていない。&lt;/p&gt;
&lt;p&gt;こうした状態に陥っていることです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;問題は構造ではなく、判断の履歴が失われていることです。&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>第2章：判断は、どこに散らばっていくのか</title><link>https://design.okuda-studio.com/books/002-design-starts-with-decisions/02-where-does-judgment-fall/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://design.okuda-studio.com/books/002-design-starts-with-decisions/02-where-does-judgment-fall/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%AF%E3%81%A9%E3%81%93%E3%81%AB%E6%95%A3%E3%82%89%E3%81%B0%E3%81%A3%E3%81%A6%E3%81%84%E3%81%8F%E3%81%AE%E3%81%8B"&gt;判断は、どこに散らばっていくのか&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%AF%E3%81%84%E3%81%A4%E3%82%82%E4%B8%80%E3%81%8B%E6%89%80%E3%81%AB%E6%9B%B8%E3%81%8B%E3%82%8C%E3%82%8B%E3%82%8F%E3%81%91%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84"&gt;判断は、いつも一か所に書かれるわけではない&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90%E3%81%AF%E5%88%A4%E6%96%AD%E3%81%AE%E5%8C%96%E7%9F%B3%E3%81%A7%E3%81%82%E3%82%8B"&gt;条件分岐は、判断の化石である&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%81%8C%E6%B6%88%E3%81%88%E3%81%9F%E3%81%A8%E3%81%8D%E5%88%A4%E6%96%AD%E3%82%82%E6%B6%88%E3%81%88%E3%82%8B"&gt;コメントが消えたとき、判断も消える&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%A8%AD%E8%A8%88%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%8C%E8%AA%AD%E3%81%BE%E3%82%8C%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8B%E7%90%86%E7%94%B1"&gt;設計ドキュメントが読まれなくなる理由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%AF%E4%BA%BA%E3%81%AE%E9%A0%AD%E3%81%AE%E4%B8%AD%E3%81%AB%E9%9B%86%E7%B4%84%E3%81%95%E3%82%8C%E3%82%8B"&gt;判断は、人の頭の中に集約される&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%B1%9E%E4%BA%BA%E5%8C%96%E3%81%A8%E3%81%AF%E5%88%A4%E6%96%AD%E3%81%8C%E5%85%B1%E6%9C%89%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E7%8A%B6%E6%85%8B%E3%81%A7%E3%81%82%E3%82%8B"&gt;属人化とは、判断が共有されていない状態である&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%AF%E3%81%AA%E3%81%9C%E6%95%A3%E3%82%89%E3%81%B0%E3%82%8B%E3%81%AE%E3%81%8B"&gt;判断は、なぜ散らばるのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%93%E3%81%AE%E7%AB%A0%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81"&gt;この章のまとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="判断はどこに散らばっていくのか"&gt;判断は、どこに散らばっていくのか&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;設計が壊れる原因は、&lt;br&gt;
判断が間違っていたからではありません。&lt;/p&gt;
&lt;p&gt;多くの場合、&lt;br&gt;
&lt;strong&gt;判断が散らばり、追えなくなったこと&lt;/strong&gt;が原因です。&lt;/p&gt;
&lt;p&gt;この章では、&lt;br&gt;
判断がどのようにコードベースの中に散在し、&lt;br&gt;
やがて誰にも把握できなくなっていくのかを見ていきます。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="判断はいつも一か所に書かれるわけではない"&gt;判断は、いつも一か所に書かれるわけではない&lt;/h3&gt;
&lt;p&gt;一つの機能を実装するとき、&lt;br&gt;
判断は一回で終わるわけではありません。&lt;/p&gt;
&lt;p&gt;画面の責務をどう分けるか。&lt;br&gt;
どこでデータを加工するか。&lt;br&gt;
例外はどこで握りつぶすか。&lt;br&gt;
将来増えそうな仕様を考慮するか。&lt;/p&gt;
&lt;p&gt;これらは、&lt;br&gt;
実装のあちこちで、少しずつ行われます。&lt;/p&gt;
&lt;p&gt;しかもその多くは、&lt;br&gt;
「判断した」という自覚すらないまま下されています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;判断は、気づかないうちに行われます。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="条件分岐は判断の化石である"&gt;条件分岐は、判断の化石である&lt;/h3&gt;
&lt;p&gt;コードの中で、&lt;br&gt;
もっとも分かりやすい判断の痕跡は、条件分岐です。&lt;/p&gt;
&lt;p&gt;if。&lt;br&gt;
when。&lt;br&gt;
早期 return。&lt;/p&gt;
&lt;p&gt;それらはすべて、&lt;br&gt;
「どちらを選ぶか」という判断の結果です。&lt;/p&gt;
&lt;p&gt;なぜこの条件が存在するのか。&lt;br&gt;
なぜこの分岐は統合されていないのか。&lt;br&gt;
なぜここで例外にしているのか。&lt;/p&gt;
&lt;p&gt;理由が分かるうちは、&lt;br&gt;
その判断は生きています。&lt;/p&gt;
&lt;p&gt;しかし理由が分からなくなった瞬間、&lt;br&gt;
それは &lt;strong&gt;判断の化石&lt;/strong&gt; になります。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="コメントが消えたとき判断も消える"&gt;コメントが消えたとき、判断も消える&lt;/h3&gt;
&lt;p&gt;判断を残す方法として、&lt;br&gt;
コメントを書く人も多いでしょう。&lt;/p&gt;
&lt;p&gt;しかしコメントは、&lt;br&gt;
とても壊れやすい存在です。&lt;/p&gt;
&lt;p&gt;リファクタリングで消される。&lt;br&gt;
意味が古くなる。&lt;br&gt;
「コードを見れば分かる」と判断されて削除される。&lt;/p&gt;
&lt;p&gt;そしてコメントが消えると、&lt;br&gt;
判断の前提も一緒に消えます。&lt;/p&gt;
&lt;p&gt;残るのは、&lt;br&gt;
&lt;strong&gt;なぜ存在するのか分からない構造&lt;/strong&gt;です。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="設計ドキュメントが読まれなくなる理由"&gt;設計ドキュメントが読まれなくなる理由&lt;/h3&gt;
&lt;p&gt;「判断はドキュメントに書いてある」&lt;br&gt;
というケースもあります。&lt;/p&gt;
&lt;p&gt;しかし多くの現場で、&lt;br&gt;
設計ドキュメントは次第に読まれなくなります。&lt;/p&gt;
&lt;p&gt;なぜでしょうか。&lt;/p&gt;
&lt;p&gt;理由は単純です。&lt;br&gt;
&lt;strong&gt;コードとズレるから&lt;/strong&gt;です。&lt;/p&gt;
&lt;p&gt;仕様変更。&lt;br&gt;
例外対応。&lt;br&gt;
場当たり的な修正。&lt;/p&gt;</description></item><item><title>第3章：設計とは、判断の軸を一本通すこと</title><link>https://design.okuda-studio.com/books/002-design-starts-with-decisions/03-make-decisions-based-on-a-single-axis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://design.okuda-studio.com/books/002-design-starts-with-decisions/03-make-decisions-based-on-a-single-axis/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%A8%AD%E8%A8%88%E3%81%A8%E3%81%AF%E5%88%A4%E6%96%AD%E3%81%AE%E8%BB%B8%E3%82%92%E4%B8%80%E6%9C%AC%E9%80%9A%E3%81%99%E3%81%93%E3%81%A8"&gt;設計とは、判断の軸を一本通すこと&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%8C%E5%BC%B7%E3%81%84%E8%A8%AD%E8%A8%88%E3%81%AB%E3%81%AF%E4%B8%80%E6%9C%AC%E3%81%AE%E8%BB%B8%E3%81%8C%E3%81%82%E3%82%8B"&gt;判断が強い設計には「一本の軸」がある&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%BB%B8%E3%81%8C%E3%81%AA%E3%81%84%E8%A8%AD%E8%A8%88%E3%81%AF%E3%81%99%E3%81%B9%E3%81%A6%E5%A0%B4%E5%BD%93%E3%81%9F%E3%82%8A%E3%81%AB%E3%81%AA%E3%82%8B"&gt;軸がない設計は、すべて場当たりになる&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%A8%AD%E8%A8%88%E3%81%AE%E4%BB%95%E4%BA%8B%E3%81%AF%E9%81%B8%E6%8A%9E%E8%82%A2%E3%82%92%E6%B8%9B%E3%82%89%E3%81%99%E3%81%93%E3%81%A8"&gt;設計の仕事は「選択肢を減らす」こと&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%BB%B8%E3%81%A8%E3%81%AF%E4%BD%95%E3%82%92%E5%AE%88%E3%82%8B%E3%81%8B%E3%81%AE%E5%AE%A3%E8%A8%80%E3%81%A7%E3%81%82%E3%82%8B"&gt;軸とは「何を守るか」の宣言である&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%BB%B8%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E5%88%A4%E6%96%AD%E3%81%AF%E5%86%8D%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%82%8B"&gt;軸があれば、判断は再利用できる&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%A7%8B%E9%80%A0%E3%81%AF%E8%BB%B8%E3%81%AE%E5%89%AF%E7%94%A3%E7%89%A9%E3%81%A7%E3%81%82%E3%82%8B"&gt;構造は、軸の副産物である&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%93%E3%81%AE%E7%AB%A0%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81"&gt;この章のまとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="設計とは判断の軸を一本通すこと"&gt;設計とは、判断の軸を一本通すこと&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;設計の話になると、&lt;br&gt;
よくこんな言葉が出てきます。&lt;/p&gt;
&lt;p&gt;責務を分離する。&lt;br&gt;
関心事を分ける。&lt;br&gt;
疎結合にする。&lt;/p&gt;
&lt;p&gt;これらはすべて、&lt;br&gt;
設計において重要な考え方です。&lt;/p&gt;
&lt;p&gt;しかし本書では、&lt;br&gt;
それらを個別のテクニックとしては扱いません。&lt;/p&gt;
&lt;p&gt;なぜなら、&lt;br&gt;
それらはすべて &lt;strong&gt;結果として現れるもの&lt;/strong&gt; だからです。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="判断が強い設計には一本の軸がある"&gt;判断が強い設計には「一本の軸」がある&lt;/h3&gt;
&lt;p&gt;良い設計を眺めると、&lt;br&gt;
ある共通点があります。&lt;/p&gt;
&lt;p&gt;それは、&lt;br&gt;
&lt;strong&gt;判断の軸が一貫している&lt;/strong&gt; ことです。&lt;/p&gt;
&lt;p&gt;どの責務を分けるか。&lt;br&gt;
どこにロジックを置くか。&lt;br&gt;
どこで例外を吸収するか。&lt;/p&gt;
&lt;p&gt;それらの判断が、&lt;br&gt;
同じ方向を向いています。&lt;/p&gt;
&lt;p&gt;一方で、&lt;br&gt;
設計が崩れているコードでは、&lt;br&gt;
判断の基準が場所ごとに違います。&lt;/p&gt;
&lt;p&gt;ある場所では変更頻度を重視し、&lt;br&gt;
別の場所では実装の楽さを優先し、&lt;br&gt;
さらに別の場所では将来拡張を想定する。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;軸が複数あると、設計は必ず歪みます。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="軸がない設計はすべて場当たりになる"&gt;軸がない設計は、すべて場当たりになる&lt;/h3&gt;
&lt;p&gt;判断の軸が明示されていない場合、&lt;br&gt;
設計はどうなるでしょうか。&lt;/p&gt;
&lt;p&gt;答えは単純です。&lt;br&gt;
その場で一番納得しやすい判断が選ばれます。&lt;/p&gt;
&lt;p&gt;今すぐ直せるか。&lt;br&gt;
影響が少なそうか。&lt;br&gt;
説明しやすいか。&lt;/p&gt;
&lt;p&gt;これらは、&lt;br&gt;
判断基準として間違ってはいません。&lt;/p&gt;
&lt;p&gt;しかしそれが積み重なると、&lt;br&gt;
判断同士が噛み合わなくなります。&lt;/p&gt;
&lt;p&gt;結果として、&lt;br&gt;
「なぜこうなっているのか分からない構造」
が生まれます。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="設計の仕事は選択肢を減らすこと"&gt;設計の仕事は「選択肢を減らす」こと&lt;/h3&gt;
&lt;p&gt;設計というと、&lt;br&gt;
選択肢を増やす行為だと思われがちです。&lt;/p&gt;
&lt;p&gt;将来に備える。&lt;br&gt;
拡張ポイントを作る。&lt;br&gt;
何でもできる構造にする。&lt;/p&gt;
&lt;p&gt;しかし実際には、&lt;br&gt;
良い設計ほど、選択肢を減らします。&lt;/p&gt;
&lt;p&gt;この変更は、ここに影響する。&lt;br&gt;
この責務は、ここにしか書かない。&lt;br&gt;
この種類の判断は、ここでまとめて行う。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;判断の置き場所を固定すること&lt;/strong&gt;。&lt;br&gt;
それが、設計の重要な役割です。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="軸とは何を守るかの宣言である"&gt;軸とは「何を守るか」の宣言である&lt;/h3&gt;
&lt;p&gt;判断の軸とは、&lt;br&gt;
言い換えると「何を守るか」です。&lt;/p&gt;</description></item><item><title>第4章：判断の軸を、コードの外に逃がさない</title><link>https://design.okuda-studio.com/books/002-design-starts-with-decisions/04-leave-the-decisions-in-the-code/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://design.okuda-studio.com/books/002-design-starts-with-decisions/04-leave-the-decisions-in-the-code/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%AE%E8%BB%B8%E3%82%92%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%A4%96%E3%81%AB%E9%80%83%E3%81%8C%E3%81%95%E3%81%AA%E3%81%84"&gt;判断の軸を、コードの外に逃がさない&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%BB%B8%E3%81%8C%E5%A4%B1%E3%82%8F%E3%82%8C%E3%82%8B%E4%B8%80%E7%95%AA%E3%81%AE%E7%90%86%E7%94%B1"&gt;軸が失われる一番の理由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%AF%E8%AA%AD%E3%82%80%E4%BA%BA%E3%81%8C%E5%BF%85%E3%81%9A%E9%80%9A%E3%82%8B%E5%A0%B4%E6%89%80%E3%81%AB%E7%BD%AE%E3%81%8F"&gt;判断は「読む人が必ず通る場所」に置く&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%91%BD%E5%90%8D%E3%81%AF%E5%88%A4%E6%96%AD%E3%82%92%E9%96%89%E3%81%98%E8%BE%BC%E3%82%81%E3%82%8B%E6%9C%80%E5%88%9D%E3%81%AE%E6%89%8B%E6%AE%B5"&gt;命名は、判断を閉じ込める最初の手段&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%B1%A4%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E5%88%A4%E6%96%AD%E3%81%AE%E6%8B%85%E5%BD%93%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B%E3%81%93%E3%81%A8"&gt;層を作ることは、判断の担当を決めること&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%AA%E3%82%89%E3%81%AA%E3%81%9C%E3%81%A0%E3%81%91%E3%82%92%E6%9B%B8%E3%81%8F"&gt;コメントを書くなら「なぜ」だけを書く&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%83%86%E3%82%B9%E3%83%88%E3%81%AF%E5%88%A4%E6%96%AD%E3%82%92%E5%9B%BA%E5%AE%9A%E3%81%99%E3%82%8B%E6%9C%80%E5%BE%8C%E3%81%AE%E7%A0%A6"&gt;テストは、判断を固定する最後の砦&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%82%92%E6%9B%B8%E3%81%8B%E3%81%AA%E3%81%84%E8%A8%AD%E8%A8%88%E3%81%AF%E5%BF%85%E3%81%9A%E5%8F%A3%E9%A0%AD%E8%AA%AC%E6%98%8E%E3%81%AB%E6%88%BB%E3%82%8B"&gt;判断を書かない設計は、必ず口頭説明に戻る&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%93%E3%81%AE%E7%AB%A0%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81"&gt;この章のまとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="判断の軸をコードの外に逃がさない"&gt;判断の軸を、コードの外に逃がさない&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;判断の軸が重要だ、&lt;br&gt;
という話までは、&lt;br&gt;
多くのエンジニアが同意します。&lt;/p&gt;
&lt;p&gt;問題は、その次です。&lt;/p&gt;
&lt;p&gt;判断の軸は、&lt;br&gt;
どこに置けばよいのでしょうか。&lt;/p&gt;
&lt;p&gt;頭の中でしょうか。&lt;br&gt;
設計ドキュメントでしょうか。&lt;br&gt;
コードでしょうか。&lt;/p&gt;
&lt;p&gt;この章では、&lt;br&gt;
判断の軸を「消えにくい形」で残す方法を考えます。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="軸が失われる一番の理由"&gt;軸が失われる一番の理由&lt;/h3&gt;
&lt;p&gt;判断の軸が失われる理由は、&lt;br&gt;
実はとても単純です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;軸が、コードの外にあるからです。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ドキュメント&lt;/li&gt;
&lt;li&gt;Wiki&lt;/li&gt;
&lt;li&gt;設計資料&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;それらは悪ではありません。&lt;/p&gt;
&lt;p&gt;しかし、&lt;br&gt;
コードと更新タイミングがズレた瞬間、&lt;br&gt;
信頼されなくなります。&lt;/p&gt;
&lt;p&gt;結果として、&lt;br&gt;
人はコードだけを見るようになります。&lt;/p&gt;
&lt;p&gt;そしてコードの中に、&lt;br&gt;
判断の理由が見つからなくなります。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="判断は読む人が必ず通る場所に置く"&gt;判断は「読む人が必ず通る場所」に置く&lt;/h3&gt;
&lt;p&gt;判断の軸を残すための原則は、&lt;br&gt;
一つだけです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;読む人が、必ず通る場所に置くこと。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;誰も読まないドキュメントに、&lt;br&gt;
重要な判断を書いても意味はありません。&lt;/p&gt;
&lt;p&gt;一方で、&lt;br&gt;
必ず読まれる場所があります。&lt;/p&gt;
&lt;p&gt;それは、&lt;br&gt;
コードです。&lt;/p&gt;
&lt;p&gt;正確には、&lt;br&gt;
コードを理解するために、&lt;br&gt;
必ず目に入る構造です。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="命名は判断を閉じ込める最初の手段"&gt;命名は、判断を閉じ込める最初の手段&lt;/h3&gt;
&lt;p&gt;もっとも軽く、&lt;br&gt;
もっとも効果的な方法は、&lt;br&gt;
命名です。&lt;/p&gt;
&lt;p&gt;なぜこのクラスが存在するのか。&lt;br&gt;
なぜこの責務が切り出されているのか。&lt;/p&gt;
&lt;p&gt;それが名前に現れていれば、&lt;br&gt;
読む人は自然に軸を追えます。&lt;/p&gt;
&lt;p&gt;逆に、&lt;br&gt;
無難で抽象的な名前は、&lt;br&gt;
判断を隠します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Manager&lt;/li&gt;
&lt;li&gt;Helper&lt;/li&gt;
&lt;li&gt;Util&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらは、&lt;br&gt;
判断を先送りにした結果です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命名は、判断を固定する行為です。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="層を作ることは判断の担当を決めること"&gt;層を作ることは、判断の担当を決めること&lt;/h3&gt;
&lt;p&gt;レイヤー分割も、&lt;br&gt;
判断を残すための手段です。&lt;/p&gt;
&lt;p&gt;どこで判断するのか。&lt;br&gt;
どこでは判断しないのか。&lt;/p&gt;</description></item><item><title>第5章：失われた判断を、既存コードから読み解く</title><link>https://design.okuda-studio.com/books/002-design-starts-with-decisions/05-deciphering-lost-decisions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://design.okuda-studio.com/books/002-design-starts-with-decisions/05-deciphering-lost-decisions/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E5%A4%B1%E3%82%8F%E3%82%8C%E3%81%9F%E5%88%A4%E6%96%AD%E3%82%92%E6%97%A2%E5%AD%98%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E8%AA%AD%E3%81%BF%E8%A7%A3%E3%81%8F"&gt;失われた判断を、既存コードから読み解く&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%9C%80%E5%88%9D%E3%81%AB%E3%82%84%E3%81%A3%E3%81%A6%E3%81%AF%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8"&gt;最初にやってはいけないこと&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E5%88%A4%E6%96%AD%E3%81%AE%E7%97%95%E8%B7%A1%E3%81%A7%E3%81%A7%E3%81%8D%E3%81%A6%E3%81%84%E3%82%8B"&gt;コードは、判断の痕跡でできている&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%A4%89%E3%81%88%E3%81%AB%E3%81%8F%E3%81%84%E5%A0%B4%E6%89%80%E3%81%8B%E3%82%89%E8%A6%8B%E3%82%8B"&gt;「変えにくい場所」から見る&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%B8%8D%E8%87%AA%E7%84%B6%E3%81%AA%E4%B8%80%E8%B2%AB%E6%80%A7%E3%82%92%E6%8E%A2%E3%81%99"&gt;不自然な一貫性を探す&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%A4%89%E6%9B%B4%E5%B1%A5%E6%AD%B4%E3%81%AF%E5%88%A4%E6%96%AD%E3%81%AE%E5%8C%96%E7%9F%B3%E5%B1%A4%E3%81%A7%E3%81%82%E3%82%8B"&gt;変更履歴は、判断の化石層である&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%BB%B8%E3%81%AF%E6%AD%A3%E8%A7%A3%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E7%8F%BE%E5%AE%9F%E3%81%8B%E3%82%89%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B"&gt;軸は「正解」ではなく「現実」から見つける&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%93%E3%81%AE%E7%AB%A0%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81"&gt;この章のまとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="失われた判断を既存コードから読み解く"&gt;失われた判断を、既存コードから読み解く&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;設計の話をすると、&lt;br&gt;
しばしばこう言われます、&lt;br&gt;
「それは新規開発だからできた話ですよね」、&lt;/p&gt;
&lt;p&gt;既にコードがあり、&lt;br&gt;
既にモノリスになっていて、&lt;br&gt;
既に判断が失われている場合、&lt;br&gt;
どうすればよいのでしょうか、&lt;/p&gt;
&lt;p&gt;この章では、&lt;br&gt;
&lt;strong&gt;今あるコードを出発点として、
判断の軸を見つけ直す方法&lt;/strong&gt;を扱います、&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="最初にやってはいけないこと"&gt;最初にやってはいけないこと&lt;/h3&gt;
&lt;p&gt;既存コードを前にしたとき、&lt;br&gt;
多くのエンジニアが最初にやりがちなことがあります、&lt;/p&gt;
&lt;p&gt;それは、&lt;br&gt;
「理想的な構造」を思い描くことです、&lt;/p&gt;
&lt;p&gt;レイヤーを引き直す、&lt;br&gt;
責務を整理する、&lt;br&gt;
きれいなアーキテクチャに作り替える、&lt;/p&gt;
&lt;p&gt;気持ちはよく分かります、&lt;br&gt;
しかし、このアプローチはほぼ確実に失敗します、&lt;/p&gt;
&lt;p&gt;なぜなら、&lt;br&gt;
&lt;strong&gt;現状の判断を理解しないまま、
別の判断を上書きしようとするから&lt;/strong&gt;です、&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="コードは判断の痕跡でできている"&gt;コードは、判断の痕跡でできている&lt;/h3&gt;
&lt;p&gt;どれだけ荒れて見えるコードでも、&lt;br&gt;
そこには必ず判断の痕跡があります、&lt;/p&gt;
&lt;p&gt;意味の分からない条件分岐、&lt;br&gt;
不自然な責務の集まり、&lt;br&gt;
やたらと慎重なガード、&lt;/p&gt;
&lt;p&gt;それらは偶然ではありません、&lt;/p&gt;
&lt;p&gt;誰かが、&lt;br&gt;
何かを恐れ、&lt;br&gt;
何かを避け、&lt;br&gt;
何かを守ろうとした結果です、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;コードは、過去の判断の集合体です、&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="変えにくい場所から見る"&gt;「変えにくい場所」から見る&lt;/h3&gt;
&lt;p&gt;判断の軸を探すとき、&lt;br&gt;
まず注目すべき場所があります、&lt;/p&gt;
&lt;p&gt;それは、&lt;br&gt;
&lt;strong&gt;誰も触りたがらない場所&lt;/strong&gt;です、&lt;/p&gt;
&lt;p&gt;変更すると壊れそう、&lt;br&gt;
影響範囲が読めない、&lt;br&gt;
テストがなくて怖い、&lt;/p&gt;
&lt;p&gt;こうした場所には、&lt;br&gt;
強い判断が眠っています、&lt;/p&gt;
&lt;p&gt;なぜここは、&lt;br&gt;
こんなにも慎重に扱われているのか、&lt;/p&gt;
&lt;p&gt;その理由を考えることが、&lt;br&gt;
軸を見つける第一歩です、&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="不自然な一貫性を探す"&gt;不自然な一貫性を探す&lt;/h3&gt;
&lt;p&gt;もう一つ、&lt;br&gt;
有効な手がかりがあります、&lt;/p&gt;
&lt;p&gt;それは、&lt;br&gt;
&lt;strong&gt;不自然なほど一貫している部分&lt;/strong&gt;です、&lt;/p&gt;
&lt;p&gt;毎回同じチェックをしている、&lt;br&gt;
似たような変換が何度も出てくる、&lt;br&gt;
例外処理の方針が妙に揃っている、&lt;/p&gt;
&lt;p&gt;それは、&lt;br&gt;
偶然ではありません、&lt;/p&gt;
&lt;p&gt;誰かが、&lt;br&gt;
「ここだけは揺らがせない」と
決めた可能性があります、&lt;/p&gt;</description></item><item><title>第6章：最初の一手は、「判断の置き場所」に打つ</title><link>https://design.okuda-studio.com/books/002-design-starts-with-decisions/06-first-move/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://design.okuda-studio.com/books/002-design-starts-with-decisions/06-first-move/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%9C%80%E5%88%9D%E3%81%AE%E4%B8%80%E6%89%8B%E3%81%AF%E5%88%A4%E6%96%AD%E3%81%AE%E7%BD%AE%E3%81%8D%E5%A0%B4%E6%89%80%E3%81%AB%E6%89%93%E3%81%A4"&gt;最初の一手は、「判断の置き場所」に打つ&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E3%81%AA%E3%81%9C%E5%B0%8F%E3%81%95%E3%81%84%E3%81%A8%E3%81%93%E3%82%8D%E3%81%8B%E3%82%89%E3%81%AF%E5%A4%B1%E6%95%97%E3%81%97%E3%82%84%E3%81%99%E3%81%84%E3%81%AE%E3%81%8B"&gt;なぜ「小さいところから」は失敗しやすいのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%9C%80%E5%88%9D%E3%81%AE%E4%B8%80%E6%89%8B%E3%81%8C%E5%A4%89%E3%81%88%E3%82%8B%E3%81%B9%E3%81%8D%E3%82%82%E3%81%AE"&gt;最初の一手が変えるべきもの&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AE%88%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E5%88%A4%E6%96%AD%E3%82%92%E4%B8%80%E3%81%A4%E9%81%B8%E3%81%B6"&gt;「守られている判断」を一つ選ぶ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%87%E3%82%8A%E5%87%BA%E3%81%99%E3%81%AE%E3%81%AF%E5%87%A6%E7%90%86%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84"&gt;切り出すのは「処理」ではない&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%AF%E3%81%BE%E3%81%A0-if-%E6%96%87%E3%81%AE%E4%B8%AD%E3%81%AB%E3%81%82%E3%82%8B"&gt;判断は、まだ if 文の中にある&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%87%E3%82%8A%E5%87%BA%E3%81%99%E3%81%B9%E3%81%8D%E3%81%AA%E3%81%AE%E3%81%AF%E6%9D%A1%E4%BB%B6%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84"&gt;切り出すべきなのは「条件」ではない&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%94%B9%E5%96%84%E4%BE%8B%E5%88%A4%E6%96%AD%E3%81%AB%E5%90%8D%E5%89%8D%E3%81%A8%E7%BD%AE%E3%81%8D%E5%A0%B4%E6%89%80%E3%82%92%E4%B8%8E%E3%81%88%E3%82%8B"&gt;改善例：判断に名前と置き場所を与える&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%BD%95%E3%81%8C%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B"&gt;何が変わったのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#canapplyspecialdiscount-%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AB%E8%B5%B7%E3%81%8D%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8"&gt;canApplySpecialDiscount の場合に起きていること&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#iseligible-%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AB%E8%B5%B7%E3%81%8D%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8"&gt;isEligible の場合に起きていること&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E7%BD%AE%E3%81%8D%E5%A0%B4%E6%89%80%E3%81%8C%E6%B1%BA%E3%81%BE%E3%82%8B%E3%81%A8%E4%BD%95%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%8B%E3%81%AE%E3%81%8B"&gt;「置き場所が決まる」と何が変わるのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%82%82%E3%81%86%E4%B8%80%E3%81%A4%E5%A4%A7%E4%BA%8B%E3%81%AA%E9%81%95%E3%81%84"&gt;もう一つ大事な違い&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%A8%AD%E8%A8%88%E3%81%A8%E3%81%AFif-%E3%82%92%E6%B8%9B%E3%82%89%E3%81%99%E3%81%93%E3%81%A8%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84"&gt;設計とは、if を減らすことではない&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%88%90%E5%8A%9F%E3%81%99%E3%82%8B%E6%9C%80%E5%88%9D%E3%81%AE%E4%B8%80%E6%89%8B%E3%81%AE%E5%BD%A2"&gt;成功する最初の一手の形&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%9C%80%E5%88%9D%E3%81%AE%E4%B8%80%E6%89%8B%E3%81%AF%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%A6%E3%81%84%E3%81%84"&gt;最初の一手は、小さくていい&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%93%E3%81%AE%E7%AB%A0%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81"&gt;この章のまとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="最初の一手は判断の置き場所に打つ"&gt;最初の一手は、「判断の置き場所」に打つ&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;既存のモノリスを前にして、&lt;br&gt;
次に必ず出てくる問いがあります。&lt;/p&gt;
&lt;p&gt;「で、どこから直せばいいんですか。」&lt;/p&gt;
&lt;p&gt;この問いに対して、&lt;br&gt;
多くの現場ではこう答えがちです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;影響範囲が小さいところから&lt;/li&gt;
&lt;li&gt;テストがあるところから&lt;/li&gt;
&lt;li&gt;簡単そうなところから&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらは、&lt;br&gt;
&lt;strong&gt;間違いではありません。&lt;/strong&gt;&lt;br&gt;
しかし、&lt;br&gt;
&lt;strong&gt;十分でもありません。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="なぜ小さいところからは失敗しやすいのか"&gt;なぜ「小さいところから」は失敗しやすいのか&lt;/h3&gt;
&lt;p&gt;影響範囲の小さい修正は、&lt;br&gt;
安全に見えます。&lt;/p&gt;
&lt;p&gt;しかし、&lt;br&gt;
それは多くの場合、
&lt;strong&gt;判断に触れていない修正&lt;/strong&gt; です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ロジックを少し整理した&lt;/li&gt;
&lt;li&gt;クラスを分割した&lt;/li&gt;
&lt;li&gt;命名を直した&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コードはきれいになります。&lt;br&gt;
ですが、&lt;br&gt;
設計はほとんど変わりません。&lt;/p&gt;
&lt;p&gt;なぜなら、&lt;br&gt;
判断がそのままだからです。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="最初の一手が変えるべきもの"&gt;最初の一手が変えるべきもの&lt;/h3&gt;
&lt;p&gt;最初の一手で変えるべきなのは、&lt;br&gt;
構造ではなく、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;判断です。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;もっと正確に言うと、&lt;br&gt;
「この判断は、ここに置く」という&lt;br&gt;
配置の仕方です。&lt;/p&gt;
&lt;p&gt;つまり、&lt;br&gt;
&lt;strong&gt;判断の所在地を動かすこと&lt;/strong&gt; が&lt;br&gt;
効果的な最初の一手になります。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="守られている判断を一つ選ぶ"&gt;「守られている判断」を一つ選ぶ&lt;/h3&gt;
&lt;p&gt;第5章で見つけた、&lt;br&gt;
判断の軸を思い出してください。&lt;/p&gt;
&lt;p&gt;その中から、&lt;br&gt;
次の条件を満たすものを&lt;br&gt;
一つだけ選びます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;長く守られてきた&lt;/li&gt;
&lt;li&gt;壊れると致命的&lt;/li&gt;
&lt;li&gt;多くの場所から参照されている&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは、&lt;br&gt;
&lt;strong&gt;今のモノリスの中心判断&lt;/strong&gt; です。&lt;/p&gt;</description></item><item><title>第7章：改善を止めないために必要なもの</title><link>https://design.okuda-studio.com/books/002-design-starts-with-decisions/07-to-keep-improving/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://design.okuda-studio.com/books/002-design-starts-with-decisions/07-to-keep-improving/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%94%B9%E5%96%84%E3%82%92%E6%AD%A2%E3%82%81%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%82%82%E3%81%AE"&gt;改善を止めないために必要なもの&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E9%80%A3%E9%8E%96%E3%81%8C%E9%80%94%E5%88%87%E3%82%8C%E3%82%8B%E5%85%B8%E5%9E%8B%E7%9A%84%E3%81%AA%E7%9E%AC%E9%96%93"&gt;連鎖が途切れる典型的な瞬間&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%AA%E3%81%9C%E4%B8%80%E6%B0%97%E3%81%AB%E8%A7%A6%E3%82%8B%E3%81%A8%E9%80%A3%E9%8E%96%E3%81%8C%E6%AD%A2%E3%81%BE%E3%82%8B%E3%81%AE%E3%81%8B"&gt;なぜ一気に触ると、連鎖が止まるのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%82%92%E4%B8%80%E3%81%A4%E3%81%A0%E3%81%91%E5%8B%95%E3%81%8B%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88"&gt;判断を一つだけ動かした場合&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%A4%89%E6%9B%B4%E3%81%8C%E9%87%8D%E3%81%AA%E3%82%8B%E3%81%A8%E5%9B%A0%E6%9E%9C%E3%81%8C%E8%A6%8B%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8B"&gt;変更が重なると、因果が見えなくなる&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%BF%BD%E3%81%88%E3%81%AA%E3%81%84%E3%81%A8%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E7%8A%B6%E6%85%8B%E3%81%8B"&gt;「追えない」とは、どういう状態か&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E9%80%A3%E9%8E%96%E3%81%8C%E7%B6%9A%E3%81%8F%E6%9D%A1%E4%BB%B6%E3%81%AF%E5%9B%A0%E6%9E%9C%E3%81%8C%E8%A6%8B%E3%81%88%E3%82%8B%E3%81%93%E3%81%A8"&gt;連鎖が続く条件は「因果が見えること」&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%83%81%E3%83%BC%E3%83%A0%E3%81%A7%E3%81%AF%E3%81%95%E3%82%89%E3%81%AB%E5%95%8F%E9%A1%8C%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%AA%E3%82%8B"&gt;チームでは、さらに問題が大きくなる&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%94%B9%E5%96%84%E3%82%92%E6%AD%A2%E3%82%81%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%AB"&gt;改善を止めないためのルール&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%93%E3%81%AE%E7%AB%A0%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81"&gt;この章のまとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="改善を止めないために必要なもの"&gt;改善を止めないために必要なもの&lt;/h2&gt;
&lt;p&gt;第6章で見たように、&lt;br&gt;
最初の一手は「判断を動かす」ことから始まります。&lt;/p&gt;
&lt;p&gt;この一手がうまくいくと、&lt;br&gt;
現場では次に、こんな感覚が生まれます。&lt;/p&gt;
&lt;p&gt;「もう少し、ここも直せそうだ」&lt;br&gt;
「次は、あの判断も整理できそうだ」&lt;/p&gt;
&lt;p&gt;設計改善が、&lt;br&gt;
&lt;strong&gt;連鎖し始める瞬間&lt;/strong&gt; です。&lt;/p&gt;
&lt;p&gt;しかし、この連鎖は、&lt;br&gt;
意外と簡単に途切れます。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="連鎖が途切れる典型的な瞬間"&gt;連鎖が途切れる典型的な瞬間&lt;/h3&gt;
&lt;p&gt;連鎖が止まるのは、&lt;br&gt;
多くの場合、次の判断をしたときです。&lt;/p&gt;
&lt;p&gt;「今の流れで、&lt;br&gt;
　まとめて構造も整理してしまおう」&lt;/p&gt;
&lt;p&gt;判断を一つ動かせた成功体験があると、&lt;br&gt;
つい、こうしたくなります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クラス構成を整理する&lt;/li&gt;
&lt;li&gt;パッケージを切り直す&lt;/li&gt;
&lt;li&gt;似た責務をまとめる&lt;/li&gt;
&lt;li&gt;命名を一気に整える&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;結果として、&lt;br&gt;
コードはきれいになります。&lt;/p&gt;
&lt;p&gt;しかし、&lt;br&gt;
ここで一気に構造を触ると、&lt;br&gt;
改善の連鎖は途切れます。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="なぜ一気に触ると連鎖が止まるのか"&gt;なぜ一気に触ると、連鎖が止まるのか&lt;/h3&gt;
&lt;p&gt;理由は単純です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;判断の変化が、追えなくなるからです。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="判断を一つだけ動かした場合"&gt;判断を一つだけ動かした場合&lt;/h3&gt;
&lt;p&gt;たとえば、&lt;br&gt;
第6章で扱ったように、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;散らばっていた if の判断を&lt;/li&gt;
&lt;li&gt;SpecialDiscountPolicy に集めた&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この変更は、&lt;br&gt;
とても説明しやすい状態です。&lt;/p&gt;
&lt;p&gt;「特別割引という判断を、&lt;br&gt;
　このクラスに置きました」&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;何が変わったのか&lt;/li&gt;
&lt;li&gt;なぜ変えたのか&lt;/li&gt;
&lt;li&gt;どの判断を動かしたのか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;が、&lt;br&gt;
一文で説明できます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;変わった判断が、ひとつだけ&lt;/strong&gt;&lt;br&gt;
だからです。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="変更が重なると因果が見えなくなる"&gt;変更が重なると、因果が見えなくなる&lt;/h3&gt;
&lt;p&gt;一方で、&lt;br&gt;
次のような変更を同時に行った場合を考えてみてください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;判断を切り出した&lt;/li&gt;
&lt;li&gt;クラスを分割した&lt;/li&gt;
&lt;li&gt;パッケージを整理した&lt;/li&gt;
&lt;li&gt;util を削除した&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コードの見た目は、&lt;br&gt;
確実に良くなっています。&lt;/p&gt;</description></item><item><title>第8章：設計力とは、再現可能な判断の質である</title><link>https://design.okuda-studio.com/books/002-design-starts-with-decisions/08-what-is-design-competence/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://design.okuda-studio.com/books/002-design-starts-with-decisions/08-what-is-design-competence/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E8%A8%AD%E8%A8%88%E5%8A%9B%E3%81%A8%E3%81%AF%E5%86%8D%E7%8F%BE%E5%8F%AF%E8%83%BD%E3%81%AA%E5%88%A4%E6%96%AD%E3%81%AE%E8%B3%AA"&gt;設計力とは、再現可能な判断の質&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%9C%AC%E6%9B%B8%E3%81%A7%E6%89%B1%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%9F%E8%A8%AD%E8%A8%88%E3%81%AF%E5%AE%9F%E3%81%AF%E5%90%8C%E3%81%98%E8%A9%B1%E3%82%92%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B"&gt;本書で扱ってきた設計は、実は同じ話をしている&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%AF%E3%81%A9%E3%81%93%E3%81%AB%E7%BD%AE%E3%81%8B%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B"&gt;判断はどこに置かれているか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%9D%E3%81%AE%E5%88%A4%E6%96%AD%E3%81%AF%E8%AA%AC%E6%98%8E%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%8B"&gt;その判断は説明できるか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%88%A4%E6%96%AD%E3%81%AE%E5%A4%89%E5%8C%96%E3%82%92%E8%BF%BD%E3%81%88%E3%82%8B%E3%81%8B"&gt;判断の変化を追えるか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%9D%E3%81%AE%E5%88%A4%E6%96%AD%E3%81%AF%E5%86%8D%E7%8F%BE%E5%8F%AF%E8%83%BD%E3%81%8B"&gt;その判断は再現可能か&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%A8%AD%E8%A8%88%E5%8A%9B%E3%81%A8%E3%81%AF%E5%86%8D%E7%8F%BE%E5%8F%AF%E8%83%BD%E3%81%AA%E5%88%A4%E6%96%AD%E3%81%AE%E8%B3%AA-1"&gt;設計力とは、再現可能な判断の質&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="設計力とは再現可能な判断の質である"&gt;設計力とは、再現可能な判断の質である&lt;/h2&gt;
&lt;p&gt;ここまで本書では、&lt;br&gt;
モノリスや設計改善という題材を通して、&lt;br&gt;
さまざまな話をしてきました。&lt;/p&gt;
&lt;p&gt;一見すると、&lt;br&gt;
章ごとにテーマは違って見えるかもしれません。&lt;/p&gt;
&lt;p&gt;しかし振り返ってみると、&lt;br&gt;
私たちはずっと、&lt;br&gt;
&lt;strong&gt;同じ対象に対して、別の角度から向き合ってきた&lt;/strong&gt;&lt;br&gt;
ことに気づきます。&lt;/p&gt;
&lt;p&gt;それは、&lt;br&gt;
&lt;strong&gt;判断&lt;/strong&gt; です。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="本書でやってきたことを振り返る"&gt;本書でやってきたことを振り返る&lt;/h3&gt;
&lt;p&gt;各章で扱ってきた内容を、&lt;br&gt;
「判断に対して何をしてきたか」という観点で整理すると、&lt;br&gt;
次のようになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;判断を &lt;strong&gt;見つける&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;判断を &lt;strong&gt;切り出す&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;判断に &lt;strong&gt;名前をつける&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;判断を &lt;strong&gt;動かす&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;判断の &lt;strong&gt;変化を追う&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;章ごとに扱っていたのは、&lt;br&gt;
構造でも、クラス分割でも、if 文でもありません。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;判断そのものに、どう向き合うか&lt;/strong&gt;&lt;br&gt;
を扱ってきました。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="判断を見つける"&gt;判断を見つける&lt;/h3&gt;
&lt;p&gt;多くのモノリスでは、&lt;br&gt;
判断はすでに存在しています。&lt;/p&gt;
&lt;p&gt;ただし、&lt;br&gt;
それは明示されていません。&lt;/p&gt;
&lt;p&gt;if 文の奥に隠れていたり、&lt;br&gt;
複数の条件に分散していたり、&lt;br&gt;
暗黙の前提として人の頭の中にあったりします。&lt;/p&gt;
&lt;p&gt;設計改善の最初の一歩は、&lt;br&gt;
新しい構造を作ることではなく、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「ここには判断がある」&lt;br&gt;
と気づくこと&lt;/strong&gt;&lt;br&gt;
でした。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="判断を切り出す"&gt;判断を切り出す&lt;/h3&gt;
&lt;p&gt;判断に気づいても、&lt;br&gt;
それがコードの中に埋もれたままでは、&lt;br&gt;
扱うことができません。&lt;/p&gt;
&lt;p&gt;そこで私たちは、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;条件式&lt;/li&gt;
&lt;li&gt;分岐&lt;/li&gt;
&lt;li&gt;ロジックの塊&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;から、&lt;br&gt;
&lt;strong&gt;判断を切り出す&lt;/strong&gt;&lt;br&gt;
ということを行いました。&lt;/p&gt;
&lt;p&gt;これは、判断を&lt;br&gt;
「独立した存在として扱える状態」に&lt;br&gt;
するための行為です。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="判断に名前をつける"&gt;判断に名前をつける&lt;/h3&gt;
&lt;p&gt;切り出された判断は、&lt;br&gt;
まだ不安定です。&lt;/p&gt;</description></item></channel></rss>