1 万行のコードより 1 冊の設計書が勝つ場面
この記事は約 6 分で読めます。
コードを書く速さで測れる範囲には限りがある
ジュニアエンジニアのころは、コードを速く大量に書ける人が評価されやすい傾向があります。機能を実装し、バグを直し、タスクを消化する。生産性はコード量で測られがちです。
しかし、ある段階から「たくさん書ける」ことの価値が頭打ちになります。力任せに書き上げた機能が、設計を見直すと数分の一の行数で書き直せる、という場面が出てきます。しかも行数が減った方が読みやすく、テストしやすく、変更にも強くなります。
この差を生むのが設計の知識です。
コード量で解決できない 3 つの問題
問題 1: 変更のたびに壊れるシステム
機能 A を修正したら、無関係に見える機能 B が壊れます。原因を追うと、A と B が内部で密結合しています。修正のたびにデグレが起き、テストの工数が膨らみます。
この問題にコードを追加しても解決しません。テストを増やしても、根本原因である密結合は残ったまま。必要なのは、モジュール間の依存関係を整理する設計の知識です。依存性逆転の原則、インターフェースによる抽象化、レイヤードアーキテクチャ。これらの概念を知っていれば、密結合を解消する具体的な手段が見えます。
問題 2: スケールしないアーキテクチャ
ユーザー数が 10 倍になったとき、レスポンスタイムの悪化が 10 倍では済まない形で現れることがあります。サーバーを増やしても改善しません。この場合のボトルネックはコードの書き方ではなく、データの持ち方とアクセスパターンの設計にあります。
キャッシュ戦略、データベースのインデックス設計、非同期処理のパターン。これらは「もっとコードを書く」では解決できず、「どう設計するか」の知識が必要です。
問題 3: 新メンバーが戦力にならない
チームに新しいメンバーが入っても、コードベースが複雑すぎて全体像をつかむまでに時間がかかります。ドキュメントを書き足しても、変更の速度に追いつきません。
アーキテクチャの本が扱う「関心の分離」や「境界の明確化」を実践すれば、どこに何があるかを構造から読み取れるようになります。新しく入った人が最初に触る範囲を絞りやすくなる、という形で効いてきます。
設計の知識が「引き算」を可能にする
優れた設計は、コードを減らします。
不要な抽象化を排除する。重複したロジックを統合する。複雑な条件分岐をポリモーフィズムで置き換える。これらはすべて「引き算」の操作です。
引き算をするには、何を残して何を削るかの判断基準が必要です。その判断基準を与えてくれるのが、設計の原則とパターンです。SOLID 原則のような手掛かりを持たないままだと、「この抽象化は必要か不要か」がチーム内で好みの話になり、議論が収束しません。
設計書を読むべきタイミング
設計の本は、ある程度のコーディング経験がないと実感が湧きません。以下のような経験があるときが、読み始めの目安になります。
- 自分が書いたコードを半年後に読み返して「何をやっているかわからない」と感じたことがある
- 機能追加のたびに既存コードの修正範囲が広がっていると感じる
- コードレビューで「設計を見直した方がいい」と言われたことがある
- チームの他のメンバーが自分のコードを理解するのに苦労している
これらの経験がある人は、設計の本を読む準備ができています。経験がない人は、まずコードを書く量を増やす方が先です。
設計のパターン 1 つがコードの形を変える
決済処理を例にします。クレジットカード、銀行振込、コンビニ払い、電子マネーと支払手段が増えるたびに分岐の中身が足され、巨大な switch 文が伸びていく。この形になると、支払手段を 1 つ足すだけでも分岐の全経路をテストし直すことになります。
ここで効くのが、条件分岐をポリモーフィズムへ置き換える手当てです。Martin Fowler のリファクタリングカタログには、型によって振る舞いが分かれる switch 文を、共通のインターフェースを持つクラス階層へ移す手順が Replace Conditional with Polymorphism としてまとめられています。支払手段ごとの処理を独立したクラスへ移せば、呼び出し側から分岐が消え、追加のたびに触る範囲は新しいクラスとその登録先に閉じます。
この手当てに必要な知識は、設計の本のうちパターン 1 つ分です。読む分量は数ページから 1 節ぶん。読むのにかかる時間の短さと、その後に効いてくる範囲の広さが釣り合わないところが、設計の本の特異な点です。
関連記事
まとめ
コードを大量に書く力と、適切な設計を選ぶ力は別のスキルです。変更のたびに壊れる、スケールしない、新メンバーが理解できない。これらの問題はコード量では解決できず、設計の知識が必要です。1 冊の設計書が教える原則とパターンは、書く量を増やしても届かない場所に手を伸ばすための道具です。コードの総量が減り、変更の影響範囲が読めるようになれば、その効きはチーム全体に及びます。
この記事は役に立ちましたか?
関連用語
関連記事
設計 / アーキテクチャ本ガイド - 設計力を上げる技術書の選び方
ソフトウェア設計を学べる技術書をコード / モジュール / システムの 3 レイヤーに分類し、レベルに応じた読む順番の指針を紹介します。
設計の引き出しは経験だけでは増えない
実務経験だけでは設計の引き出しに限界があります。なぜ経験だけでは不十分なのか、本が設計力に対して果たす、他で代えにくい役割を論じます。
コードを書かずに技術力を上げる休日の過ごし方
休日にコードを書く気力がないとき、それでも技術力を伸ばす方法があります。読書、設計スケッチ、技術記事の執筆など、キーボードに触れずにスキルアップする具体的な過ごし方。
あの有名 OSS のコードは、この本の影響を受けている
広く使われているオープンソースソフトウェアの設計には、技術書と共通の語彙や原則が残っています。OSS のコードから辿れる影響と、似ているだけの例の見分け方を整理しました。
「動くコード」と「良いコード」の間にある本
コードが動くようになった後、次に何を学べばよいのか。「動くコード」を「良いコード」に変えるために必要な知識と、それを効率的に学べる本の選び方を解説します。
Pull Request が通らない人に足りないのは、たいてい語彙力
コードレビューで指摘が多い人に共通する「設計の語彙力不足」という問題と、技術書で語彙力を効率的に増やす方法を解説します。