「設計」で意識しておきたいこと その2 第04回 20年08月 / 最終更新:2020.08.21

前回は、設計の中でも一般的に「上流」と呼ばれる所にあるあたりをお話していきました。
ただ、個人的には同じくらいに、一般的に「下流」と呼ばれるプログラミング設計付近についても注意を払っておいたほうがよい、というか「注意を払わなかった事によって面倒な事がおきた」経験が少なからずあるので。
今回は、より「実装に近しい」あたりについてお話をさせていただければ、と思います。

設計の考え方は、少なからずフラクタルな所がある、と考えています。
ここでのフラクタルは、一端「部分と全体が自己相似になっているもの」くらいにとらえておいていただければ、と思います。もうちょっとかみ砕いて平たくいうと「大きなくくりで出てくる"考え方や法則"は、より細かいレイヤーでも同じように適用する事ができる」といった感じです。

設計で、個人的に大事にしているのは「隙間があって隙の無い設計」という考え方です。
システム、或いは「システムを使うビジネス」は常に変化のあるものなので。「変化のあるビジネス」に対して「ガチガチに作り込んで隙間や余裕が全くないシステム」を作ってしまうと、よくいっても「ジェンガなシステム」にしかなりませんし、増築改築を繰り返して最終的には「多大なコストを支払って作り直すか、サービスを閉じるか」というあまり嬉しくない二択になりがちです。
そのため、変化に対してある程度柔軟に「ここに入れれば入るかなぁ」という隙間を、とても大切に考えています。
ただ一方で「それは想定外でした」「それも想定外でした」が続くと修正が大変になってしまうので、あまり「隙だらけで脇が甘い」システムは、それはそれで考え物です。
なので「変化を受け入れる隙間はあるけど、基本的には大体一通りの事は想定している程度には隙が無い」設計、というのが、とても大切なのではないか、と考えています。

これは「サービス設計」でもそうですし、もう少し実装レイヤーに落として「クラス設計」や「テーブル設計」や「インフラ設計」、「運用設計」など、様々なところで出てくる概念かと思います。

「隙の無い設計」については「考察と経験を重ね、チームのナレッジを集めて出来るだけ多角度で考察する」として。
「隙間のある設計」については、「素直に綺麗に作っておく」のが一番確実なのではないか、と考えています。
「シンプルに作る」というのは、言うには容易く実際に行うには難しい目標、にはなるのですが。特にプログラムやDBにおいて、出来るだけ1行1カラムについて「一度はきちんと考察をする」といった、しっかりした(頭を使う、という)手間をかけると、ゆっくりですが実っていくように思われます。

また、シンプルに作る上で、プログラム上のいわゆる「格言」で個人的に大切に感じているのが「DRY」「YAGNI」「KISS」の3つです。
「1つの変更があったら1箇所の修正ですむ(DRY)」ようなコードを書けば、少なくとも「追加の時にあちらもこちらも修正をして」といった手間を省く事ができます。
また「必要なものは必要になってから作る(YAGNI)」を意識しておくと、コードが必然的に「必要な時に作れるように、あまりギチギチには組まず隙間を空けておく」癖やコツを身につける事ができるようになります。
そうすると「出来るだけシンプルで愚直(愚鈍)な、素直なコードにする事ができる(KISS)」ので、「必要であれば必要な箇所だけチューニングをする」など、手をかける隙間が出来てきます。

他にも様々なプログラマの格言がありますが。
こういった格言は、例えば「DB設計」や「インフラ設計」「運用設計」には直接使えるものが多いですし、「サービス設計」や「ビジネス設計」であっても、参考になる事は少なからずあると思いますので、一度概念を学んでおくのは、とても有益だと思います。

次回は、さらに実装に踏み込んでいきましょう。
DBを中心にお話をしていきますが、プログラミングのお話も少し絡めていければ、と思います。