Skip to content

Self-Heal Loop(自己修復ループ)

多段の実行中に失敗や不整合を検知し、既にコミット済みの作業を補償(巻き戻し・修復)しながら計画を立て直して回復する。単一呼出の是正では済まない、副作用を伴う多段の失敗から、系を整合状態へ戻すパターンである。

別名

呼称出典
Compensating Loop / Self-Correction一般的呼称(実行レベルの自己修復)
Auto-Remediation / Self-Healing運用自動化の慣用
Saga-style Recovery分散トランザクションの系譜

問題

副作用を伴う多段実行は、ステップごとに変更を確定していく——リソースを作る、ファイルを書く、APIを呼ぶ、DBを移行する。ところが後のステップで前のステップの誤りが判明したり、途中のステップが失敗して系が中途半端に変更された状態で止まったりする。

これは単一呼出の失敗(再試行すればよい)とは質が違う。作業は既にコミットされているため、同じ操作を再試行しても、生じた不整合は解消されない。放置すれば孤児リソース、破損した状態、半分だけ適用された変更が残る。Retry with Feedback が「送る前に直す」のに対し、ここでは「やってしまった後に整える」必要がある。

コンテキスト

適用する:

  • 副作用を伴う多段実行(インフラ構築、DB移行、複数APIを順に呼ぶシーケンス)
  • 巻き戻しや代替経路で回復可能な操作
  • 一時的でない失敗(前提・設計の誤り)が起こりうるタスク

適用しない(不要な)ケース:

  • 副作用がなく、やり直しが安全なタスク——Retry with Feedback で足りる
  • 補償アクションを定義できない不可逆操作——事後修復に委ねず、実行前に Approval Gate で止める

解決

コミットする各ステップに、対応する補償アクション(取り消し方)をあらかじめ定義する。失敗や不整合を検知したら(事後検証・ヘルスチェック・下流エラー・不変条件チェックで)、診断 → コミット済みステップを補償して整合性を回復 → 再計画 → 継続またはエスカレーション、と進む。自己修復ループ自体の暴走は Budget Guard で止める。

python
def run_plan(steps, budget):
    done = []
    for step in steps:
        try:
            result = execute(step)          # 副作用をコミット
            verify(step, result)            # 事後検証(不変条件・ヘルスチェック)
            done.append(step)
        except Failure as f:
            for s in reversed(done):        # 補償: コミット済みを逆順に巻き戻す
                compensate(s)
            if budget.exceeded():           # 自己修復の暴走を止める
                return escalate(f)
            return run_plan(replan(f), budget)   # 診断して再計画
    return done

実装の要点:

  • ステップごとに補償アクションを定義する。 Saga と同じく「取り消し方」を実行前に用意する。補償を定義できない操作は、そもそも Approval Gate で人間に委ねる
  • 検知を副作用の後に置く。 事後の検証(不変条件・ヘルスチェック・下流エラー)で、「成功したように見えて壊れている」を捕まえる
  • 補償と再計画を分ける。 巻き戻し(整合性の回復)と、次にどうするか(診断→再計画)は別の判断。無限の自己修復は Budget Guard で止める
  • Checkpoint & Resume と併用する。 直前の正常スナップショットへ戻し、外部への副作用だけを補償する形が堅い

トレードオフ

  • ✅ 多段の副作用を伴う失敗が、手動復旧ではなく構造的な回復になる。孤児リソースや半端な状態を残さない
  • ✅ 一時的でない失敗(前提・設計の誤り)にも、巻き戻し+再計画で対応できる
  • ⚠️ 補償アクションの設計・テストは本体と同等の労力を要する。補償自体が失敗する場合の扱いも決めておく必要がある
  • ⚠️ 自己修復ループは新たな暴走面になる。診断を誤ると壊す方向に修復しうるため、Budget Guard と人間へのエスカレーションが必須

クラウドパターンとの対応

クラウドパターン本パターンでの再定義
Saga「分散トランザクションを、各ステップの補償操作の連鎖として整合させる」から「エージェントの多段実行を、失敗検知時に補償しながら再計画する回復ループへ」拡張した
Compensating Transaction「コミット済みの操作を意味的に打ち消す補償で結果整合性を保つ」発想を、エージェントが状況に応じて動的に選ぶ回復アクションへ持ち込んだ

関連パターン

  • Retry with Feedback — 単一呼出がコミット前に失敗したときの是正。Self-Heal は既にコミット済みの多段作業の回復。失敗の深さが違う
  • Checkpoint & Resume — 直前の正常状態への巻き戻しの土台。Self-Heal はそこに外部副作用の補償と再計画を足して前進回復する
  • Budget Guard — 自己修復ループの暴走を上限で止める。必ず併用する
  • Approval Gate — 補償できない不可逆操作は、自己修復に委ねず実行前に人間の承認へ回す

出典・参考

本文: CC BY 4.0 / コード片: MIT。GitHub で寄稿を受け付けています。