Patterns一覧へ戻る
AbCパラダイム

契約パターン (Contract Pattern)

活動間の関係を「契約」として明記する「契約パターン」

概要

AbC(Activity by Contract)の中核パターン。活動間の関係を「契約(Contract)」として明記し、事前条件(Input)と事後条件(Output)を明示することで、プロセスの信頼性と自動化適性を高める。

解決する問題

従来の「やることリスト(タスク連鎖型)」や「成果物介在型」では、なぜその活動が実行できるのか(事前条件)、何を生み出すのか(事後条件)が隠蔽される。担当者が変わるたびに品質がリセットされ、自動化への移行時に仕様が欠落する。

構造

  • Input(事前条件):この条件・材料が完全に揃わない限り、Activityは開始されない
  • Output(事後条件):Activityは必ずこの定義された状態の成果物を生み出すことを後続に「確約」する
  • Control:実行に際して考慮すべき制約・ルール(文脈パターンで拡張)
  • Mechanism:実行に使用するリソース・担当者・システム(文脈パターンで拡張)

効果

  • 担当者・実行システムが変わっても同等の品質を保証できる
  • 自動化への移行時に仕様の抜け漏れが発生しない
  • 活動が失敗した場合、後続が明確に停止するため影響範囲が可視化される
  • 意味のない活動(成果に接続していない活動)を排除できる

モデリング手法の比較 (模式図)

1. タスク連鎖型 (Workflow)

Activity A
Activity B

Activityを直接矢印で繋ぐ最も一般的な表現。処理の順序(Control Flow)のみを示します。

2. 成果物介在型 (Artifact-Centric)

Activity A
Artifact
Activity B

ActivityとActivityの間に、受け渡されるデータや成果物を明示する表現。データの流れ(Data Flow)に焦点を当てます。

3. 契約パターン (Contract Pattern)

Activity A
事後条件
Artifact
Contract (合意)
事前条件
Activity B

Activityの「左のハンドル」には事前条件が、「右のハンドル」には事後条件が直接記載され、これが実行に必要な契約(Contract)となります。間に介在する成果物(Artifact)は、このインターフェース間で事前・事後条件を満たした「合意済みの確実な情報」として受け渡されます。

なぜ従来の手法は破綻するのか?

1

「やることリスト」の限界(タスク連鎖型の課題)

矢印でActivityを順番に繋ぐだけの表現は、単なる「やることリスト」の羅列に過ぎません。「なぜそのActivityが実行可能なのか」という前提条件や、「具体的にどんな状態を生み出すのか」という結果が完全に隠蔽されています。

【よくある失敗例:会社の年度計画】
年度計画で「〇〇を実施する」という活動内容と「年度末の定量目標」だけが表形式で書かれているケースを想像してください。
活動の最後に作成されるArtifactや「達成すべき状態(Output)」が定義されていないため、年度末の振り返りは「〇・△・×」といった定性的な自己評価に終始します。さらに致命的なのは、「その活動の成果が得られなくても、後続の活動に何の影響も出ない」ことです。他の活動と成果の受け渡し(契約)を握っていないため、極論を言えば「その活動を行う意味自体が存在しなかった」ことになってしまいます。
2

「作り手都合の成果物」の限界(成果物介在型の課題)

Activity間に成果物(Artifact)を挟むことで情報の流れは可視化されます。本来、ここで授受される情報は「前工程が提供したい情報」ではなく**「後工程が必要とする情報」**であるべきです。しかし、成果物を単なる「モノ(データ)」として扱うと、品質や前提条件の合意が抜け落ちてしまいます。

【よくある失敗例:ソフトウェア開発の設計リレー】
分析(要件定義)➔ 設計(実現方法の決定)➔ 実装(具体化)と成果物を介在して連鎖する開発プロセスを想像してください。
本来なら「前活動の完了条件」は「後活動の事前条件(Input)」と直結しており、事前に後工程の担当者と品質基準を合意(契約)する必要があります。しかし実際には、前工程は後工程の都合を考慮せず、**自分たちの論理で受け渡す情報を作成**してしまいます。さらに最悪なことに、品質の明記や事前合意がないため、**「ドキュメントの目次の項目が適当に埋まっていれば完了」**と見なされてしまい、使い物にならない成果物が押し付けられ、プロセス全体が炎上する原因となります。

AbCの解決策:モジュール間の「契約」としてのインタフェース

AbC(Activity by Contract)は、これらの問題を根本から解決します。水平方向のつながりを単なる「順序」や「データ」ではなく、厳密な「契約(Contract)」として定義するからです。

  • Input(事前条件): この条件・材料が完全に揃わない限り、Activityは絶対に開始されません。
  • Output(事後条件): Activityは、必ずこの定義された状態の成果物を生み出すことを後続に対して「確約(Guarantee)」します。

もしあるActivityが失敗し、約束されたOutputを出せなかった場合、後続のActivityはInputが満たされないため明確に停止し、影響を受けます。このように、相互依存関係と責任の所在をはっきりと「握る」ことで、意味のない活動を排除し、プロセス全体が高い品質で自律的に動くようになります。