LoginSignup
0
0

【Application Integration】初心者向け While Loopの扱い方を解説

Posted at

はじめに

Application Integration は2023年7月にGoogleCloudでリリースされた比較的新しいサービスです
新しいが故にドキュメントが充実しておらず、簡単なことでつまづいてしまいます
この記事ではWhile Loopの扱い方について解説します

2024年5月25日時点の仕様・公式ドキュメントに基づいています

While Loop の使い方

ポイントはこの3つです

  • ループの中身は別の統合で作成した方がいい
  • ループに設定するのは継続条件
  • メイン統合とサブ統合で変数は共有できない(マッピングが必要)

具体例

トリガーに引数として渡された数値が10を超えるまで、1ずつ足していくフローを作ります
2つの統合を作り、メインの統合からサブの統合を複数回実行します

サブの統合を作る

先にサブの統合から作ります
まず数値を格納する変数sub_numberを作成します
この変数の値をメインの統合に返したいので、Variable Typeは「Output from Integration」にします

image.png

APIトリガーとデータマッピングタスクを配置し、sub_numberに1を足すようにします

image.png

これでサブの統合は完成です
メインの統合から呼び出すため忘れずにパブリッシュしましょう

最後にAPIトリガーのIDを確認しておきます(この後で必要)

Google Chrome 2024-05-25 20.55.30.png

メインの統合を作る

先ほどとは別に新しく統合を作成してください。
ここでは2つ変数を用意します。1つ目は数値を格納する変数main_numberを作成します
トリガーに引数として渡し、かつ最終出力させたいので Variable Typeは「Input and Output of Integration」にします

Google Chrome 2024-05-25 20.46.03.png

2つ目は数値の配列を格納する変数each_sub_output_numbersを作成します
こちらは最終出力だけさせたいので「Output from Integration」です

Google Chrome 2024-05-25 21.40.44.png

そしてAPIトリガーとWhile Loopタスクを配置したら、While Loopの中身をこのように設定します

image.png

1つずつ解説します

Sub-integration details

ループ実行したいサブ統合のAPIトリガーIDと、統合の名前を入力します

While loop condition

ループ条件を設定します

ここに書くのはループの継続条件です。終了条件ではありません
公式ドキュメントの表現がややこしいので注意してください

ループを終了する条件。サブ統合は、条件が満たされるまで実行されます。

変数は$で囲んでください(使える演算子等はこちらを参照)
今回はmain_numberが10以下の時にループが継続するようにします

On each execution

メイン統合とサブ統合で変数は共有されません
ここで変数をマッピングします

  • Map to sub-integration input(s)
    • メイン統合の変数の値をサブに渡します
    • 今回はmain_numberの値をsub_numberに渡します
  • Collect values from sub-integration output(s)
    • サブ統合から出力された変数の値をメインに渡します
    • メイン側の変数は配列でなければなりません
    • 各ループの出力値が全て格納されます
    • 今回は各ループのsub_numberの値をeach_sub_output_numbersに格納します
  • Override values from sub-integration output(s)
    • サブ統合から出力された変数の値で、メインの変数を上書きます
    • ループごとに毎回上書きされます
    • 今回はsub_numbermain_numberを上書きます
    • これが無いと、いくらループを回してもmain_numberの値は増えません

実行確認

メインの統合を実行します
引数に5を渡してみましょう

image.png

image.png

main_numberが11で返ってきました
each_sub_output_numbersには各ループの出力値が入るので、6〜11まで1ずつ足されていることがわかります

ログを見ても main_integration が1回に対して sub_integration が6回実行されていることがわかります

Google Chrome 2024-05-25 22.00.17.png

次に引数に20を渡してみましょう

image.png

image.png

main_numberが20で返ってきました
ループに入っていないのでeach_sub_output_numbersには何も出力されていません
ログを見ても main_integration しかありません

image.png

QA: 同じ統合にメインとサブのトリガーを作ってもいいんじゃないの?

はい。その通りです。しかし動作確認が面倒になるのでお勧めしません
メインからサブを呼び出す際には、サブは必ずパブリッシュされていなければなりません
メインとサブを同じ統合に作ってしまうと、サブと同時にメインもパブリッシュしなければならず、メインをパブリッシュ前にテストをすることができなくなってしまいます

それでも同じ統合に作りたい、という場合はこのように設定しましょう
マッピングは必須です。同じ統合内であっても変数は共有されません

image.png

おわりに

プロジェクトで実際に使用した際は、メイン統合でバッチ処理を起動、サブ統合で処理が終了したか確認するループ処理を作りました
当時はWhile loopの仕様が理解できず、ただのループ処理にエンジニアが3人がかりで頭を悩ませるという悲惨な状況でしたw
この記事が誰かの役に立てば幸いです

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0