Azure Functions をローカルでコーディングしてテストするCode and test Azure Functions locally

Azure Portal では Azure Functions の開発用およびテスト用ツールの完全なセットが提供されていますが、多くの開発者はローカルでの開発を選択します。While the Azure portal provides a full set of tools for developing and testing Azure Functions, many developers prefer a local development experience. Azure Functions では、お気に入りのコード エディターとローカル開発ツールを使用して、ローカル コンピューターで簡単に関数を開発し、テストできます。Azure Functions makes it easy to use your favorite code editor and local development tools to develop and test your functions on your local computer. 独自の関数を使用して Azure でイベントをトリガーし、ローカル コンピューターで C# 関数や JavaScript 関数をデバッグできます。Your functions can trigger on events in Azure, and you can debug your C# and JavaScript functions on your local computer.

Visual Studio C# の開発者は、Azure Functions を Visual Studio 2017 に統合することもできます。If you are a Visual Studio C# developer, Azure Functions also integrates with Visual Studio 2017.

重要

同じ関数アプリにローカル開発とポータル開発を混在させないでください。Do not mix local development with portal development in the same function app. ローカル プロジェクトから関数を発行するときは、ポータルではプロジェクト コードを管理または変更しないようにしてください。When you create and publish functions from a local project, you should not try to maintain or modify project code in the portal.

Azure Functions Core Tools のインストールInstall the Azure Functions Core Tools

Azure Functions Core Tools は、ローカル バージョンの Azure Functions ランタイムで、ローカルの開発コンピューターで実行できます。Azure Functions Core Tools is a local version of the Azure Functions runtime that you can run on your local development computer. エミュレーターまたはシミュレーターではありません。It's not an emulator or simulator. Azure で Functions を実行するランタイムと同じです。It's the same runtime that powers Functions in Azure. Azure Functions Core Tools には 2 つのバージョンがあります。1 つはランタイムのバージョン 1.x 用、もう 1 つはバージョン 2.x 用です。There are two versions of Azure Functions Core Tools, one for version 1.x of the runtime and one for version 2.x. 両方のバージョンは npm パッケージとして用意されています。Both versions are provided as an npm package.

注意

いずれかのバージョンをインストールする前に、npm を含む NodeJS をインストールする必要があります。Before you install either version, you must install NodeJS, which includes npm. 2x バージョンのツールの場合、Node.js 8.5 以降のバージョンのみがサポートされています。For version 2.x of the tools, only Node.js 8.5 and later versions are supported.

バージョン 1.x ランタイムVersion 1.x runtime

元のバージョンのツールは、Functions 1.x ランタイムを使用します。The original version of the tools uses the Functions 1.x runtime. このバージョンは .NET Framework を使用し、Windows コンピューターでのみサポートされます。This version uses the .NET Framework and is only supported on Windows computers. 次のコマンドを使用して、バージョン 1.x ツールをインストールします。Use the following command to install the version 1.x tools:

npm install -g azure-functions-core-tools

バージョン 2.x ランタイムVersion 2.x runtime

バージョン 2.x のツールは、.NET Core 上に構築されている Azure Functions ランタイム 2.x を使用します。Version 2.x of the tools uses the Azure Functions runtime 2.x that is built on .NET Core. このバージョンは、.NET Core 2.x がサポートするすべてのプラットフォームでサポートされています。This version is supported on all platforms .NET Core 2.x supports. クロスプラットフォーム開発時、または Functions ランタイム 2.x が必要なときに、このバージョンを使用します。Use this version for cross-platform development and when the Functions runtime 2.x is required.

重要

Azure Functions Core Tools をインストールする前に、.NET Core 2.0 をインストールします。Before installing Azure Functions Core Tools, install .NET Core 2.0.

Azure Functions ランタイム 2.0 はプレビュー段階であり、現在のところ、Azure Functions のすべての機能はサポートされていません。Azure Functions runtime 2.0 is in preview, and currently not all features of Azure Functions are supported. 詳細については、「Azure Functions runtime 2.0 known issues」(Azure Functions ランタイム 2.0 の既知の問題) を参照してくださいFor more information, see Azure Functions runtime 2.0 known issues

