Azure Logic Apps 内でインライン コードを使用してコード スニペットを追加および実行するAdd and run code snippets by using inline code in Azure Logic Apps

ロジック アプリ内でコードの一部を実行するときは、組み込みのインライン コード アクションをロジック アプリのワークフロー内にステップとして追加します。When you want to run a piece of code inside your logic app, you can add the built-in Inline Code action as a step in your logic app's workflow. このアクションが最もうまく機能するのは、実行するコードが次のシナリオに適合しているときです。This action works best when you want to run code that fits this scenario:

  • JavaScript 内で実行する。Runs in JavaScript. 追加の言語がまもなく提供される。More languages coming soon.

  • 実行の完了に要する時間が 5 秒以内。Finishes running in five seconds or fewer.

  • 処理するデータのサイズが最大 50 MB。Handles data up to 50 MB in size.

  • 使用する Node.js のバージョンが 8.11.1 である。Uses Node.js version 8.11.1. 詳細については、「標準ビルトイン オブジェクト」を参照してください。For more information, see Standard built-in objects.

    注意

    require() 関数は、JavaScript を実行するインライン コード アクションではサポートされていません。The require() function isn't supported by the Inline Code action for running JavaScript.

このアクションでは、コード スニペットが実行され、そのスニペットから [結果] という名前のトークンとして出力が返されます。このトークンは、ロジック アプリ内の後続のアクションで使用できます。This action runs the code snippet and returns the output from that snippet as a token named Result, which you can use in subsequent actions in your logic app. コードの関数を作成する別のシナリオでは、ロジック アプリ内で Azure 関数の作成および呼び出しを試みてください。For other scenarios where you want to create a function for your code, try creating and calling an Azure function in your logic app.

この記事では、Office 365 Outlook アカウントに新しい電子メールが届いたときに、サンプルのロジック アプリがトリガーされます。In this article, the example logic app triggers when a new email arrives in an Office 365 Outlook account. このコード スニペットでは、電子メール本文に表示されているすべての電子メール アドレスが抽出されて、返されます。The code snippet extracts and returns any email addresses that appear in the email body.

サンプルの概要

前提条件Prerequisites

