はじめに
どうも、たにあんです。久しぶりにmakeの記事です。
ここ1〜2ヶ月で、makeさんもそこそこアップデートされていまして、AI Agentなどのアップデートはあったものの機能としてはイマイチなような感覚もありつつ…
そんなところ、2025年4月に以下のようなアップデートがありました。いまさらですが触れていきます。
- Return Outputs Module
- Synchronous Execution Mode
- Start a Subscenario Module
少なくともWorkatoではできていたRecipe間の依存関係をmakeでは構成することができず、Scenarioを作成する際に苦戦したものです。
iPaaSのアップデート内容としては地味ながら、大変嬉しい機能です。
makeユーザー向けの内容になっていますが、makeをよくご存知でない方は用語解説も併せてご覧ください。
概要
忙しい人向け、なんとなく知りたい方向けの内容です。
- 従来は、あるScenario(便宜的に親Scenario)から別のScenario(子Scenario)を実行するために必要な機能が不足していました。
- 例えば…
- 親Scenarioから子Scenarioを実行した際、元のScenarioへ結果を返すことができませんでした。
- 子Scenarioの実行完了を待つことができませんでした。
- 例えば…
- 子Scenarioの実行結果に応じて同じ処理を複数回実行させたいような状況でも、同じ処理を構築する必要がありました。
- 2025年4月のアップデートでScenario間の連携がスムーズにできるようになり、上述の内容はすべて解決しました。
以降は、機能を中心に解説していきます。
Subscenario とは?
Subscenario
とは、「他のScenarioから呼び出して利用できる、独立した小さなScenario」です。makeにおいてはCall a subscenario
Moduleを使って別のシナリオを呼び出します。
再利用可能な形で1つのScenarioを作成しておくことで、Subscenario
としてあらゆるScenarioから呼び出すことができるようになります。
具体的な利用の流れは以下の通りです。
- 呼び出される側(
Subscenario
= 子Scenario):- 最初のModuleには
Start a subscenario
を使用し、外部からのデータを受け取る準備をします。- 受け取るデータは
Scenario Inputs
で定義します。
- 受け取るデータは
- 処理を実行します。
- 処理結果を
Return outputs
Moduleで呼び出し元に返します。- 親Scenarioに返すためのデータは
Scenario Outputs
で定義します。
- 親Scenarioに返すためのデータは
- 最初のModuleには
- 呼び出す側(親Scenario):
Scenario
カテゴリの中にあるCall a subscenario
を使用してSubscenario
を呼び出します。Subscenario
に必要なデータを渡します。Subscenario
側で設定したScenario inputs
を使用します。
Subscenario
からの処理結果を受け取って、後続の処理に利用します。Subscenario
側で設定したScenario outputs
を使用します。
機能詳細
Scenario inputs / outputs
Scenario inputs
は、親Scenarioから子Scenarioに特定の値を渡すときに利用する機能です。Scenario outputs
は、子Scenarioから親Scenarioに特定の値を返すときに利用する機能です。
いずれも子Scenarioで設定する必要があり、呼び出し元の親Scenarioでは、
値の変数名(Name
)と型(Type
)を設定すると使用することができます。Required
にチェックをつけた場合は、「呼び出し元で値を必ず渡すように強制する」ことになります。
以下に一例を示します。

ちなみに、説明欄(Description
)は、親Scenarioから渡す値を指定する際に表示されます。Scenario Inputs
を設定するときの必須項目ではありませんが、記載することをオススメします。

Call a subscenario module
親Scenarioで使用するModuleです。既に作成されているScenarioを子Scenarioとして呼び出すことができます。
設定画面は以下のようになっています。

Scenario Inputs
の項目は、指定したSubscenario
で設定されているScenario Inputs
が表示され、親Scenarioから子Scenarioへ引き継ぐ値を指定することができます。Scenario Inputs
の各名称の横にアスタリスクがついている項目は、必ず何かしらの値を入力しなければいけません。これは前項のRequired
の設定に依存します。
また、子Scenarioの実行を待つこともでき、適切なタイミングで後続の処理を実行させることが可能です。
もちろん、Call a subscenario
の結果を待たずに、複数のScenarioを並行して実行することも可能です。

ちなみに、Call a subscenario
はmakeのOperations
を消費しません。
Start a subscenario module
Subscenario
の最初のModuleとして使用します。置かなくてもSubscenario
として機能しますが、必ず配置しましょう。
処理的には何もしませんが、Scenarioの実行履歴(History)を確認する際に役に立ちます。Start a subscenario
を配置しない場合、Scenario inputs
として受け取った値を確認する方法は、以下のいずれかになります。
- 親Scenarioの
Call a subscenario
で渡した値を見る。つまり、親Scenarioの実行履歴を確認する。 - 子Scenario内のModuleで
Scenario inputs
を使用しているModuleを確認する。
非常に手間がかかる作業になってしまうため、配置しない理由がありません。Start a subscenario
があれば、一目でScenario inputs
として受け取った値が分かります。

ちなみに、Start a subscenario
もmakeのOperations
を消費しません。
Return outputs module
子Scenarioから親Scenarioにデータを返すときに利用します。そのため、子Scenarioに配置します。
すでに説明したScenario outputs
で設定した変数を使って返します。
子Scenarioの実行履歴を確認すると以下のようになっており、親Scenarioで返す値がログで表示されます。

また、対応する親ScenarioのCall a subscenario
の実行履歴を見ると、同じ値が返ってきています。