次のコマンドを使用して、バージョン 2.0 ツールをインストールします。Use the following command to install the version 2.0 tools:

npm install -g azure-functions-core-tools@core

Ubuntu にインストールする場合は、次のように sudo を使用します。When installing on Ubuntu use sudo, as follows:

sudo npm install -g azure-functions-core-tools@core

macOS および Linux 上にインストールする場合、次のように unsafe-perm フラグを含める必要があります。When installing on macOS and Linux, you may need to include the unsafe-perm flag, as follows:

sudo npm install -g azure-functions-core-tools@core --unsafe-perm true

Azure Functions Core Tools の実行Run Azure Functions Core Tools

Azure Functions Core Tools で追加されるコマンドのエイリアスを次に示します。Azure Functions Core Tools adds the following command aliases:

  • funcfunc
  • azfunazfun
  • azurefunctionsazurefunctions

これらすべてのエイリアスは、func が例に示されている場所で使用できます。Any of these aliases can be used where func is shown in the examples.

func init MyFunctionProj

ローカル関数プロジェクトを作成するCreate a local Functions project

ローカルで実行中の場合、Functions プロジェクトは、host.json ファイルと local.settings.json ファイルが含まれるディレクトリです。When running locally, a Functions project is a directory that has the files host.json and local.settings.json. このディレクトリは、Azure の関数アプリに相当します。This directory is the equivalent of a function app in Azure. Azure Functions のフォルダー構造の詳細については、Azure Functions の開発者向けガイドを参照してください。To learn more about the Azure Functions folder structure, see the Azure Functions developers guide.

ターミナル ウィンドウまたはコマンド プロンプトで、次のコマンドを実行してプロジェクトおよびローカルの Git リポジトリを作成します。In the terminal window or from a command prompt, run the following command to create the project and local Git repository:

func init MyFunctionProj

出力は次のテキストのようになります。The output looks like the following example:

Writing .gitignore
Writing host.json
Writing local.settings.json
Created launch.json
Initialized empty Git repository in D:/Code/Playground/MyFunctionProj/.git/

ローカル Git リポジトリを使用せずにプロジェクトを作成する場合は、--no-source-control [-n] オプションを使用します。To create the project without a local Git repository, use the --no-source-control [-n] option.

ローカル設定ファイルLocal settings file

local.settings.json ファイルには、アプリの設定、接続文字列、および Azure Functions Core Tools の設定が格納されます。The file local.settings.json stores app settings, connection strings, and settings for Azure Functions Core Tools. その構造を次に示します。It has the following structure:

{
  "IsEncrypted": false,   
  "Values": {
    "AzureWebJobsStorage": "<connection string>", 
    "AzureWebJobsDashboard": "<connection string>" 
  },
  "Host": {
    "LocalHttpPort": 7071, 
    "CORS": "*" 
  },
  "ConnectionStrings": {
    "SQLConnectionString": "Value"
  }
}
設定Setting DescriptionDescription
IsEncryptedIsEncrypted true に設定すると、すべての値がローカル コンピューターのキーを使用して暗号化されます。When set to true, all values are encrypted using a local machine key. func settings コマンドと共に使用されます。Used with func settings commands. 既定値は false です。Default value is false.
ValuesValues ローカルで実行するときに使用されるアプリケーション設定のコレクションです。Collection of application settings used when running locally. AzureWebJobsStorageAzureWebJobsDashboard は例です。完全な一覧については、アプリの設定リファレンスに関するページを参照してください。AzureWebJobsStorage and AzureWebJobsDashboard are examples; for a complete list, see app settings reference.
HostHost このセクションの設定により、ローカルで実行時の Functions ホスト プロセスをカスタマイズできます。Settings in this section customize the Functions host process when running locally.
LocalHttpPortLocalHttpPort ローカルの Functions ホストの実行時に使用される既定のポートを設定します (func host startfunc run)。Sets the default port used when running the local Functions host (func host start and func run). --port コマンド ライン オプションは、この値に優先します。The --port command-line option takes precedence over this value.
CORSCORS クロス オリジン リソース共有 (CORS) で許可されるオリジンを定義します。Defines the origins allowed for cross-origin resource sharing (CORS). スペースなしのコンマ区切りのリストでオリジンを指定します。Origins are supplied as a comma-separated list with no spaces. ワイルドカード値 (\) がサポートされており、これによって任意のオリジンからの要求を許可できます。The wildcard value (****) is supported, which allows requests from any origin.
ConnectionStringsConnectionStrings 関数のデータベース接続文字列が含まれています。Contains the database connection strings for your functions. このオブジェクト内の接続文字列は、System.Data.SqlClient のプロバイダーの種類と共に、環境に追加されます。Connection strings in this object are added to the environment with the provider type of System.Data.SqlClient.

