最近、業務で(ググらビリティが低すぎることでおなじみの) Make を使うことが多い。
その Make でよくやりたくなるのが「2つのブランチをマージ」だ。例えば次のような処理。
- A モジュールを作成して、A モジュール成功後に B モジュールを実行する
- ただし、A モジュールが失敗したらエラーハンドリングのフローに分岐し、解決後にメインのブランチへ戻って B モジュールを実行する
図にすると以下。
───▶[A Module]────────────────────[合流]───▶[B Module]───▶
│ │
└────(error)─▶[エラーを解決]──┘ [ make.com merge {branch|flow|paths} 🔍] のようなそれらしいキーワードで調べても解決方法にたどり着けなかったが、公式ヘルプの「 Converger 」に答えがあった。
Converger 自体はツールやモジュールではなく、ワークアラウンドだ。
やり方は上記の記事にも書かれているが、
- 先頭に共通モジュールを接続するための Router を追加する
- A モジュールを実行 → 次のステップで
Set Variableモジュールに"status": "success"などの JSON を格納 - A モジュールのエラーハンドラー側 →
Set Variableモジュールで"status": "error"とし、何らかのエラー内容や復旧情報も JSON で格納 - 先頭の Router から、後続で呼び出したい共通処理(B モジュール)を追加する
- 共通処理側で
Get Variableモジュールから値を取得し、必要に応じて"status"を判定して処理を分ける
当初のイメージとは違ったが、こうすることで A モジュールの結果に関係なく、B モジュールを一箇所にまとめて実行できるようになった。
──[Router]────────▶[A Module]──────▶[Set Variable: {status: "success"}]
│
├───(error)──▶[エラーを解決]───▶[Set Variable: {status: "error"}]
│
└───[Get Variable: status]─────▶[B Module]
No comments yet