ちなみに、Return outputs
もmakeのOperations
を消費しません。
Subscenarioのメリット
Subscenario
を活用することで、以下のような多くのメリットが得られます。
- シナリオのモジュール化と再利用性の向上:
- 共通して利用する処理(例えば、エラー通知、特定サービスへのデータ登録、複雑なデータ整形など)を
Subscenario
として切り出すことで、何度も同じ処理を組む必要がなくなります。 - 一度作成すれば、あとは呼び出すだけでOKです。楽ちんです。
- 共通して利用する処理(例えば、エラー通知、特定サービスへのデータ登録、複雑なデータ整形など)を
- 複雑なシナリオの可読性と保守性の向上:
- 一つの巨大なシナリオは、処理の流れを把握しにくく、修正やデバッグも困難になりがちです。
- Module数が30個近くなると、1つの画面で収まらなくなるシチュエーションも多く、見やすいmakeのUIを損ねることにもなります。
Subscenario
を使って処理を適切に分割することで、各シナリオの役割が明確になり、全体の構造がシンプルになります。
- 一つの巨大なシナリオは、処理の流れを把握しにくく、修正やデバッグも困難になりがちです。
- エラー処理の共通化と強化:
- エラーハンドリングの処理を
Subscenario
に集約できます。例えば、エラー発生時に特定チャンネルへ通知を送ったり、エラーログを記録したりする処理を共通化できます。
- エラーハンドリングの処理を
Subscenarioのユースケース
考えられる汎用的なユースケースは、以下のようなものがあります。
- データのバリデーション
- メールアドレスの形式チェック、電話番号の正規化といったバリデーション処理を
Subscenario
にまとめる。
- メールアドレスの形式チェック、電話番号の正規化といったバリデーション処理を
- 通知処理
- シナリオの成功・失敗時に、Slackやメールなど複数のチャネルに状況に応じたメッセージを送信する処理を
Subscenario
にまとめる。
- シナリオの成功・失敗時に、Slackやメールなど複数のチャネルに状況に応じたメッセージを送信する処理を
- ファイル処理の共通化
- Google Drive や Dropbox へのファイルアップロード、特定フォルダからのファイル取得、ファイル名の変更といった一連のファイル操作を
Subscenario
にする。
- Google Drive や Dropbox へのファイルアップロード、特定フォルダからのファイル取得、ファイル名の変更といった一連のファイル操作を
コラム:個人的にウキウキしているユースケース
makeのマニアックな話になります。makeをあまり知らないという方は、飛ばしていただいて構いません。
前述のユースケースの中で、通知処理には可能性を感じています。
エラーの通知処理を楽に行うために、自動化の主な処理をSubscenario
として実行するという使い方があり得ると考えています。
子Scenarioでは処理の実行結果と、必要に応じてエラーをキャッチさせて親Scenarioに返すことで、親Scenarioにのみ通知処理を実装させるということです。
もう少し具体的に説明していきます。
まず背景から。makeにとって、エラーに伴う通知処理が厄介です。
Scenarioの任意の箇所でエラーが発生した場合、特定の処理を実行するということができません。
Workatoの場合、以下のような形で一定の範囲内でエラーが発生した場合、エラーをキャッチしたときの処理を一括で実装することができます。

makeの場合、以下の画像の橙枠に対してエラー処理を入れる必要があります。
厳密に実装するなら、すべてのModuleに対してエラー処理が必要ですが、やってられないので以下のようなポイントを重点的に対応する形になると思います。
- 外部サービスのAPIを呼び出している箇所
- 条件分岐で想定外の挙動やデータが処理される箇所
- Data Storeを含むデータベースの更新などの箇所

上の画像の場合、エラー処理を実装した方がよいと考えられる箇所は10箇所以上(橙枠)あり、各箇所にエラー通知処理(Slackにメッセージを投稿するなど)のModuleを配置するかと言われると、やりたくないというのが正直なところです。
Slackの場合、blocksを何度も見たくありません。Moduleをコピーすればいいじゃんと言われればそれまでですが、後々メンテナンスする可能性も考えると、設定するModuleが少ないか、あるいは設定が楽な方がよいです。
(想定外のエラーが出るScenarioを作っていること自体ナンセンスみたいなツッコミはなしでお願いします。)
そこで、メインの処理をSubscenario
として実装し、子ScenarioからReturn outputs
で親Scenarioに実行結果とエラーを返してあげることで、親Scenarioで子Scenarioから受け取った結果に応じて処理させることができれば、Slackのblocksをたくさん見る必要もなくなります。
それでもReturn outputs
の設定は必要ですが、その他Moduleの設定項目の多さに比べれば大したことはないので、かなり楽になると考えています。
ちなみに、makeでは各Moduleに対してError Handling用の分岐を設定することができます。対象のModuleでErrorが発生した場合に、正常に実行された際の分岐とは異なるルートを設定することができるものです。
Error Handlingの分岐には、専用のModuleもありますが、Return outputs
を配置することも可能です。
おわりに
今回は、Makeの Subscenario
機能について解説しました。Subscenario
は、自動化をより効率的、効果的、そして管理しやすいものへと進化させる手段です。
一度その便利さを体験すれば、きっと手放せなくなるはずです。ぜひ、日々の業務で共通化できそうな処理や、複雑になりすぎたScenarioの見直しに、Subscenario
の導入を検討してみてください。
用語解説
- Scenario:どのような処理を自動化するか定義されたものです。ZapierのZaps、Power Automateのフロー、WorkatoのRecipeに相当します。
- Module:Scenario内で利用できる操作そのものです。ZapierやPower Automate、Workatoのアクションに相当します。
- Operations:Moduleを実行できる回数です。makeの課金形態は従量課金であり、金額に応じて一定期間内で利用できるOperationsが変わります。
- Data Store:makeで利用できるストレージです。WorkatoのLookup Tableに相当します。