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

Azure Functions の開発やテストは、Azure Portal で行うことができますが、多くの開発者は、ローカル開発エクスペリエンスを好みます。 Functions では、ローカル コンピューター上でお気に入りのコード エディターや開発ツールを使用して、関数を作成し、テストすることができます。 ローカル関数はライブ Azure サービスに接続できるため、完全な Functions ランタイムを使用してローカル コンピューター上で関数をデバッグすることができます。

この記事には、ご希望の言語に対応した特定の開発環境へのリンクがあります。 また、ローカル開発に関する共有ガイダンスもいくつかあります。たとえば、local.settings.json ファイルに対する操作などです。

ローカル開発環境

ローカル コンピューター上で関数を開発する方法は、言語とツールの設定によって異なります。 ローカル開発をサポートする環境を次の表に示します。

環境 Languages 説明
Visual Studio Code C# (クラス ライブラリ)
C# 分離プロセス (.NET 5.0)
JavaScript
PowerShell
Python
VS Code 用の Azure Functions 拡張は、VS Code に対して Functions サポートを追加します。 Core Tools が必要です。 Core Tools のバージョン 2.x を使用した場合は、Linux、macOS、および Windows 上での開発がサポートされます。 詳細については、「Create your first function using Visual Studio Code」 (Visual Studio Code を使用して最初の関数を作成する) を参照してください。
コマンド プロンプトまたはターミナル C# (クラス ライブラリ)
C# 分離プロセス (.NET 5.0)
JavaScript
PowerShell
Python
Azure Functions Core Tools は、関数を作成するためのコア ランタイムとテンプレートを提供しており、これにより、ローカル開発が可能です。 バージョン 2.x では、Linux、macOS、および Windows 上での開発がサポートされています。 すべての環境は、ローカル Functions ランタイムとして、Core Tools を利用します。
Visual Studio 2019 C# (クラス ライブラリ)
C# 分離プロセス (.NET 5.0)
Azure Functions ツールは、Visual Studio 2019 以降のバージョンの Azure 開発 ワークロードに含まれています。 クラス ライブラリの関数をコンパイルして .dll を Azure に発行できます。 ローカル テスト用の Core Tools が含まれています。 詳細については、「Develop Azure Functions using Visual Studio」(Visual Studio を使用して Azure Functions を開発する) を参照してください。
Maven (各種) Java Maven アーキタイプは、Java 関数の開発を可能にする Core Tools をサポートしています。 バージョン 2.x では、Linux、macOS、および Windows 上での開発がサポートされています。 詳細については、「Create your first function with Java and Maven」(Java および Maven を使用して、最初の関数を作成する) を参照してください。 EclipseIntelliJ IDEA を使った開発もサポートされます。

重要

同じ関数アプリにローカル開発とポータル開発を混在させないでください。 ローカル プロジェクトから関数を発行するときは、ポータルではプロジェクト コードを管理または変更しないようにしてください。

これらの各ローカル開発環境では、関数アプリ プロジェクトを作成し、事前定義の Functions テンプレートを使用して新しい関数を作成できます。 各環境では、Core Tools が使用されています。そのため、マシン上の実際の Functions ランタイムに対して、その他のアプリの場合と同様に関数をテストしたり、デバッグしたりできます。 また、これらのどの環境からでも、関数アプリ プロジェクトを Azure に発行できます。

ローカル設定ファイル

local.settings.json ファイルには、アプリの設定、およびローカルの開発ツールによって使用される設定が格納されます。 local.settings.json ファイル内の設定は、プロジェクトをローカルで実行している場合にのみ使用されます。

重要

local.settings.json には接続文字列などのシークレットが含まれている場合があるため、リモート リポジトリには絶対に格納しないようにしてください。 Functions をサポートするツールを使用すると、local.settings.json ファイル内の設定を、プロジェクトをデプロイしている関数アプリのアプリ設定と同期できます。

ローカル設定ファイルの構造は次のとおりです。

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "<language worker>",
    "AzureWebJobsStorage": "<connection-string>",
    "MyBindingConnection": "<binding-connection-string>",
    "AzureWebJobs.HttpExample.Disabled": "true"
  },
  "Host": {
    "LocalHttpPort": 7071,
    "CORS": "*",
    "CORSCredentials": false
  },
  "ConnectionStrings": {
    "SQLConnectionString": "<sqlclient-connection-string>"
  }
}

これらの設定は、プロジェクトをローカルで実行する場合にサポートされます。

