疎結合という言葉は、設計の話として語られることが多いです。
ただ、実際の開発で助かるのは、コードがきれいに見えるからではありません。仕様変更が入ったときに、「どこを見ればよいか」「どこまで直せばよいか」を確認しやすくなるからです。
画面の表示を少し変えるだけのつもりが、データ取得や状態管理、外部APIの呼び出しまで影響してしまう。DBアクセスの処理が複数の場所に散っていて、どこを直すと何が変わるのか追いにくい。共通状態をいろいろな処理が触っていて、変更後の動きをテストで確認しきれない。
こうした状況では、実装担当者の注意力だけで事故を防ぐのは難しくなります。見る範囲が広すぎると、レビューでもテストでも確認するポイントが増えます。疎結合は、その負担を減らすための設計です。
仕様変更で困るのは影響範囲が追えない状態
開発では、最初に決めた仕様が最後まで変わらないことのほうが少ないです。
画面の文言、表示条件、APIの返却値、保存するデータ、エラー時の扱い。変更の大きさはさまざまですが、どれもコード上では何らかの修正になります。
このとき困るのは、変更そのものではありません。困るのは、変更した箇所からどこまで影響が広がるのか確認しにくい状態です。
画面表示の処理の中でAPIを呼び、取得した値を加工し、DB更新に近い処理まで持っていると、見た目の変更でも確認範囲が広がります。外部APIの呼び出し口が複数に分かれていると、仕様変更時に修正漏れが起きやすくなります。DBアクセスがあちこちにあると、データ構造を変えたときに検索しきれない処理が残ることがあります。
この状態では、レビュー担当者も「ここを見れば確認できる」と言いにくくなります。テスト担当者も、どの機能を重点的に見るべきか判断しにくくなります。実装の問題というより、変更を追うための構造が足りていない状態です。
役割を分けるだけで確認範囲が変わる
疎結合を考えるとき、難しい設計用語から入る必要はないと思っています。
画面は表示に集中させる。外部APIは呼び出し口をまとめる。DBアクセスは散らさない。共通状態は、必要以上にいろいろな処理へ触らせない。
このあたりを守るだけでも、仕様変更時の確認範囲は変わります。
画面側に表示の責務がまとまっていれば、見た目や表示条件の変更は画面周辺を中心に確認できます。APIの呼び出し口がまとまっていれば、リクエストやレスポンスの形が変わったときに、どこを直すか確認しやすくなります。DBアクセスが整理されていれば、保存項目や取得条件を変えるときに、修正範囲を追いやすくなります。
共通状態も同じです。いろいろな場所から自由に変更できる状態になっていると、どの処理が値を変えたのか確認に時間がかかります。状態を変える処理や読む処理が整理されていると、不具合が出たときにログや差分を見ながら原因を切り分けやすくなります。
ここで大きいのは、開発メンバーの記憶に頼る量を減らせることです。どこに何があるかを全員が覚えていなくても、構造を見れば確認しやすい状態に近づきます。
疎結合は影響範囲を小さくする運用ルール
疎結合は、設計思想として語ると少し大きな話に見えます。
ただ、実務上は「変更の影響範囲を局所化するための運用ルール」と見たほうが扱いやすい場面があります。
たとえば、新しい仕様が入ったときに、画面、API、DB、状態管理がそれぞれ別の確認項目として見える状態になっているか。レビュー時に、修正箇所と影響しそうな処理を一緒に確認できるか。テスト時に、どの条件で動作を見ればよいか分けられるか。
こうした確認がしやすい構造になっていると、変更作業の進め方も変わります。実装担当者は修正範囲を判断しやすくなり、レビュー担当者は見るポイントを揃えやすくなります。テストでは、変更した機能だけでなく、影響しそうな周辺の動きも確認しやすくなります。
反対に、処理が密につながりすぎていると、小さな変更でも確認範囲が広がります。修正した箇所は少なくても、影響を確認するために読むコードが増えます。結果として、レビューの時間が延びたり、テスト観点が増えたり、不具合が出たときの切り分けに時間がかかったりします。
疎結合は、コードを美しくするための飾りではありません。人間が無理なく追える範囲に、処理を分けるための工夫です。
認知の限界を前提にした設計
開発の知見が積み重なるほど、設計は人間の認知の限界を前提にした形へ近づいていくように感じます。
すべてを一度に理解できる人を前提にすると、コードは書けても運用が難しくなります。特定の担当者だけが全体を把握している状態では、仕様変更や不具合対応のたびに確認が属人化します。
画面は何を表示するのか。APIはどこで呼ぶのか。DBアクセスはどこに集めるのか。共通状態は誰が変更するのか。こうした境界が見えると、開発メンバーは自分が確認すべき範囲を判断しやすくなります。
もちろん、すべてを細かく分ければよいわけではありません。分けすぎると、今度は処理の流れを追いにくくなります。見るべき点は、変更が入ったときに確認範囲を狭められるかどうかです。分け方そのものではなく、次に直す場所、レビューで見る場所、テストで確認する条件が揃うかどうかを見たほうが判断しやすくなります。
疎結合を考えるときは、きれいな構造を目指すだけではなく、仕様変更が来たときに誰が何を確認するのかまで見ておきたいです。
その視点があると、画面、API、DB、状態管理の分け方は、単なる設計の好みではなくなります。変更時の事故を減らし、レビューで見るポイントを揃え、不具合が出たときに原因を切り分けやすくするための確認項目になります。
おわりに
X(旧Twitter)やBlueskyを中心に日々発信しております。
是非他のSNSもご覧いただけますと幸甚でございます。
https://x.com/itchie_tatsumi
https://bsky.app/profile/itchie-tatsumi.bsky.social
https://www.facebook.com/ichino.souta
また、辰巳電子工業SS事業部では、エンジニアが安心して長く働ける環境づくりに取り組んでおります。「今の経験で応募できるか知りたい」「案件やキャリア支援について聞いてみたい」という方は、是非カジュアル面談からお気軽にご相談願います。