

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
単一責任の原則とは
ソフトウェア開発でよく耳にする 単一責任の原則(英語で SRP, Single Responsibility Principle)は、1つのクラスやモジュールが1つの責任だけを担うべきだ、という考え方です。複数の機能を1つの部品に詰め込むと、変更が起きたときに他の機能にも影響が出やすく、修正が難しくなります。SRPを意識すると、部品同士の依存が減り、プログラムの保守性が高まります。
この原則はオブジェクト指向の設計で特に重要です。1つの責任に絞ると、変更理由が1つだけになり、他の部分へ波及する可能性が低くなります。結果としてバグが減り、後から機能を追加するときもスムーズになります。
なぜ SRP が大切なのか
理由はいくつかあります。まず第一に 保守性です。コードを読んだ人が、どの部分が何をしているかをすぐに理解できます。次に 再利用性です。1つの責任を果たす部品は、別の場面でも再利用しやすくなります。最後に テストのしやすさです。責任が分かれていれば、個別にテストを行いやすく、バグの原因を特定しやすくなります。
具体的な例
想像してみてください。あるアプリに 「社員データを扱うクラス」があり、データの読み込み、保存、表示、印刷など多くの機能を1つのクラスが担当しているとします。この状態だと、たとえば表示の形式を変えるだけでもデータの読み込み部分にも手を入れる必要があり、誤って別の機能を壊してしまうリスクがあります。
SRPを適用すると、以下のように責任を分けます。データの取得と保存を担当するクラス、データを表示・出力する責任を持つクラス、データの検証や変換の責任を持つクラスなど、役割を分離します。こうすることで、変更の理由が明確になり、個々の部品を単独で確認・改善できるようになります。
簡単な設計のヒントとしては、次のような分け方があります。データアクセス層(データの読み書き)、ビジネスロジック層(計算やルールの適用)、表示層(画面や印刷用の出力)。この三つの層がそれぞれ独立して動くように設計すると、SRPの効果を最大化できます。
表で見る責任の分離の例
| 場面 | 分けるべき責任 | 期待される効果 |
|---|---|---|
| データ管理アプリ | データの読み書き / 表示用の整形 / 出力形式の決定 | 変更の局所化 / 再利用性向上 / テストしやすさ |
| ニュースアプリ | 記事データの取得 / ページ表示の組み立て / 記事の検証 | 機能追加時の影響範囲を最小化 |
よくある誤解
SRPを「クラスを小さくすること=機能を減らすこと」と勘違いすると、過度に分割して複雑さだけを増やすことがあります。重要なのは責任を分離する適切さです。小さすぎる部品を増やしすぎると、組み立て時の依存関係が増え、逆に分かりにくくなることがあります。
学習のコツ
- 1つのクラスが「何をするか」を短く説明できるかを考える。
- 変更が1つの機能に起因するかを確認する。
- 余分な責任を持っていないかをコードレビューでチェックする。
まとめ
単一責任の原則は プログラムを分かりやすく、保守しやすくする基本原則です。最初は意識して設計するだけでも効果を感じられます。SRPを取り入れると、将来の機能追加や修正が楽になり、コードの品質を長く保つことができます。
単一責任の原則の同意語
- 単一責任の原則
- クラスやモジュールは1つの責任だけを担うべきという設計思想。変更理由を1つに絞ることで保守性と再利用性を高める。
- 単一責任原則
- 同じ意味の表現。1つの責任に限定するという基本となる考え方。
- 単一責任原理
- 原理という言い換え表現。1つの責任に限定するという考え方の別称。
- SRP (Single Responsibility Principle)
- 英語表現。SOLIDの原則のひとつで、クラスは1つの責任だけを持つべきという意味。
- SRP
- Single Responsibility Principleの略称。日本語でも略称として広く使われる表現。
- 責任分離の原則
- 責任を分離して、変更の影響を最小限に抑える設計思想。
- 責務分離の原則
- 責務(責任)を分離することを強調する言い換え表現。
- 関心の分離の原則
- 関心事を分けることで複雑性を抑える設計思想の同義表現。
- 関心分離の原則
- 関心の分離を重視する別表現。モジュール間の干渉を減らす意図。
- 機能分離の原則
- 機能を分離して独立性と再利用性を高める設計思想の類義表現。
- 責務の分離を重視した設計原則
- 責務を分離することを前提とする設計思想の言い換え。
- 1つの責任に限定する設計原則
- 文字通り、1つの責任だけを担うよう設計する考え方の表現。
単一責任の原則の対義語・反対語
- 多重責任
- 1つのクラスやモジュールが複数の責任を持ち、変更理由が複数生じる状態。SRPに反する設計の典型例です。
- 責任の過多
- クラスが過剰な責任を抱え、対応範囲が広くなることで保守性が低下する状態。
- 責任の集中
- 責任が1つのモジュールへ過度に集中しており、他の機能との分離が崩れている状態。
- 巨大クラス
- 一つのクラスが過度に大きく、複数の機能を詰め込んでいる状態。
- 神クラス
- God Class。多数の機能と責任を1つのクラスに集約し、単一責任の原則に反する典型例。
- モノリシック設計
- 全機能を1つの大きなモジュール・構造に詰め込み、責任分離が欠如している設計。
- 高結合
- モジュール間の依存が強く、責任の境界があいまいになる状態。
- 低凝集
- モジュール内部の機能がまとまりを欠き、責任が分散している状態。
- 機能混在
- 1つのモジュールに異なる機能が混在しており、責任の分離が不十分な状態。
- 責任分離の欠如
- 責任を適切に分離できず、1つの箇所に多くの責任が集まっている状態。
単一責任の原則の共起語
- 関心の分離
- ソフトウェアの異なる関心事を別々のモジュールに分け、変更理由の衝突を避ける設計思想。SRPの核心概念。
- 責務の分離
- クラスやモジュールに割り当てる責務を1つだけにして、複数の責務を持たせない考え方。
- 単一責任原則
- 1つのクラス・モジュールは、1つの責務だけを担当するべきという、SRPの核心ルール。
- シングルリスポンシビリティ
- 英語表現。SRPと同義。ソフトウェアの責務を1点に絞る考え方。
- 高凝集
- 関連機能を近くにまとめ、モジュール内の結束を高めることでSRPの効果を高める。
- 低結合
- 他のモジュールからの依存を減らし、変更の影響範囲を小さくする。
- モジュール化
- 機能を独立したモジュールに分割して責任を分離する設計手法。
- クラス設計
- クラスの責務を明確にし、単一責務原則を満たすように設計するプロセス。
- メソッドの責務
- 個々のメソッドが一つの役割だけを担うようにする実践。
- 関数の責務
- 関数にも同様に、1つの目的に限定する設計法。
- テスト容易性
- 変更の影響を局所化でき、ユニットテストが書きやすくなる利点。
- 保守性
- 長期的なコードの維持・改善が容易になる特性。
- 拡張性
- 新しい機能を追加しても既存の責務を壊しにくくなる特性。
- 変更影響範囲
- 小さく抑えるべき変更の広がりを想定して設計する考え方。
- リファクタリング
- SRPを満たすように、既存コードを段階的に書き換える作業。
- 依存性の注入
- モジュール間の依存を外部から注入することで低結合を実現する手法。
- 公開APIの最小化
- 外部へ公開するインターフェースを必要最小限に抑え、責務を限定する。
- 公的インターフェース設計
- クラスやモジュールの公開インターフェースを明確化する設計活動。
- 可読性
- 他者が理解しやすいコードになるよう、責務を分離して読みやすさを高める。
- クリーンコード
- 読みやすく、保守しやすいコードを書く習慣の一部としてSRPを促進。
単一責任の原則の関連用語
- 単一責任の原則
- クラスやモジュールはひとつの責任だけを持つべき設計原則。変更理由を一つに絞ることで保守性が高まる。
- 責任分離/関心の分離
- 異なる関心事を別々の場所で扱う考え方。SoCとも深く関係し、変更の影響を局所化する。
- 凝集度
- モジュール内の要素がどれだけ密接に関連して機能するか。高い凝集度はSRPの実現を助ける。
- 結合度/疎結合
- モジュール間の依存の強さ。低結合(疎結合)は変更の影響を最小化し、SRPの実現に寄与する。
- 神オブジェクト/Godオブジェクト
- 1つのクラスが多くの責務を抱え肥大化している状態。SRP違反の代表例。
- 責務分割/責務の分離
- 大きな責務を小さな責務に分割して役割を分ける実践。
- 抽出クラス/Extract Class
- 機能の一部を別のクラスに分離して責務を整理するリファクタリング手法。
- 抽出メソッド/Extract Method
- 長いメソッドを小さな機能に分割して責務を明確化するリファクタリング手法。
- インターフェース分離の原則
- クライアントが必要とする機能だけを提供する細分化したインターフェースを用いる設計原則。
- 依存性逆転の原則
- 高レベルのモジュールが低レベルのモジュールに依存せず、抽象に依存する設計方針。
- 変更の1理由原則
- クラスが変更される理由は1つだけであるべき、SRPの核となる考え方。
- 保守性
- 変更に強く、長期的にも安定して動作する設計の性質。
- テスト容易性
- 責務が分離されていれば部品ごとに独立してテストしやすくなる。
- モジュール性
- 機能を独立したモジュールとして組み合わせやすい設計思想。
- 責務の粒度
- 責務の大きさを適切な単位に分割すること。細かすぎても複雑さが増す点に注意。



















