本文へスキップ

CQRSとは?

しーきゅーあーるえす

CQRSとは、システムデータ「読み取り」と「書き込み」の責務をモデルレベルで明確に分離するソフトウェアアーキテクチャパターンです。

CQRS(Command Query Responsibility Segregation:コマンドクエリ責務分離)とは、アプリケーション内でデータ更新系(Command)参照系(Query)独立したモデルとして設計するアーキテクチャパターンです。Greg Youngによって2010年ごろに体系化されました。

従来のCRUDベースの設計では、読み取りと書き込みが同一のデータモデルを共有します。これはシンプルですが、複雑なビジネスロジックや高トラフィックのシステムでは、読み取りと書き込みの最適化要件が相反することがあります。CQRSはこの問題を、モデルを分けることで解消します。

CQRSの主な特徴は以下の通りです。

  • Commandサイド: 状態を変更する操作(作成・更新・削除)を担当し、整合性を保証する
  • Queryサイド: データを読み取るだけで状態を変えず、参照に最適化されたモデルを使う
  • それぞれのデータストアを分離して独立したスケーリングが可能
  • イベントソーシングと組み合わせて使われることが多い

CQRSを適用することで読み取り専用のビューを自由に最適化できる一方、システム全体の複雑性は増加します。そのため、ドメインが複雑で読み書きの負荷特性が大きく異なるシステムや、DDD(ドメイン駆動設計)を採用した大規模プロジェクトに適しています。小規模なアプリケーションへの適用はオーバーエンジニアリングになりやすいため注意が必要です。

使い方・例文

EC サイトで注文の作成・キャンセル処理をCommandとして厳密に管理しながら、商品一覧の表示は参照専用の非正規化テーブルから高速に取得する構成が、CQRSの典型的な活用例です。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語