トリガーとバインディングのほとんどには、環境変数またはアプリ設定の名前にマップされた Connection プロパティが含まれています。Most triggers and bindings have a Connection property that maps to the name of an environment variable or app setting. 各接続プロパティについては、local.settings.json ファイルに定義されたアプリ設定である必要があります。For each connection property, there must be app setting defined in local.settings.json file.

この設定は、コードの中で環境変数として読み込むこともできます。These settings can also be read in your code as environment variables. C# の場合は、System.Environment.GetEnvironmentVariable またはConfigurationManager.AppSettings を使用します。In C#, use System.Environment.GetEnvironmentVariable or ConfigurationManager.AppSettings. JavaScript では、process.env を使用します。In JavaScript, use process.env. システム環境変数として指定されている設定は、local.settings.json ファイル内の値よりも優先されます。Settings specified as a system environment variable take precedence over values in the local.settings.json file.

local.settings.json ファイル内の設定は、ローカルで実行されている Functions ツールでのみ使用されます。Settings in the local.settings.json file are only used by Functions tools when running locally. 既定では、プロジェクトが Azure に発行されても、これらの設定は自動的に移行されません。By default, these settings are not migrated automatically when the project is published to Azure. 発行する際--publish-local-settings スイッチを使用して、これらの設定が Azure 内の関数アプリに追加されていることを確認してください。Use the --publish-local-settings switch when you publish to make sure these settings are added to the function app in Azure.

有効なストレージ接続文字列が AzureWebJobsStorage に設定されていない場合は、次のエラー メッセージが表示されます。When no valid storage connection string is set for AzureWebJobsStorage, the following error message is shown:

local.settings.json に AzureWebJobsStorage の値がありません。Missing value for AzureWebJobsStorage in local.settings.json. これは HTTP 以外のすべてのトリガーに必要です。This is required for all triggers other than HTTP. "func azure functionapp fetch-app-settings " を実行するか、local.settings.json で接続文字列を指定することができます。You can run 'func azure functionapp fetch-app-settings ' or specify a connection string in local.settings.json.

注意

ローカルな開発では、Azure Functions ツールによる Azure ストレージ エミュレーターの使用はサポートされません。Use of the Azure Storage Emulator is not supported by Azure Functions tools when developing locally.

アプリケーションの設定の構成Configure app settings

接続文字列の値を設定するには、次のいずれかのオプションを構成します。To set a value for connection strings, you can do one of the following options:

  • Azure Storage Explorer で、接続文字列を入力します。Enter the connection string from Azure Storage Explorer.
  • 次のコマンドのいずれかを使用します。Use one of the following commands:

    func azure functionapp fetch-app-settings <FunctionAppName>
    
    func azure storage fetch-connection-string <StorageAccountName>
    

    どちらのコマンドも、最初に Azure にサインインする必要があります。Both commands require you to first sign-in to Azure.

関数を作成するCreate a function

関数を作成するには、次のコマンドを実行します。To create a function, run the following command:

func new

func new では、次の省略可能な引数がサポートされています。func new supports the following optional arguments:

引数Argument DescriptionDescription
--language -l テンプレート プログラミング言語。C#、F#、JavaScript など。The template programming language, such as C#, F#, or JavaScript.
--template -t テンプレート名。The template name.
--name -n 関数名。The function name.

たとえば、JavaScript HTTP トリガーを作成するには、次を実行します。For example, to create a JavaScript HTTP trigger, run:

func new --language JavaScript --template HttpTrigger --name MyHttpTrigger

キューによってトリガーされる関数を作成するには、次を実行します。To create a queue-triggered function, run:

