Azure Functions をローカルでコーディングしてテストする
Azure Functions の開発やテストは、Azure Portal で行うことができますが、多くの開発者は、ローカル開発エクスペリエンスを好みます。 Functions を使用すると、ローカル コンピューター上で簡単に、お気に入りのコード エディターや開発ツールを使用して、関数を作成し、テストすることができます。 ローカル関数はライブ Azure サービスに接続できるため、完全な Functions ランタイムを使用してローカル コンピューター上で関数をデバッグすることができます。
この記事には、ご希望の言語に対応した特定の開発環境へのリンクがあります。 また、ローカル開発に関する共有ガイダンスもいくつかあります。たとえば、local.settings.json ファイルに対する操作などです。
ローカル開発環境
ローカル コンピューター上で関数を開発する方法は、言語とツールの設定によって異なります。 ローカル開発をサポートする環境を次の表に示します。
環境 | 言語 | 説明 |
---|---|---|
Visual Studio Code | C# (インプロセス) C# (分離ワーカー プロセス) 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# (分離ワーカー プロセス) JavaScript PowerShell Python |
Azure Functions Core Tools は、関数を作成するためのコア ランタイムとテンプレートを提供しており、これにより、ローカル開発が可能です。 バージョン 2.x では、Linux、macOS、および Windows 上での開発がサポートされています。 すべての環境は、ローカル Functions ランタイムとして、Core Tools を利用します。 |
Visual Studio | C# (インプロセス) C# (分離ワーカー プロセス) |
Azure Functions Tools は、Visual Studio 2019 以降の Visual Studio の 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 を使用して、最初の関数を作成する) を参照してください。 Eclipse や IntelliJ IDEA を使った開発もサポートされます。 |
Note
Azure portal での関数コードの編集には制限があるため、関数をローカルで開発し、コード プロジェクトを Azure の関数アプリに発行する必要があります。 詳細については、「Azure portal での開発の制限事項」をご覧ください。
これらの各ローカル開発環境では、関数アプリ プロジェクトを作成し、事前定義の関数テンプレートを使用して新しい関数を作成できます。 各環境では、Core Tools が使用されています。そのため、マシン上の実際の Functions ランタイムに対して、その他のアプリの場合と同様に関数をテストしたり、デバッグしたりできます。 また、これらのどの環境からでも、関数アプリ プロジェクトを Azure に発行できます。
ローカル プロジェクト ファイル
Functions プロジェクト ディレクトリでは、言語に関係なく、次のファイルがプロジェクトのルート フォルダーに含まれます。
ファイル名 | 説明 |
---|---|
host.json | 詳細については、「host.json のリファレンス」を参照してください。 |
local.settings.json | アプリ設定など、ローカルで実行する場合に Core Tools によって使用される設定。 詳細については、「ローカル設定ファイル」を参照してください。 |
.gitignore | local.settings.json ファイルが誤って Git リポジトリに発行されないようにします。 詳細については、「ローカル設定ファイル」を参照してください。 |
.vscode\extensions.json | Visual Studio Code でプロジェクト フォルダーを開く際に使用される設定ファイル。 |
プロジェクト内の他のファイルは、言語と特定の関数によって異なります。 詳細については、使用している言語の開発者ガイドを参照してください。
ローカル設定ファイル
local.settings.json ファイルには、アプリの設定、およびローカルの開発ツールによって使用される設定が格納されます。 local.settings.json ファイル内の設定は、プロジェクトをローカルで実行している場合にのみ使用されます。 プロジェクトを Azure に発行するときは、関数アプリのアプリ設定にも必要な設定を必ず追加してください。
重要
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 内の関数アプリでのアプリケーション設定に対応します。 多くのトリガーおよびバインドには、Connection の Connection など、接続文字列アプリ設定を参照するプロパティがあります。 これらのプロパティでは、Values 配列にアプリケーション設定を定義する必要があります。 よく使用される設定の一覧については、後ろの表を参照してください。 値は、JSON オブジェクトまたは配列ではなく文字列である必要があります。 設定名に、2 つの連続する下線 ( : ) を含めることはできません。コロン (__ ) も含めないようにしてください。 二重下線文字はランタイムによって予約されています。また、コロンは依存関係の挿入をサポートするために予約されています。 |
Host |
このセクションの設定により、ローカルでプロジェクトを実行するときの Functions ホスト プロセスをカスタマイズできます。 これらの設定は、Azure でプロジェクトを実行するときにも適用される、host.json 設定とは別のものです。 |
LocalHttpPort |
ローカルの Functions ホストの実行時に使用される既定のポートを設定します (func host start とfunc run )。 --port コマンド ライン オプションは、この設定より優先されます。 たとえば、Visual Studio IDE で実行する場合、[プロジェクトのプロパティ] の [デバッグ] ウィンドウに移動し、"アプリケーション引数" フィールドから入力できる 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 のリファレンスを参照してください。Azurite エミュレーターがローカルにインストールされ、 AzureWebJobsStorage を UseDevelopmentStorage=true に設定すると、Core Tools でエミュレーターが使用されます。 詳細については、ローカル ストレージ エミュレーターに関するページを参照してください。 |
AzureWebJobs.<FUNCTION_NAME>.Disabled |
true |false |
ローカルで実行しているときに関数を無効にするには、"AzureWebJobs.<FUNCTION_NAME>.Disabled": "true" をコレクションに追加します。<FUNCTION_NAME> は関数の名前です。 詳細については、Azure Functions で関数を無効にする方法に関する記事を参照してください。 |
FUNCTIONS_WORKER_RUNTIME |
dotnet dotnet-isolated 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 サイト構成設定によって決まります。これは、ポータルで設定できます。 |
設定を同期する
関数をローカルで開発する場合、アプリで必要なローカル設定は、コードがデプロイされる関数アプリのアプリ設定にも存在する必要があります。 場合によっては、関数アプリからローカル プロジェクトに現在の設定をダウンロードする必要もあります。 Azure portal でアプリ設定を手動で構成できますが、次のツールを使用すると、アプリ設定をプロジェクトのローカル設定と同期することもできます。
トリガーとバインド
関数をローカルで開発する場合は、トリガーとバインドの動作を考慮する必要があります。 HTTP トリガーの場合は、http://localhost/
を使用して、ローカル コンピューターで HTTP エンドポイントを簡単に呼び出せます。 HTTP 以外のトリガー関数の場合、ローカルで実行するためのオプションがいくつかあります。
- ローカル開発時にバインディングをテストする最も簡単な方法は、ライブ Azure サービスを対象とする接続文字列を使用することです。 local.settings.json ファイルの
Values
配列に適切な接続文字列設定を追加することで、ライブ サービスをターゲットにすることができます。 これを行うと、テスト中のローカル実行がライブ サービス データに影響します。 このため、開発とテスト中に使用する個別のサービスを設定し、運用環境では異なるサービスに切り替える方法をご検討ください。 - ストレージ ベースのトリガーの場合は、ローカル ストレージ エミュレーターを使用できます。
- 特別な管理者エンドポイントを使用して、HTTP 以外のトリガー関数を手動で実行できます。 詳細については、「HTTP によってトリガーされない関数を手動で実行する」を参照してください。
ローカル テスト中は、Core Tools (func.exe) によって提供されるホストをローカルで実行している必要があります。 詳細については、「Azure Functions Core Tools」を参照してください。
HTTP テスト ツール
HTTP の GET メソッドをサポートしていれば、開発中に Web ブラウザーから関数エンドポイントを呼び出すのは簡単です。 ただし、ペイロードをサポートする他の HTTP メソッド (POST や PUT など) の場合は、HTTP テスト ツールを使用して、これらの HTTP 要求を作成し、関数エンドポイントに送信する必要があります。
注意事項
要求に機密データを含める必要のあるシナリオでは、データを保護し、機密データが外部に流出するリスクを軽減するツールを必ず使用してください。 保護する必要がある機密データには、資格情報、シークレット、アクセス トークン、API キー、位置情報データ、個人を特定できる情報 (PII) などがあります。
オフラインまたはローカルで機能する、データをクラウドに同期しない、かつオンライン アカウントにサインインする必要がない HTTP テスト ツールを選択することで、データのセキュリティを確保できます。 特定のセキュリティ機能を実装することで、偶発的な露出からデータを保護できるツールもあります。
HTTP 要求履歴 (機密情報を含む) を一元的に保存している、セキュリティのベスト プラクティスに準拠していない、またはデータのプライバシーに関する懸念を尊重していないようなツールの使用を避けます。
関数エンドポイントに HTTP 要求を安全に送信するには、次のいずれかのツールの使用を検討してください。
- Visual Studio Code を Visual Studio Marketplace にある拡張機能 (REST Client など) と一緒に使用する
- PowerShell Invoke-RestMethod
- Microsoft Edge - ネットワーク コンソール ツール
- Bruno
- curl
ローカル ストレージ エミュレーター
ローカル開発時に、リモート ストレージ サービスに接続しなくても、Azure Storage バインド (Queue Storage、Blob Storage、Table Storage) で関数をテストするときに、ローカル Azurite エミュレーター を使用できます。 Azurite は Visual Studio Code および Visual Studio と統合されており、npm を使用してコマンド プロンプトから実行することもできます。 詳細については、ローカルでの Azure Storage の開発に Azurite エミュレーターを使用する方法に関するページを参照してください。
local.settings.json ファイルのValues
コレクション内の次の設定は、既定の AzureWebJobsStorage
の接続に Azurite を使用するようにローカル Functions ホストに指示します。
"AzureWebJobsStorage": "UseDevelopmentStorage=true"
この設定値を使用すると、AzureWebJobsStorage
を接続として使用するすべての Azure Storage トリガーまたはバインドが、ローカルで実行されている場合に Azurite に接続されます。 ローカル実行中にストレージ エミュレーションを使用する場合は、次の考慮事項に留意してください。
- Azurite がインストールされ、実行されている必要があります。
- Azure に発行する前に、Azure サービスへの実際のストレージ接続を使用してテストする必要があります。
- プロジェクトを発行するときは、
AzureWebJobsStorage
設定をUseDevelopmentStorage=true
として発行しないでください。 Azure では、AzureWebJobsStorage
設定は常に、関数アプリで使用されるストレージ アカウントの接続文字列である必要があります。 詳細については、AzureWebJobsStorage
を参照してください。
次のステップ
- Visual Studio を使用して、ローカルでコンパイル済み C# 関数 (インプロセスと分離ワーカー プロセスの両方) を開発する方法について詳しくは、「Visual Studio を使用する Azure Functions の開発」を参照してください。
- Mac、Linux、または Windows コンピューター上で VS Code を使用して、ローカルで関数を開発する方法の詳細については、ご希望の言語に対応する Visual Studio Code の概要に関する記事をご覧ください。
- コマンド プロンプトまたはターミナルから関数を開発する方法の詳細については、「Work with Azure Functions Core Tools」(Azure Functions Core Tools を使用して作業する) を参照してください。