次の方法で共有


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

可能な限り、ローカル開発環境で Azure Functions コード プロジェクトを作成して検証します。 Azure Functions Core Tools を使用すると、統合された開発、デバッグ、デプロイ用の一般的な開発ツールと統合された Azure Functions のローカル ランタイム バージョンを取得できます。 ローカル関数は、ライブ Azure サービスに接続することもできます。

この記事では、 local.settings.json ファイルの操作など、ローカル開発に関するいくつかの共有ガイダンスを提供します。 開発環境固有のガイダンスにもリンクされています。

ヒント

関数をローカルで開発する方法の詳細については、リンクされた IDE 固有のガイダンス記事を参照してください。

ローカル開発環境

ローカル コンピューターで関数を開発する方法は、 言語 とツールの設定によって異なります。 記事の上部にある任意の言語を選択します

ヒント

すべてのローカル開発では、ローカル環境でデバッグするための Functions ランタイムを提供するために、Azure Functions Core Tools に依存しています。

これらの開発環境を使用して、好みの言語で関数をローカルにコーディングします。

環境 説明
Visual Studio Azure Functions ツールは、Visual StudioAzure 開発ワークロードに含まれています。 C# 関数コードをコンパイルして、.NET クラス ライブラリとして Azure にデプロイできます。 ローカル テスト用の Core Tools が含まれています。 詳細については、「 Visual Studio を使用して Azure で最初の C# 関数を作成する」を参照してください。
Visual Studio Code Visual Studio Code 用の Azure Functions 拡張機能は、Visual Studio Code に Functions のサポートを追加します。 Core Tools が必要です。 Linux、macOS、および Windows での開発をサポートします。 詳細については、「Create your first function using Visual Studio Code」 (Visual Studio Code を使用して最初の関数を作成する) を参照してください。
コマンド プロンプトまたはターミナル Azure Functions Core Tools は、関数を作成するためのコア ランタイムとテンプレートを提供しており、これにより、ローカル開発が可能です。 Linux、macOS、および Windows での開発をサポートします。 詳細については、 コマンド ラインから Azure で C# 関数を作成するを参照してください。
環境 説明
Maven Maven アーキタイプでは、Core Tools を使用して Java 関数の開発が可能になります。 Linux、macOS、および Windows での開発をサポートします。 詳細については、「Create your first function with Java and Maven」(Java および Maven を使用して、最初の関数を作成する) を参照してください。
Visual Studio Code Visual Studio Code 用の Azure Functions 拡張機能は、Visual Studio Code に Functions のサポートを追加します。 Core Tools が必要です。 Linux、macOS、および Windows での開発をサポートします。 詳細については、「Create your first function using Visual Studio Code」 (Visual Studio Code を使用して最初の関数を作成する) を参照してください。
IntelliJ IDEA Maven アーキタイプと Core Tools を使用すると、IntelliJ を使用して関数を開発できます。 詳細については、「 IntelliJ を使用して Azure で最初の Java 関数を作成する」を参照してください。
日食 Maven アーキタイプと Core Tools を使用すると、Eclipse を使用して関数を開発できます。 詳細については、「 Ecplise を使用して Azure で最初の Java 関数を作成する」を参照してください。
環境 説明
Visual Studio Code Visual Studio Code 用の Azure Functions 拡張機能は、Visual Studio Code に Functions のサポートを追加します。 Core Tools が必要です。 Linux、macOS、および Windows での開発をサポートします。 詳細については、「Create your first function using Visual Studio Code」 (Visual Studio Code を使用して最初の関数を作成する) を参照してください。
コマンド プロンプトまたはターミナル Azure Functions Core Tools は、関数を作成するためのコア ランタイムとテンプレートを提供しており、これにより、ローカル開発が可能です。 Linux、macOS、および Windows での開発をサポートします。 詳細については、 コマンド ラインから Azure で Node.js 関数を作成する方法に関するページを参照してください。
環境 説明
Visual Studio Code Visual Studio Code 用の Azure Functions 拡張機能は、Visual Studio Code に Functions のサポートを追加します。 Core Tools が必要です。 Linux、macOS、および Windows での開発をサポートします。 詳細については、「Create your first function using Visual Studio Code」 (Visual Studio Code を使用して最初の関数を作成する) を参照してください。
コマンド プロンプトまたはターミナル Azure Functions Core Tools は、関数を作成するためのコア ランタイムとテンプレートを提供しており、これにより、ローカル開発が可能です。 Linux、macOS、および Windows での開発をサポートします。 詳細については、 コマンド ラインから Azure で PowerShell 関数を作成する方法に関するページを参照してください。
環境 説明
Visual Studio Code Visual Studio Code 用の Azure Functions 拡張機能は、Visual Studio Code に Functions のサポートを追加します。 Core Tools が必要です。 Linux、macOS、および Windows での開発をサポートします。 詳細については、「Create your first function using Visual Studio Code」 (Visual Studio Code を使用して最初の関数を作成する) を参照してください。
コマンド プロンプトまたはターミナル Azure Functions Core Tools は、関数を作成するためのコア ランタイムとテンプレートを提供しており、これにより、ローカル開発が可能です。 Linux、macOS、および Windows での開発をサポートします。 詳細については、 コマンド ラインから Azure で Python 関数を作成する方法に関するページを参照してください。

