Azure Logic Apps で変数を作成して値を格納および管理する

適用対象: Azure Logic Apps (従量課金プラン + Standard)

このハウツー ガイドでは、ロジック アプリ ワークフローに値を格納して使用する変数を作成して操作する方法について説明します。 たとえば、変数を使用してループの実行回数を追跡することができます。 配列を反復処理したり、配列の特定の要素をチェックしたりするには、変数を使用して各配列要素のインデックス番号を参照することができます。

整数、浮動小数点、ブール、文字列、配列、オブジェクトなど、各種データ型の変数を作成できます。 変数を作成した後、次のようなタスクを実行できます。

  • 変数の値を取得または参照する。
  • 変数を一定の値だけ増減させる。この操作は "値を増やす" および "値を減らす" と呼ばれています。
  • 異なる値を変数に代入する。
  • 文字列または配列の最後の項目として、変数の値を挿入または "追加" します。

変数は、それを作成したワークフロー インスタンスの範囲内でのみ、グローバルに存在します。 また、ワークフロー インスタンス内で、ループのイテレーションを越えて存続します。 アクションの出力を参照するときはアクションの名前を使用するのが普通ですが、変数を参照するときは、変数の名前をトークンとして使用します。

重要

既定では、For each ループのイテレーションは並列で実行されます。 ループ内で変数を使用すると、順番にループが実行されるので、変数から予測可能な結果が返されます。

前提条件

  • Azure アカウントとサブスクリプション。 サブスクリプションをお持ちでない場合には、無料の Azure アカウントにサインアップしてください。

  • 変数を作成するロジック アプリ ワークフローと、ワークフローを開始するトリガー。

    変数の作成や操作をするアクションを追加するには、ワークフローにおける最初のステップとして、ワークフローがトリガーによって開始される必要があります。 詳細については、トリガーやアクションを使ったワークフローの構築に関する記事を参照してください。

次に示す手順では Azure portal を使用しますが、適切な Azure Logic Apps 拡張機能を使用すれば、次のツールでロジック アプリ ワークフローを作成することもできます。

従量課金と Standard のどちらのワークフローを使用しているかに基づいて、対応する手順に従ってください。

変数を初期化する

変数の作成とそのデータ型および初期値の宣言は、ワークフローの 1 つのアクションを使用して行うことができます。 変数はグローバル レベルでのみ宣言でき、その範囲をスコープや条件、ループ内に限定することはできません。

  1. Azure portal で、ワークフローをデザイナーで開きます。

  2. デザイナーでは、一般的な手順に従って「変数を初期化する」という名前のアクションを追加します

  3. 変数について以下の情報を入力します。

    プロパティ 必須 説明
    名前 はい <variable-name> 値を増やす変数の名前
    Type はい <variable-type> 変数のデータ型
    Value いいえ <start-value> 変数の初期値

    ヒント: 省略することもできますが、変数の開始値を常に把握するため、この値を設定することをお勧めします。

    次の例は、このサンプル変数の初期値を示しています。

    Azure portal、Consumer ワークフロー、「変数を初期化する」という名前のアクションを示すスクリーンショット

  4. 次に、シナリオに必要なアクションを追加します。 操作が完了したら、デザイナーのツールバーで、 [保存] を選択します。

デザイナーからコード ビューに切り替えると、JavaScript Object Notation (JSON) 形式で記述されたワークフローの定義内には、[変数を初期化する] アクションが次のように表示されます。

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [ 
            {
               "name": "Count",
               "type": "Integer",
               "value": 0
            }
         ]
      },
      "runAfter": {}
   }
},

注意

変数を初期化するアクションには、配列として構成されている "variables" オブジェクトがありますが、アクションで作成できる変数は一度に 1 つだけです。 新しい変数ごとに、個別に変数を初期化するアクションが必要です。

次の例は、他の変数型を示しています。

ブール型変数

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myBooleanVariable",
               "type": "boolean",
               "value": false
            }
         ]
      },
      "runAfter": {}
   }
},

Float 変数

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myFloatVariable",
               "type": "float",
               "value": 1.99999
            }
         ]
      },
      "runAfter": {}
   }
},

文字列変数

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myStringVariable",
               "type": "string",
               "value": "lorem ipsum"
            }
         ]
      },
      "runAfter": {}
   }
},

オブジェクト変数

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "MyObjectVariable",
               "type": "object",
               "value": {
                  "ProductItem": {
                     "Name": "myProductName",
                     "ProductID": "000000"
                  }
               }
            }
         ]
      },
      "runAfter": {}
   }
},

整数の配列

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myArrayVariable",
               "type": "array",
               "value": [1, 2, 3]
            }
         ]
      },
      "runAfter": {}
   }
},

文字列の配列

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [
            {
               "name": "myArrayVariable",
               "type": "array",
               "value": ["red", "orange", "yellow"]
            }
         ]
      },
      "runAfter": {}
   }
},

変数の値を取得する

変数内容の取得や参照には、ワークフロー デザイナーとコード ビュー エディターで variables() 関数を使用できます。 アクションの出力を参照するときはアクションの名前を使用するのが普通ですが、変数を参照するときは、変数の名前をトークンとして使用します。