インライン コードを追加するAdd inline code

  1. Azure portal のロジック アプリ デザイナーでロジック アプリを開きます (まだ開いていない場合)。If you haven't already, in the Azure portal, open your logic app in the Logic App Designer.

  2. デザイナーを使用して、ロジック アプリのワークフロー内の必要な場所にインライン コード アクションを追加します。In the designer, add the Inline Code action at the location that you want in your logic app's workflow.

    • ワークフローの最後にアクションを追加するには、 [新しいステップ] を選択します。To add the action at the end of your workflow, choose New step.

    • 既存のステップ間にアクションを追加するには、それらのステップを接続している矢印の上にマウス ポインターを移動します。To add the action between existing steps, move your mouse pointer over the arrow that connects those steps. プラス記号 ( + )を選択し、 [アクションの追加] を選択します。Choose the plus sign (+), and select Add an action.

    この例では、Office 365 Outlook トリガーの下にインライン コード アクションが追加されます。This example adds the Inline Code action under the Office 365 Outlook trigger.

    新規ステップの追加

  3. [アクションを選択してください] の下の検索ボックス内に、フィルターとして「inline code (インライン コード)」と入力します。Under Choose an action, in the search box, enter "inline code" as your filter. アクションの一覧から、次のアクションを選択します。 [JavaScript コードの実行]From the actions list, select this action: Execute JavaScript Code

    [JavaScript コードの実行] の選択

    アクションがデザイナー内に表示されます。アクションには、いくつかの既定のサンプル コード (return ステートメントを含む) が入っています。The action appears in the designer and contains some default example code, including a return statement.

    既定のサンプル コードを含むインライン コード アクション

  4. [コード] ボックス内でサンプル コードを削除して、実行するコードを入力します。In the Code box, delete the sample code, and enter the code that you want to run. メソッド内に配置するコードを作成します。ただし、メソッド シグネチャは定義しません。Write code that you'd put inside a method, but without defining the method signature.

    認識済みのキーワードを入力すると、オートコンプリートのリストが表示され、用意されているキーワードから選択できるようになります。例を次に示します。When you type a recognized keyword, the autocomplete list appears so that you can select from available keywords, for example:

    キーワードのオートコンプリート リスト

    このサンプルのコード スニペットで最初に作成される変数には、入力テキストの一致パターンを指定する "正規表現" が格納されます。This example code snippet first creates a variable that stores a regular expression, which specifies a pattern to match in input text. 次に作成される変数には、トリガーからの電子メール本文データが格納されます。The code then creates a variable that stores the email body data from the trigger.

    変数の作成

    トリガーや以前のアクションからの結果を簡単に参照できるようにするため、カーソルが [コード] ボックス内にある間は、動的コンテンツのリストが表示されます。To make the results from the trigger and previous actions easier to reference, the dynamic content list appears while your cursor is inside the Code box. この例では、トリガーからの使用可能な結果がリストに表示されています (これには [本文] トークンが含まれており、選択できるようになっています)。For this example, the list shows available results from the trigger, including the Body token, which you can now select.

    [本文] トークンを選択すると、インライン コード アクションにより、トークンが、電子メールの Body プロパティ値を参照する workflowContext オブジェクトに解決されます。After you select the Body token, the inline code action resolves the token to a workflowContext object that references the email's Body property value:

    結果の選択

    [コード] ボックス内で、スニペットは、読み取り専用の workflowContext オブジェクトを入力として使用できます。In the Code box, your snippet can use the read-only workflowContext object as input. このオブジェクト内のサブプロパティにより、コードからワークフロー内のトリガーや以前のアクションの結果にアクセスできます。This object has subproperties that give your code access to the results from the trigger and previous actions in your workflow. 詳細については、このトピック内で後述する「コードでトリガーとアクションの結果を参照する」セクションを参照してください。For more information, see this section later in this topic: Reference trigger and action results in your code.

    注意

    コード スニペットで参照されるアクション名にドット (.) 演算子が使用されている場合は、それらのアクション名を [アクション] パラメーターに追加する必要があります。If your code snippet references action names that use the dot (.) operator, you must add those action names to the Actions parameter. これらの参照では、アクション名を大かっこ ([]) と引用符で囲む必要もあります。例を次に示します。Those references must also enclose the action names with square brackets ([]) and quotation marks, for example:

    // Correct
    workflowContext.actions["my.action.name"].body

    // Incorrect
    workflowContext.actions.my.action.name.body

    インライン コード アクションでは、return ステートメントは不要ですが、return ステートメントの結果は、後のアクションで [結果] トークンを通じて参照できます。The inline code action doesn't require a return statement, but the results from a return statement are available for reference in later actions through the Result token. たとえば、コード スニペットは、正規表現で電子メール本文内の一致を検索する match() 関数を呼び出して結果を返します。For example, the code snippet returns the result by calling the match() function, which finds matches in the email body against the regular expression. [作成] アクションは、 [結果] トークンを使用して、インライン コード アクションの結果を参照し、1 つの結果を作成します。The Compose action uses the Result token to reference the results from the inline code action and creates a single result.

    完成したロジック アプリ

  5. 完了したら、ロジック アプリを保存します。When you're done, save your logic app.

コードでトリガーとアクションの結果を参照するReference trigger and action results in your code

workflowContext オブジェクトの構造を次に示します。この構造には、actionstrigger、および workflow の各サブプロパティが含まれています。The workflowContext object has this structure, which includes the actions, trigger, and workflow subproperties:

{
   "workflowContext": {
      "actions": {
         "<action-name-1>": @actions('<action-name-1>'),
         "<action-name-2>": @actions('<action-name-2>')
      },
      "trigger": {
         @trigger()
      },
      "workflow": {
         @workflow()
      }
   }
}

これらのサブプロパティの詳細を次の表に示します。This table contains more information about these subproperties:

