👋

Zapierでの条件分岐パターン

2024/09/09に公開

はじめに

Zapierでは特定条件の場合のみActionを実行する方法はいくつかあります。
以下に代表的な方法をまとめます。

Filter

最もシンプルなのはFilterを使う方法です。

たとえば、TriggerにSlackの投稿を指定している場合に、全ての発言ではなく特定ユーザーの場合のみActionを実行したいといったケースでは以下のように指定します。

上記はFilter条件に合致して後続Actionが実行されますが、条件が合致しない場合は以下のような表示になります。

条件は完全一致・部分一致などが用意されているほか、複数条件をANDやORで連結して指定することもできます。
なお、Filterは文字通り後続Actionの実行をFilterするものであり、条件に合致しない場合に特定Actionを実行したいといったケースでは後述のPathを使います。

Path

Zapierでは標準で条件分岐のためのPathというアクションが用意されています。
https://zapier.com/features/paths

条件分岐で誤解されやすい点として、分岐条件は全て同時に評価される点です。
たとえば以下の図

これをコードで表現すると

if annual plan:
  アクション A
elif monthly plan:
  アクション B

ではありません。

二つの分岐条件は同時に評価され条件に合致すれば実行されます。実行順を制御することもできません。

また、Filter同様に完全一致・部分一致などをANDやORで連結できることに加えて、Always run(常に実行)Fallback(他の分岐がない場合に実行) なども設定できます。

たとえば、条件によってActionは切り替えたいが、フィードバックのためのSlack通知は共通で行いたい場合、それぞれのPathでメッセージ送信Actionを配置するのではなく、 Always run(常に実行) のPathにメッセージ送信Actionを設定することで冗長性を排除できます

Path in SubZap

PathはSubZap内で設定することもできます。
例えばPathでActionを分岐させ、その結果をフィードバックメッセージの本文に使いたい場合、Always runでは分岐されたActionの結果を動的に指定することはできません。
以下のように参照できる範囲は自分がいる分岐内に限定されます。

そこで SubZap側に条件分岐を分離することで、SubZapの戻り値を使ってフィードバックメッセージ本文に利用するといった使い方ができます(他にStorage使う方法もあります)。

なお、Pathは一つのZapで3つまでという制約があります。SubZapにPathを委譲することでこの制約を回避はできますが、過度に多用することは可読性・メンテナンスの面からも避けた方がよいです。
必要に応じてZapの分割やそもそもiPaaS以外の選択肢を考えるべきでしょう。

まとめ

Pathの挙動は誤解されやすいため使い方のサンプルと合わせてまとめました。誰かの参考になれば幸いです。

https://help.zapier.com/hc/en-us/articles/8496288555917-Add-branching-logic-to-Zaps-with-Paths

Discussion