たとえば、次の式は、このガイドで作成した配列の変数から、variables() 関数を使用して項目を取得しています。 string() 関数は、変数の内容を文字列形式 ("1, 2, 3, red") で返します。

@{string(variables('myArrayVariable'))}

変数の値を増やす

変数を特定の定数値で増やす ("増分する") には、変数の値を増やすアクションをワークフローに追加します。 このアクションが正しく機能するのは、整数型と浮動小数点型の変数だけです。

  1. ワークフロー デザイナーでは、一般的な手順に従って「変数の値を増やす」という名前のアクションを追加します

  2. このアクションについて、次の情報を提供します。

    プロパティ 必須 説明
    名前 はい <variable-name> 値を増やす変数の名前
    Value いいえ <increment-value> 変数の値を増やすために使用する値。 既定値は 1 です。

    ヒント: 省略することもできますが、変数の値を増やす場合の具体的な値を常に把握するため、この値を設定することをお勧めします。

    次の例は、このアクションのサンプル値を示しています。

    Azure portal、Consumption ワークフロー、「変数の値を増やす」という名前のアクションを示すスクリーンショット

  3. 完了したら、ワークフローを保存します。 デザイナーのツール バーで、 [保存] を選択します。

デザイナーからコード ビューに切り替えると、JSON 形式で記述されたワークフローの定義内には、[変数の値を増やす] アクションが次のように表示されます。

"actions": {
   "Increment_variable": {
      "type": "IncrementVariable",
      "inputs": {
         "name": "Count",
         "value": 1
      },
      "runAfter": {}
   }
},

例:ループ カウンターを作成する

変数は、ループの実行回数をカウントする目的でよく使用されます。 ここでは、そのタスクの例として、メールの添付ファイルをカウントするループを作成することにより、実際に変数を作成して使用する方法を紹介しています。

  1. Azure portal で、空のワークフローを使用して Consumption ロジック アプリ リソースを作成します。 新しいメールと添付ファイルをチェックするトリガーを追加します。

    この例では、Office 365 Outlook の "新しい電子メールが届いたとき" のトリガーを使用します。 このトリガーは、メールに添付ファイルが含まれているときにだけ作動するように設定できます。 ただし、添付ファイルを含んだ新しいメールをチェックするものであれば、どのコネクタを使用してもかまいません (Outlook.com コネクタなど)。

  2. トリガーで添付ファイルの有無をチェックして、それをワークフローに渡すには、次のプロパティで [はい] を選択します。

    • 添付ファイルのみ
    • 添付ファイルを含める

    Azure portal、Consumption ワークフロー、[添付ファイルを含める] で [はい] が選択されているプロパティを示すスクリーンショット。

  3. 開始値が 0 に設定されている Count という名前の整数変数を作成するには、変数の初期化アクションを追加します。

  4. 各添付ファイルを反復処理するには、一般的な手順に従って For each ループと呼ばれるアクションを追加します

  5. ループで、[前の手順の出力を選択する] という名前のボックス内を選択します。 動的コンテンツ リストが表示されたら、[新しい電子メールが届いたとき][添付ファイル] を選択します。

    Consumption ワークフロー、For each ループ、展開された動的コンテンツ リスト、選択された添付ファイル出力を示すスクリーンショット。

    Attachments プロパティは、トリガーの出力から電子メールの添付ファイルを含む配列をループに渡し、ワークフローが反復処理できるようにします。

  6. For each ループで、 [アクションの追加] を選択します。

  7. 一般的な手順に従って [変数の値を増やす] という名前のアクションをループに追加します

    注意

    [変数の値を増やす] アクションがループ内に表示されることを確認します。 ループの外側に表示されている場合は、このアクションをループの内側にドラッグします。

  8. [変数の値を増やす] アクションの [名前] ボックスの一覧から Count 変数を選択します。 Value プロパティを 1 に設定します。

    Count という変数が選択された Consumption ワークフローを示すスクリーンショット。

  9. ループの下に、添付ファイルの数を送信するアクションを追加します。 たとえば、そのアクション内で、Count 変数の値を挿入します。

    Consumption ワークフローと結果を送信するアクションを示すスクリーンショット。

  10. 完了したら、ワークフローを保存します。 デザイナーのツール バーで、 [保存] を選択します。

ワークフローのテスト

  1. ワークフローを手動でトリガーするには、対応する手順に従います。

    従量課金ワークフロー

    デザイナーのワークフロー ツール バーの [トリガーの実行]>[実行] を選択してワークフローを手動で開始します。

    Standard ワークフロー

    ワークフロー メニューで、 [概要] を選択します。 ツール バーの [実行]>[実行] を選択します。

  2. この例で使用した電子メール アカウントに、添付ファイルを少なくとも 1 つ含んだメールを送信します。

    この手順で、ワークフロー インスタンスを作成して実行するワークフロー トリガーを起動します。 この結果、送信したメールに含まれる添付ファイルの数を示した自分宛てのメッセージまたはメールがワークフローから届きます。