プロパティProperty TypeType 説明Description
actions オブジェクト コレクションObject collection コード スニペットを実行する前に実行したアクションの結果オブジェクトです。Result objects from actions that run before your code snippet runs. 各オブジェクトには、key-value ペアが含まれています。ここで、key はアクション名、value は @actions('<action-name>') を含む actions() 関数の呼び出しに相当します。Each object has a key-value pair where the key is the name of an action, and the value is equivalent to calling the actions() function with @actions('<action-name>'). アクションの名前で使用されるアクション名は、基盤となるワークフロー定義で使用されるアクション名と同じです。アクション名内のスペース (" ") がアンダー スコア () で置き換えられています。The action's name uses the same action name that's used in the underlying workflow definition, which replaces spaces (" ") in the action name with underscores (). このオブジェクトにより、現在実行されているワークフロー インスタンスからアクション プロパティの値にアクセスできます。This object provides access to action property values from the current workflow instance run.
trigger ObjectObject トリガーの結果オブジェクトで、 trigger() 関数の呼び出しと同じです。Result object from the trigger and equivalent to calling the trigger() function. このオブジェクトにより、現在実行されているワークフロー インスタンスからトリガー プロパティの値にアクセスできます。This object provides access to trigger property values from the current workflow instance run.
workflow ObjectObject ワークフロー オブジェクトで、workflow() 関数の呼び出しと同じです。The workflow object and equivalent to calling the workflow() function. このオブジェクトにより、現在実行されているワークフロー インスタンスからワークフロー プロパティの値 (ワークフロー名や実行 ID など) にアクセスできます。This object provides access to workflow property values, such as the workflow name, run ID, and so on, from the current workflow instance run.

このトピックの例の場合、workflowContext オブジェクトには、これらのプロパティが含まれており、コードからアクセスすることが可能です。In this topic's example, the workflowContext object has these properties that your code can access:

{
   "workflowContext": {
      "trigger": {
         "name": "When_a_new_email_arrives",
         "inputs": {
            "host": {
               "connection": {
                  "name": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Web/connections/office365"
               }
            },
            "method": "get",
            "path": "/Mail/OnNewEmail",
            "queries": {
               "includeAttachments": "False"
            }
         },
         "outputs": {
            "headers": {
               "Pragma": "no-cache",
               "Content-Type": "application/json; charset=utf-8",
               "Expires": "-1",
               "Content-Length": "962095"
            },
            "body": {
               "Id": "AAMkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgBGAAAAAABmZwxUQtCGTqSPpjjMQeD",
               "DateTimeReceived": "2019-03-28T19:42:16+00:00",
               "HasAttachment": false,
               "Subject": "Hello World",
               "BodyPreview": "Hello World",
               "Importance": 1,
               "ConversationId": "AAQkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgAQ",
               "IsRead": false,
               "IsHtml": true,
               "Body": "Hello World",
               "From": "<sender>@<domain>.com",
               "To": "<recipient-2>@<domain>.com;<recipient-2>@<domain>.com",
               "Cc": null,
               "Bcc": null,
               "Attachments": []
            }
         },
         "startTime": "2019-05-03T14:30:45.971564Z",
         "endTime": "2019-05-03T14:30:50.1746874Z",
         "scheduledTime": "2019-05-03T14:30:45.8778117Z",
         "trackingId": "1cd5ffbd-f989-4df5-a96a-6e9ce31d03c5",
         "clientTrackingId": "08586447130394969981639729333CU06",
         "originHistoryName": "08586447130394969981639729333CU06",
         "code": "OK",
         "status": "Succeeded"
      },
      "workflow": {
         "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>",
         "name": "<logic-app-workflow-name>",
         "type": "Microsoft.Logic/workflows",
         "location": "<Azure-region>",
         "run": {
            "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>/runs/08586453954668694173655267965CU00",
            "name": "08586453954668694173655267965CU00",
            "type": "Microsoft.Logic/workflows/runs"
         }
      }
   }
}

パラメーターを追加するAdd parameters

場合によっては、コードが依存関係として参照するトリガーや特定のアクションの結果をインライン コード アクションに含めることを明示的に要求するために、 [トリガー] パラメーターや [アクション] パラメーターを追加することが必要となります。In some cases, you might have to explicitly require that the Inline Code action includes results from the trigger or specific actions that your code references as dependencies by adding the Trigger or Actions parameters. このオプションは、参照する結果が実行時に見つからないシナリオで役立ちます。This option is useful for scenarios where the referenced results aren't found at run time.

ヒント

コードを再利用する予定の場合は、 [コード] ボックスを使用してプロパティへの参照を追加し、解決されたトークン参照がコードに含まれるようにします。トリガーやアクションを明示的な依存関係として追加しないでください。If you plan to reuse your code, add references to properties by using the Code box so that your code includes the resolved token references, rather than adding the trigger or actions as explicit dependencies.

