適用対象: Azure Logic Apps (従量課金 + Standard)
このハウツー ガイドでは、ロジック アプリ ワークフローに値を格納して使用する変数を作成して操作する方法について説明します。 たとえば、変数を使用してループの実行回数を追跡することができます。 配列を反復処理したり、配列の特定の要素をチェックしたりするには、変数を使用して各配列要素のインデックス番号を参照することができます。
整数、浮動小数点、ブール、文字列、配列、オブジェクトなど、各種データ型の変数を作成できます。 変数を作成した後、次のようなタスクを実行できます。
- 変数の値を取得または参照する。
- 変数を一定の値だけ増減させる。この操作は "値を増やす" および "値を減らす" と呼ばれています。
- 異なる値を変数に代入する。
- 文字列または配列の最後の項目として、変数の値を挿入または "追加" します。
変数は、それを作成したワークフロー インスタンスの範囲内でのみ、グローバルに存在します。 また、ワークフロー インスタンス内で、ループのイテレーションを越えて存続します。 アクションの出力を参照するときはアクションの名前を使用するのが普通ですが、変数を参照するときは、変数の名前をトークンとして使用します。
重要
既定では、For each ループのイテレーションは並列で実行されます。 ループ内で変数を使用すると、順番にループが実行されるので、変数から予測可能な結果が返されます。
前提条件
Azure アカウントとサブスクリプション。 サブスクリプションをお持ちでない場合には、無料の Azure アカウントにサインアップしてください。
変数を作成するロジック アプリ ワークフローと、ワークフローを開始するトリガー。
変数の作成と操作のためのアクションを追加する前に、ワークフローの最初のステップとしてトリガーを設定する必要があります。 詳細については、トリガーまたはアクションを使用してワークフローを構築するに関するページを参照してください。
次に示す手順では Azure portal を使用しますが、適切な Azure Logic Apps 拡張機能を使用すれば、次のツールでロジック アプリ ワークフローをビルドすることもできます。
- 従量課金ワークフロー: Visual Studio Code
- Standard ワークフロー: Visual Studio Code
従量課金と Standard のどちらのワークフローを使用しているかに基づいて、対応する手順に従ってください。
変数を初期化する
変数の作成とそのデータ型および初期値の宣言は、ワークフローの 1 つのアクションを使用して行うことができます。 変数はグローバル レベルでのみ宣言でき、その範囲をスコープや条件、ループ内に限定することはできません。
Azure portal で、ワークフローをデザイナーで開きます。
変数に関する次の情報を指定します。
プロパティ 必須 値 説明 名前 はい <variable-name> 初期化する変数の名前 Type はい <変数型> 変数のデータ型 Value いいえ <スタート値> 変数の初期値
ヒント: 省略することもできますが、変数の開始値を常に把握するため、この値を設定することをお勧めします。次の例は、このサンプル変数の初期値を示しています。
次に、シナリオに必要なアクションを追加します。 操作が完了したら、デザイナーのツールバーで、[保存] を選択します。
デザイナーからコード ビューに切り替えると、次の例のように、変数を初期化するアクションが JavaScript Object Notationn (JSON) 形式のワークフロー定義内でどのように表示されるかを確認できます。
"actions": {
"Initialize_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "Count",
"type": "Integer",
"value": 0
}
]
},
"runAfter": {}
}
}
Note
変数を初期化するアクションには、配列として構成されている "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'))}
変数の値を増やす
変数を特定の定数値で増やす ("増分する") には、変数の値を増やすアクションをワークフローに追加します。 このアクションが正しく機能するのは、整数型と浮動小数点型の変数だけです。
ワークフロー デザイナーで、この一般的な手順に従って、変数の値を増やすという名前のアクションを追加します。
このアクションについて、次の情報を提供します。
プロパティ 必須 値 説明 名前 はい <variable-name> 値を増やす変数の名前 Value いいえ <増分値> 変数の値を増やすために使用する値。 既定値は 1
です。
ヒント: 省略することもできますが、変数の値を増やす場合の具体的な値を常に把握するため、この値を設定することをお勧めします。次の例は、このアクションのサンプル値を示しています。
完了したら、ワークフローを保存します。 デザイナーのツール バーで、[保存] を選択します。
デザイナーからコード ビューに切り替えると、次の例のように、変数の値を増やすアクションが JSON 形式のワークフローの定義内でどのように表示されるかを確認できます。
"actions": {
"Increment_variable": {
"type": "IncrementVariable",
"inputs": {
"name": "Count",
"value": 1
},
"runAfter": {}
}
},
例: ループ カウンターを作成する
変数は、ループの実行回数をカウントする目的でよく使用されます。 この例では、ループを作成してメール内の添付ファイルの数を数えて、このタスクのために変数を作成して使用する方法を示しています。
Azure portal で、空のワークフローを使用して従量課金ロジック アプリ リソースを作成します。 新しいメールと添付ファイルをチェックするトリガーを追加します。
この例では、Office 365 Outlook の "新しい電子メールが届いたとき" のトリガーを使用します。 このトリガーは、メールに添付ファイルが含まれているときにだけ作動するように設定できます。 ただし、添付ファイルを含んだ新しいメールをチェックするものであれば、どのコネクタを使用してもかまいません (Outlook.com コネクタなど)。
トリガーで添付ファイルの有無をチェックして、それをワークフローに渡すには、次のプロパティで [はい] を選択します。
- 添付ファイルのみ
- 添付ファイルを含める
開始値が
0
に設定されている Count という名前の整数変数を作成するには、変数の初期化アクションを追加します。各添付ファイルを反復処理するには、この一般的な手順に従って For each ループと呼ばれるアクションを追加します。
ループで、[前の手順の出力を選択する] という名前のボックス内を選択します。 動的コンテンツ リストが表示されたら、[新しい電子メールが届いたとき] の [添付ファイル] を選択します。
Attachments プロパティは、トリガーの出力から電子メールの添付ファイルを含む配列をループに渡し、ワークフローが反復処理できるようにします。
For each ループで、[アクションの追加] を選択します。
次の一般的な手順に従って、変数の値を増やすというアクションをループに追加します。
Note
[変数の値を増やす] アクションがループ内に表示されることを確認します。 ループの外側に表示されている場合は、このアクションをループの内側にドラッグします。
[変数の値を増やす] アクションの [名前] ボックスの一覧から Count 変数を選択します。 Value プロパティを
1
に設定します。ループの下に、添付ファイルの数を送信するアクションを追加します。 たとえば、そのアクション内で、Count 変数の値を挿入します。
完了したら、ワークフローを保存します。 デザイナーのツール バーで、[保存] を選択します。
ワークフローをテストする
ワークフローを手動でトリガーするには、対応する手順に従います。
従量課金ワークフロー
デザイナーのワークフロー ツール バーの [トリガーの実行]>[実行] を選択してワークフローを手動で開始します。
Standard ワークフロー
ワークフロー メニューで、[概要] を選択します。 ツール バーの [実行]>[実行] を選択します。
この例で使用した電子メール アカウントに、添付ファイルを少なくとも 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 | いいえ | <decrement-value> | 変数の値を減らすのに使用する値。 既定値は 1 です。 ヒント: 省略することもできますが、変数の具体的な減分値を常に把握するため、この値を設定することをお勧めします。 |
デザイナーからコード ビューに切り替えると、次の例のように、JSON 形式のワークフロー定義内で変数の値を減らすアクションがどのように表示されるかを確認できます。
"actions": {
"Decrement_variable": {
"type": "DecrementVariable",
"inputs": {
"name": "Count",
"value": 1
},
"runAfter": {}
}
},
変数を設定する
既存の変数に異なる値を割り当てる手順は、次の点を除いて、変数の値を増やす場合と同じです。
検索して選択するアクションは [変数の設定] になります。
変数の名前と代入する値を指定します。 新しい値と変数のデータ型が一致している必要があります。 このアクションには既定値がないため、値は必須です。
次の表では、変数を設定するアクションの情報について説明します。
プロパティ | 必須 | 値 | 説明 |
---|---|---|---|
名前 | はい | <variable-name> | 変更する変数の名前 |
Value | はい | <new-value> | 変数に代入する値。 両方のデータ型が一致している必要があります。 |
Note
変数の値を増やすまたは値を減らす場合を除き、ループ内で変数に変更を加えると、予期しない結果を招く "可能性" があります。既定では、ループがパラレル (またはコンカレント) に実行されるためです。 このような場合は、ループを逐次的に実行するように設定してみてください。 たとえば、ループ内で変数の値を参照するとき、ループ インスタンスの最初と最後で値が一致していなければならない場合は、次の手順に従ってループの動作を変更してください。
ループで、ループ設定を見つけて開きます。
ワークフローの種類に基づいて、対応する手順を実施します。
従量課金: [コンカレンシー制御] の設定を [オフ] から [オン] に変更します。
Standard: [全般] で [コンカレンシー制御] の設定を [オフ] から [オン] に変更します。
[並列処理の次数] スライダーをドラッグして 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" ]
}
}
},
変数に追加する
文字列を格納する変数または配列を格納する変数では、その文字列または配列の最後の要素として変数の値を挿入 ("追加") することができます。 変数の値を増やす手順に従うことができますが、次の例外があります。
対象の変数が文字列か配列かによって、次のいずれかのアクションを検索して選択します。
- 文字列変数に追加
- 配列変数に追加
文字列または配列の最後の要素として追加する値を指定します。 この値は必須です。
次の表では、[...に追加する] アクションの情報について説明します。
プロパティ | 必須 | 値 | 説明 |
---|---|---|---|
名前 | はい | <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" ]
}
}
},