デザイナーからコード ビューに切り替えると、JSON 形式で記述されたワークフローの定義内には、For each ループと [変数の値を増やす] アクションが次のように表示されます。

"actions": {
   "For_each": {
      "type": "Foreach",
      "actions": {
         "Increment_variable": {
           "type": "IncrementVariable",
            "inputs": {
               "name": "Count",
               "value": 1
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['Attachments']",
      "runAfter": {
         "Initialize_variable": [ "Succeeded" ]
      }
   }
},

変数の値を減らす

変数を特定の定数値で減らす ("減分する") 手順は、変数の値を増やす場合と変わりません。ただし、そのときにワークフローに追加するアクションは、[変数の値を減らす] になります。 このアクションが正しく機能するのは、整数型と浮動小数点型の変数だけです。

次の表では、[変数の値を減らす] アクションの情報について説明します。

プロパティ 必須 説明
名前 はい <variable-name> 値を減らす変数の名前
Value いいえ <increment-value> 変数の値を減らすのに使用する値。 既定値は 1 です。

ヒント:省略することもできますが、変数の値を減らす場合の具体的な値を常に把握するため、この値を設定することをお勧めします。

デザイナーからコード ビューに切り替えると、JSON 形式で記述されたワークフローの定義内には、[変数の値を減らす] アクションが次のように表示されます。

"actions": {
   "Decrement_variable": {
      "type": "DecrementVariable",
      "inputs": {
         "name": "Count",
         "value": 1
      },
      "runAfter": {}
   }
},

変数を設定する

既存の変数に異なる値を割り当てる手順は、次の点を除いて、変数の値を増やす場合と同じです。

  1. 検索して選択するアクションは [変数の設定] になります。

  2. 変数の名前と代入する値を指定します。 新しい値と変数のデータ型が一致している必要があります。 このアクションには既定値がないため、値は必須です。

次の表では、[変数を設定する] アクションの情報について説明します。

プロパティ 必須 説明
名前 はい <variable-name> 変更する変数の名前
Value はい <new-value> 変数に代入する値。 両方のデータ型が一致している必要があります。

注意

変数の値を増やすまたは値を減らす場合を除き、ループ内で変数に変更を加えると、予期しない結果を招く "可能性" があります。既定では、ループがパラレル (またはコンカレント) に実行されるためです。 このような場合は、ループを逐次的に実行するように設定してみてください。 たとえば、ループ内で変数の値を参照するとき、ループ インスタンスの最初と最後で値が一致していなければならない場合は、次の手順に従ってループの動作を変更してください。

  1. ループで、ループ設定を見つけて開きます。

  2. ワークフローの種類に基づいて、対応する手順を実施します。

    • Consumption: [コンカレンシー制御] の設定を [オフ] から [オン] に変更します。

    • Standard: [全般][コンカレンシー制御] の設定を [オフ] から [オン] に変更します。

  3. [並列処理の次数] スライダーをドラッグして 1 に設定します。

デザイナーからコード ビューに切り替えると、JSON 形式で記述されたワークフローの定義内には、[変数を設定する] アクションが次のように表示されます。

次の例では、Count 変数の現在の値を別の値に変更しています。

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [ {
               "name": "Count",
               "type": "Integer",
               "value": 0
          } ]
      },
      "runAfter": {}
   },
   "Set_variable": {
      "type": "SetVariable",
      "inputs": {
         "name": "Count",
         "value": 100
      },
      "runAfter": {
         "Initialize_variable": [ "Succeeded" ]
      }
   }
},

変数に追加する

文字列を格納する変数または配列を格納する変数では、その文字列または配列の最後の要素として変数の値を挿入 ("追加") することができます。 変数の値を増やす手順に従うことができますが、次の例外があります。

  1. 対象の変数が文字列か配列かによって、次のいずれかのアクションを検索して選択します。

    • 文字列変数に追加
    • 配列変数に追加
  2. 文字列または配列の最後の要素として追加する値を指定します。 この値は必須です。

次の表では、[...に追加する] アクションの情報について説明します。

プロパティ 必須 説明
名前 はい <variable-name> 変更する変数の名前
Value はい <append-value> 追加する値。データ型は任意です。

デザイナーからコード ビューに切り替えると、JSON 形式で記述されたワークフローの定義内には、[配列変数に追加する] アクションが次のように表示されます。

次の例では、配列の変数を作成し、その最後の項目として別の値を追加しています。 この結果、更新後の変数に格納される配列の内容は [1,2,3,"red"] になります。

"actions": {
   "Initialize_variable": {
      "type": "InitializeVariable",
      "inputs": {
         "variables": [ {
            "name": "myArrayVariable",
            "type": "Array",
            "value": [1, 2, 3]
         } ]
      },
      "runAfter": {}
   },
   "Append_to_array_variable": {
      "type": "AppendToArrayVariable",
      "inputs": {
         "name": "myArrayVariable",
         "value": "red"
      },
      "runAfter": {
        "Initialize_variable": [ "Succeeded" ]
      }
   }
},

次のステップ