これらの各ローカル開発環境では、関数アプリ プロジェクトを作成し、事前定義の関数テンプレートを使用して新しい関数を作成できます。 各環境では 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 ファイルの設定を、プロジェクトの配置先の関数アプリのアプリ 設定 と同期できます。

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 で実行している場合は、[プロジェクトのプロパティ - > デバッグ] ウィンドウに移動し、"アプリケーション引数" フィールドに指定できる 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 エミュレーターがローカルにインストールされ、AzureWebJobsStorageUseDevelopmentStorage=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 サイト構成設定によって決まります。これは、ポータルで設定できます。

values配列の値を関数コードの環境変数として使用する方法については、開発者ガイドの環境変数を参照してください。

values配列の値を関数コードの環境変数として使用する方法については、開発者ガイドの環境変数を参照してください。

values配列の値を関数コードの環境変数として使用する方法については、開発者ガイドの環境変数を参照してください。

values配列の値を関数コードの環境変数として使用する方法については、開発者ガイドの環境変数を参照してください。

設定を同期する

関数をローカルで開発する場合は、コードをデプロイする関数アプリのアプリ設定に、アプリに必要なすべてのローカル設定を含めます。 関数アプリからローカル プロジェクトに現在の設定をダウンロードする必要がある場合もあります。 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 ブラウザーから任意の関数エンドポイントを呼び出すことができます。 ただし、POST や PUT などのペイロードをサポートする他の HTTP メソッドの場合は、HTTP テスト ツールを使用してこれらの HTTP 要求を作成し、関数エンドポイントに送信する必要があります。

注意

要求に機密データを含める必要があるシナリオでは、データを保護し、機密データが外部に公開されるリスクを軽減するツールを必ず使用してください。 保護する必要がある機密データには、資格情報、シークレット、アクセス トークン、API キー、位置情報データ、個人データなどがあります。

オフラインまたはローカルで動作し、データをクラウドに同期せず、オンライン アカウントにサインインする必要がない HTTP テスト ツールを選択して、データをセキュリティで保護します。 一部のツールでは、特定のセキュリティ機能を実装することで、データが偶発的に公開されることを防ぐこともできます。

HTTP 要求履歴 (機密情報を含む) を一元的に保存する、セキュリティのベスト プラクティスに準拠していない、データのプライバシーに関する懸念を尊重しなかったりするツールの使用は避けてください。

関数エンドポイントに HTTP 要求を安全に送信するには、次のいずれかのツールの使用を検討してください。

ローカル ストレージ エミュレーター

ローカル開発中は、リモート ストレージ サービスに接続せずに、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 を参照してください。
  • Mac、Linux、または Windows コンピューター上の Visual Studio Code を使用した関数のローカル開発の詳細については、「 Visual Studio Code を使用した Azure Functions の開発」を参照してください。
  • コマンド プロンプトまたはターミナルから関数を開発する方法の詳細については、「Work with Azure Functions Core Tools」(Azure Functions Core Tools を使用して作業する) を参照してください。