たとえば、Office 365 Outlook コネクタの [承認の電子メールを送信します] アクションからの SelectedOption の結果を参照するコードがあるものとします。For example, suppose you have code that references the SelectedOption result from the Send approval email action for the Office 365 Outlook connector. 作成時、Logic Apps エンジンは、トリガーやアクションの結果が参照されたかをコードを分析して調べ、それらの結果を自動的に含めます。At create time, the Logic Apps engine analyzes your code to determine whether you've referenced any trigger or action results and includes those results automatically. 実行時、参照されるトリガーやアクションの結果が、指定された workflowContext オブジェクトで使用できないというエラーが発生した場合は、そのトリガーやアクションを明示的な依存関係として追加します。At run time, should you get an error that the referenced trigger or action result isn't available in the specified workflowContext object, you can add that trigger or action as an explicit dependency. この例では、 [アクション] パラメーターを追加して、 [承認の電子メールを送信します] アクションの結果をインライン コード アクションに明示的に含めることを指定します。In this example, you add the Actions parameter and specify that the Inline Code action explicitly include the result from the Send approval email action.

これらのパラメーターを追加するには、 [新しいパラメーターの追加] リストを開き、必要なパラメーターを選択します。To add these parameters, open the Add new parameter list, and select the parameters you want:

パラメーターの追加

パラメーターParameter 説明Description
アクションActions 以前のアクションの結果を含めます。Include results from previous actions. アクションの結果を含める」を参照してください。See Include action results.
トリガーTrigger トリガーの結果を含めます。Include results from the trigger. トリガーの結果を含める」を参照してください。See Include trigger results.

トリガーの結果を含めるInclude trigger results

[トリガー] を選択した場合は、トリガーの結果を含めるかどうかを尋ねられます。If you select Triggers, you're prompted whether to include trigger results.

  • [トリガー] リストで [はい] を選択します。From the Trigger list, select Yes.

アクションの結果を含めるInclude action results

[アクション] を選択した場合は、追加するアクションを尋ねられます。If you select Actions, you're prompted for the actions that you want to add. ただし、アクションの追加を開始する前に、ロジック アプリの基礎となるワークフロー定義に表示されるバージョンのアクション名が必要です。However, before you start adding actions, you need the version of the action name that appears in the logic app's underlying workflow definition.

  • この機能では、変数、ループ、およびイテレーションのインデックスはサポートされません。This capability doesn't support variables, loops, and iteration indexes.

  • ロジック アプリのワークフロー定義の名前では、スペースではなく、アンダー スコア () が使用されます。Names in your logic app's workflow definition use an underscore (), not a space.

  • アクション名にドット演算子 (.) が使用されている場合は、次の例のようにそれらの演算子を含めてください。For action names that use the dot operator (.), include those operators, for example:

    My.Action.Name

  1. デザイナーのツールバーで [コード ビュー] を選択し、actions 属性内のアクション名を検索します。On the designer toolbar, choose Code view, and search inside the actions attribute for the action name.

    たとえば、Send_approval_email_ は、 [承認の電子メールを送信します] アクションの JSON 名です。For example, Send_approval_email_ is the JSON name for the Send approval email action.

    JSON のアクション名の検索

  2. デザイナー ビューに戻るには、コード ビューのツールバー上で [デザイナー] を選択します。To return to designer view, on the code view toolbar, choose Designer.

  3. 最初のアクションを追加するには、 [Actions Item - 1](アクション項目 - 1) ボックスにアクションの JSON 名を入力します。To add the first action, in the Actions Item - 1 box, enter the action's JSON name.

    最初のアクションの入力

  4. 別のアクションを追加するには、 [新しい項目の追加] を選択します。To add another action, choose Add new item.

リファレンスReference

ワークフロー定義言語を使用したロジック アプリの基盤となるワークフロー定義での [JavaScript コードの実行] アクションの構造と構文の詳細については、このアクションのリファレンス セクションを参照してください。For more information about the Execute JavaScript Code action's structure and syntax in your logic app's underlying workflow definition using the Workflow Definition Language, see this action's reference section.

次の手順Next steps

Azure Logic Apps のコネクタの詳細について学習します。Learn more about Connectors for Azure Logic Apps