設定 説明
IsEncrypted この設定を true にすると、すべての値がローカル コンピューターのキーを使用して暗号化されます。 func settings コマンドと共に使用されます。 既定値は false です。 サービス接続文字列など、シークレットが local.settings.json に含まれている場合、それをローカル コンピューター上で暗号化することができます。 実行時には、ホストが設定の暗号化を自動的に解除します。 ローカルで暗号化された設定の読み取りを試す前に、func settings decrypt コマンドを使用してください。
Values プロジェクトをローカルで実行するときに使用されるアプリケーション設定のコレクションです。 これらのキーと値 (文字列と文字列) のペアは、AzureWebJobsStorage など、Azure 内の関数アプリでのアプリケーション設定に対応します。 多くのトリガーおよびバインドには、BLOB ストレージ トリガーConnection など、接続文字列アプリ設定を参照するプロパティがあります。 これらのプロパティでは、Values 配列にアプリケーション設定を定義する必要があります。 よく使用される設定の一覧については、後ろの表を参照してください。
値は、JSON オブジェクトまたは配列ではなく文字列である必要があります。 設定名には、コロン (:)、2 つの連続する下線 (__) を含めることはできません。 二重下線文字はランタイムによって予約されています。また、コロンは依存関係の挿入をサポートするために予約されています。
Host このセクションの設定により、ローカルでプロジェクトを実行するときの Functions ホスト プロセスをカスタマイズできます。 これらの設定は、Azure でプロジェクトを実行するときにも適用される、host.json 設定とは別のものです。
LocalHttpPort ローカルの Functions ホストの実行時に使用される既定のポートを設定します (func host startfunc run)。 --port コマンド ライン オプションは、この設定より優先されます。 たとえば、Visual Studio IDE で実行する場合、[プロジェクトのプロパティ] の [デバッグ] ウィンドウに移動し、[Application Arguments](アプリケーション引数) フィールドから入力できる host start --port <your-port-number> コマンドに、ポート番号を明示的に指定することで、ポート番号を変更できます。
CORS クロス オリジン リソース共有 (CORS) で許可されるオリジンを定義します。 スペースなしのコンマ区切りのリストでオリジンを指定します。 ワイルドカード値 (*) がサポートされており、これによって任意のオリジンからの要求を許可できます。
CORSCredentials true に設定すると、withCredentials 要求が許可されます。
ConnectionStrings コレクション。 関数のバインディングで使用される接続文字列にこのコレクションを使用しないでください。 このコレクションは、Entity Framework など、構成ファイルの ConnectionStrings セクションから接続文字列を取得するのが一般的なフレームワークでのみ使用されます。 このオブジェクト内の接続文字列は、System.Data.SqlClient のプロバイダーの種類と共に、環境に追加されます。 他のアプリ設定では、このコレクション内の項目は Azure に発行されません。 ご自分の関数アプリの設定の Connection strings コレクションに、これらの値を明示的に追加する必要があります。 関数コードで SqlConnection を作成する場合は、接続文字列の値を他の接続と共に、ポータル内の アプリケーション設定 に格納する必要があります。

次のアプリケーション設定は、ローカルでの実行時に Values 配列に含めることができます。

設定 説明
AzureWebJobsStorage ストレージ アカウント接続文字列、または
UseDevelopmentStorage=true
Azure ストレージ アカウントの接続文字列を含みます。 HTTP 以外のトリガーを使用する場合には必須です。 詳しくは、AzureWebJobsStorage のリファレンスを参照してください。
Azure ストレージ エミュレーターがローカルにインストールされ、AzureWebJobsStorageUseDevelopmentStorage=true に設定すると、Core Tools でエミュレーターが使用されます。 エミュレーターは開発中には便利ですが、デプロイする前に実際のストレージに接続してテストする必要があります。
AzureWebJobs.<FUNCTION_NAME>.Disabled true|false ローカルで実行しているときに関数を無効にするには、"AzureWebJobs.<FUNCTION_NAME>.Disabled": "true" をコレクションに追加します。<FUNCTION_NAME> は関数の名前です。 詳細については、Azure Functions で関数を無効にする方法に関する記事を参照してください。
FUNCTIONS_WORKER_RUNTIME dotnet
node
java
powershell
python
Functions ランタイムのターゲット言語を示します。 バージョン 2.x 以上の Functions ランタイムで必須です。 この設定は、お客様のプロジェクト用に Core Tools によって生成されます。 詳細については、FUNCTIONS_WORKER_RUNTIME のリファレンスを参照してください。
FUNCTIONS_WORKER_RUNTIME_VERSION ~7 ローカルでの実行時に使用される PowerShell 7 を示します。 設定されていない場合は、PowerShell Core 6 が使用されます。 この設定は、ローカルでの実行時にのみ使用されます。 Azure で実行する場合、PowerShell ランタイムのバージョンは、powerShellVersion サイト構成設定によって決まります。これは、ポータルで設定できます。

次のステップ