func new --language JavaScript --template QueueTrigger --name QueueTriggerJS

関数をローカルで実行するRun functions locally

Functions プロジェクトを実行するには、Functions ホストを実行します。To run a Functions project, run the Functions host. ホストによって、プロジェクトのすべての関数に対するトリガーが有効になります。The host enables triggers for all functions in the project:

func host start

func host start では、次のオプションがサポートされています。func host start supports the following options:

オプションOption DescriptionDescription
--port -p ローカル ポート。このポートでリッスンします。The local port to listen on. 既定値: 7071。Default value: 7071.
--debug <type> オプションは VSCodeVS です。The options are VSCode and VS.
--cors CORS オリジンのコンマ区切りのリスト (スペースなし)。A comma-separated list of CORS origins, with no spaces.
--nodeDebugPort -n 使用するノード デバッガーのポート。The port for the node debugger to use. 既定値: launch.json または 5858 の値。Default: A value from launch.json or 5858.
--debugLevel -d コンソール トレース レベル (オフ、詳細、情報、警告、またはエラー)。The console trace level (off, verbose, info, warning, or error). 既定値: 情報。Default: Info.
--timeout -t Functions ホスト開始のタイムアウト (秒単位)。The timeout for the Functions host to start, in seconds. 既定値: 20 秒。Default: 20 seconds.
--useHttps https://localhost:{port} rather than to http://localhost:{port} にバインドします。Bind to https://localhost:{port} rather than to http://localhost:{port}. 既定では、このオプションにより、信頼された証明書がコンピューターに作成されます。By default, this option creates a trusted certificate on your computer.
--pause-on-error プロセスを終了する前に、追加入力を一時停止します。Pause for additional input before exiting the process. 統合開発環境 (IDE) から Azure Functions Core Tools を起動する場合に役立ちます。Useful when launching Azure Functions Core Tools from an integrated development environment (IDE).

Functions ホストの起動時、HTTP によってトリガーされる関数の URL が出力されます。When the Functions host starts, it outputs the URL of HTTP-triggered functions:

Found the following functions:
Host.Functions.MyHttpTrigger

ob host started
Http Function MyHttpTrigger: http://localhost:7071/api/MyHttpTrigger

VS Code または Visual Studio でのデバッグDebug in VS Code or Visual Studio

デバッガーをアタッチするには、--debug 引数を渡します。To attach a debugger, pass the --debug argument. JavaScript 関数をデバッグするには、Visual Studio Code を使用します。To debug JavaScript functions, use Visual Studio Code. C# 関数については、Visual Studio を使用します。For C# functions, use Visual Studio.

C# 関数をデバッグするには、--debug vs を使用します。To debug C# functions, use --debug vs. または、Azure Functions Visual Studio 2017 Tools を使用することもできます。You can also use Azure Functions Visual Studio 2017 Tools.

ホストを起動して、JavaScript のデバッグを設定するには、次を実行します。To launch the host and set up JavaScript debugging, run:

func host start --debug vscode

その後、Visual Studio Code の [デバッグ] ビューで、[Attach to Azure Functions](Azure Functions にアタッチ) を選択します。Then, in Visual Studio Code, in the Debug view, select Attach to Azure Functions. ブレークポイントをアタッチし、変数の調査をして、コードをステップ実行できます。You can attach breakpoints, inspect variables, and step through code.

Visual Studio Code での JavaScript デバッグ

関数へのテスト データの受け渡しPassing test data to a function

関数をローカルでテストするには、Functions ホストを起動し、HTTP 要求を使用してローカル サーバーでエンドポイントを呼び出します。To test your functions locally, you start the Functions host and call endpoints on the local server using HTTP requests. 呼び出すエンドポイントは、関数の種類によって異なります。The endpoint you call depends on the type of function.

注意

このトピックの例では、cURL ツールを使用して端末またはコマンド プロンプトから HTTP 要求を送信します。Examples in this topic use the cURL tool to send HTTP requests from the terminal or a command prompt. お好みのツールを使用して HTTP 要求をローカル サーバーに送信できます。You can use a tool of your choice to send HTTP requests to the local server. Linux ベースのシステムでは既定で cURL ツールを使用できます。The cURL tool is available by default on Linux-based systems. Windows では、最初にダウンロードし、cURL ツールをインストールする必要があります。On Windows, you must first download and install the cURL tool.

