読み方 : かんしんのぶんり
関心の分離【SoC】Separation of Concerns
関心の分離とは?
システムやプログラムを設計する際に、機能や役割をはっきりと区別し、互いに独立した部品を組み合わせて全体を構成する考え方。

料理店の厨房を考えると、料理を作る調理人、皿を洗う担当、食材を管理する担当は、それぞれ別の仕事を受け持っている。コックが皿洗いを兼ねたり、洗い場の担当者が食材の発注まで管理したりすると、互いの作業が入り混じって混乱しやすくなる。
ソフトウェアの世界でも同じことが起きる。一つのプログラムが「画面の表示」「データの計算」「データの保存」をすべて担うと、修正の際にどこを直せばよいか分かりにくくなり、ある箇所の変更が思わぬ場所に影響を及ぼすといった混乱が生じやすくなる。
関心の分離を実践すると、部品ごとの担当範囲が明確になり、修正や機能追加がしやすくなる。ここでいう「関心」とは、データの表示や業務処理、通信、記録など、プログラムの中で独立して扱いたい機能や責務を指す。全体を一つの巨大な塊として作るのではなく、互いに影響し合わない境界線を引き、バラバラの部品の組み合わせとして管理する考え方である。
関心をプログラム部品単位で分離しておくと、一部に不具合が発生しても原因の特定が容易になり、修正による二次的な被害も防ぎやすくなる。一度作った部品を別のアプリケーションで同じ機能の実装に転用できるなど、再利用性も高まる。チームで開発する場合も、担当範囲が明確になるため、作業が重複したり互いの仕事を壊したりするリスクが減る。
ただし、細かな単位で厳密に分けすぎると部品の数が増えすぎ、全体像の把握や要素間の連携が複雑になる側面もある。どこまで分離するかはシステムの規模や用途に応じた判断が必要であり、細かく分ければよいというものでもない。「一つの部品には一つの責任を」という方針を念頭に置きつつ、状況に合わせてバランスをとることが求められる。