関数のテストの全般的な情報については、「Azure Functions のコードをテストするための戦略」を参照してください。For more general information on testing functions, see Strategies for testing your code in Azure Functions.

HTTP と webhook でトリガーされる関数HTTP and webhook triggered functions

次のエンドポイントを呼び出して、HTTP と webhook でトリガーされる関数をローカルで実行できます。You call the following endpoint to locally run HTTP and webhook triggered functions:

http://localhost:{port}/api/{function_name}

Functions ホストがリッスンしているのと同じサーバー名とポートを使用していることを確認してください。Make sure to use the same server name and port that the Functions host is listening on. これは、Functions ホストの起動時に生成される出力で確認できます。You see this in the output generated when starting the Function host. トリガーでサポートされている任意の HTTP メソッドを使用して、この URL を呼び出すことができます。You can call this URL using any HTTP method supported by the trigger.

次の cURL コマンドは、MyHttpTrigger クイックスタート関数を、クエリ文字列で渡された name パラメーターを使用して、GET 要求からトリガーします。The following cURL command triggers the MyHttpTrigger quickstart function from a GET request with the name parameter passed in the query string.

curl --get http://localhost:7071/api/MyHttpTrigger?name=Azure%20Rocks

次の例は、要求本文で name を渡す POST 要求から呼び出される同じ関数です。The following example is the same function called from a POST request passing name in the request body:

curl --request POST http://localhost:7071/api/MyHttpTrigger --data '{"name":"Azure Rocks"}'

ブラウザーから GET 要求を行ってクエリ文字列でデータを渡すことができることに注意してください。Note that you can make GET requests from a browser passing data in the query string. その他すべての HTTP メソッドについては、cURL、Fiddler、Postman、または類似の HTTP テスト ツールを使用する必要があります。For all other HTTP methods, you must use cURL, Fiddler, Postman, or a similar HTTP testing tool.

HTTP でトリガーされない関数Non-HTTP triggered functions

HTTP トリガーと webhook を除く、あらゆる種類の関数の場合、管理エンドポイントを呼び出すことによって、関数をローカルでテストできます。For all kinds of functions other than HTTP triggers and webhooks, you can test your functions locally by calling an administration endpoint. HTTP POST 要求を使ってローカル サーバーでこのエンドポイントを呼び出すと、関数がトリガーされます。Calling this endpoint with an HTTP POST request on the local server triggers the function. 必要に応じて、POST 要求の本体でテスト データを実行に渡すことができます。You can optionally pass test data to the execution in the body of the POST request. この機能は、Azure Portal の [テスト] タブに似ています。This functionality is similar to the Test tab in the Azure portal.

次の管理者エンドポイントを呼び出して、非 HTTP 関数をトリガーします。You call the following administrator endpoint to trigger non-HTTP functions:

http://localhost:{port}/admin/functions/{function_name}

テスト データを関数の管理者エンドポイントに渡すには、そのデータを POST 要求メッセージの本文で提供する必要があります。To pass test data to the administrator endpoint of a function, you must supply the data in the body of a POST request message. メッセージ本文は、次の JSON 形式にする必要があります。The message body is required to have the following JSON format:

{
    "input": "<trigger_input>"
}

<trigger_input> 値には、関数が必要とする形式でデータが含まれています。The <trigger_input> value contains data in a format expected by the function. 次の cURL の例は、QueueTriggerJS 関数に対する POST です。The following cURL example is a POST to a QueueTriggerJS function. この場合、入力は、キューにあることが期待されるメッセージに相当する文字列です。In this case, the input is a string that is equivalent to the message expected to be found in the queue.

curl --request POST -H "Content-Type:application/json" --data '{"input":"sample queue data"}' http://localhost:7071/admin/functions/QueueTriggerJS

バージョン 1.x での func run コマンドの使用Using the func run command in version 1.x

重要

func run コマンドは、ツールのバージョン 2.x ではサポートされていません。The func run command is not supported in version 2.x of the tools. 詳細については、「Azure Functions ランタイム バージョンをターゲットにする方法」を参照してください。For more information, see the topic How to target Azure Functions runtime versions.

func run <FunctionName> を使用して関数を直接呼び出し、関数の入力データを渡すこともできます。You can also invoke a function directly by using func run <FunctionName> and provide input data for the function. このコマンドは、Azure Portal の [テスト] タブを使用して関数を実行するのと似ています。This command is similar to running a function using the Test tab in the Azure portal.

func run では、次のオプションがサポートされています。func run supports the following options:

オプションOption DescriptionDescription
--content -c インライン コンテンツ。Inline content.
--debug -d 関数を実行する前に、デバッガーを、ホスト プロセスにアタッチします。Attach a debugger to the host process before running the function.
--timeout -t Functions ホストの準備が完了するまでの待機時間 (秒単位)。Time to wait (in seconds) until the local Functions host is ready.
--file -f コンテンツとして使用するファイル名。The file name to use as content.
--no-interactive 入力を促しません。Does not prompt for input. 自動シナリオで便利です。Useful for automation scenarios.

たとえば、HTTP によってトリガーされる関数を呼び出して、コンテンツ本文を渡すには、次のコマンドを実行します。For example, to call an HTTP-triggered function and pass content body, run the following command:

func run MyHttpTrigger -c '{\"name\": \"Azure\"}'

Azure に発行するPublish to Azure

Azure で Functions プロジェクトを関数アプリに発行するには、publish コマンドを使用します。To publish a Functions project to a function app in Azure, use the publish command:

func azure functionapp publish <FunctionAppName>

以下のオプションを使用できます。You can use the following options:

オプションOption DescriptionDescription
--publish-local-settings -i local.settings.json の設定を Azure に発行し、設定が既に存在する場合は上書きを促します。Publish settings in local.settings.json to Azure, prompting to overwrite if the setting already exists.
--overwrite-settings -y -i で使用する必要があります。Must be used with -i. 値が異なる場合は、Azure の AppSettings をローカル値で上書きします。Overwrites AppSettings in Azure with local value if different. 既定値は prompt です。Default is prompt.

このコマンドは、Azure で既存の関数アプリに公開されるコマンドです。This command publishes to an existing function app in Azure. <FunctionAppName> がサブスクリプションに存在しない場合は、エラーが発生します。An error occurs when the <FunctionAppName> doesn't exist in your subscription. Azure CLI を使用してコマンド プロンプトまたはターミナル ウィンドウから関数アプリを作成する方法については、「サーバーレス実行用の Function App を作成する」を参照してください。To learn how to create a function app from the command prompt or terminal window using the Azure CLI, see Create a Function App for serverless execution.

publish コマンドは、Functions プロジェクト ディレクトリのコンテンツをアップロードします。The publish command uploads the contents of the Functions project directory. ローカルでファイルを削除する場合、publish コマンドではファイルは Azure から削除されません。If you delete files locally, the publish command does not delete them from Azure. Azure 内のファイルは、Azure PortalKudu ツール を使用することで削除できます。You can delete files in Azure by using the Kudu tool in the Azure portal.

重要

Azure で関数アプリを作成すると、既定でバージョン 1.x の Function ランタイムが使用されます。When you create a function app in Azure, it uses version 1.x of the Function runtime by default. 関数アプリでバージョン 2.x のランタイムを使用するには、アプリケーション設定 FUNCTIONS_EXTENSION_VERSION=beta を追加します。To make the function app use version 2.x of the runtime, add the application setting FUNCTIONS_EXTENSION_VERSION=beta.
次の Azure CLI コードを使用して、この設定を関数アプリに追加します。Use the following Azure CLI code to add this setting to your function app:

az functionapp config appsettings set --name <function_app> \
--resource-group myResourceGroup \
--settings FUNCTIONS_EXTENSION_VERSION=beta   

次のステップNext steps

Azure Functions Core Tools はオープン ソースであり、GitHub でホストされていますAzure Functions Core Tools is open source and hosted on GitHub.
バグまたは機能要求を提出するには、GitHub の問題をオープンしてください。To file a bug or feature request, open a GitHub issue.