次の方法で共有


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 内の関数アプリでのアプリケーション設定に対応します。 多くのトリガーおよびバインドには、ConnectionConnection など、接続文字列アプリ設定を参照するプロパティがあります。 これらのプロパティでは、Values 配列にアプリケーション設定を定義する必要があります。 よく使用される設定の一覧については、後ろの表を参照してください。
値は、JSON オブジェクトまたは配列ではなく文字列である必要があります。 設定名に、2 つの連続する下線 (__) を含めることはできません。コロン (:) も含めないようにしてください。 二重下線文字はランタイムによって予約されています。また、コロンは依存関係の挿入をサポートするために予約されています。
Host このセクションの設定により、ローカルでプロジェクトを実行するときの Functions ホスト プロセスをカスタマイズできます。 これらの設定は、Azure でプロジェクトを実行するときにも適用される、host.json 設定とは別のものです。
LocalHttpPort ローカルの Functions ホストの実行時に使用される既定のポートを設定します (func host startfunc run)。 --port コマンド ライン オプションは、この設定より優先されます。 たとえば、Visual Studio IDE で実行する場合、[プロジェクトのプロパティ] の [デバッグ] ウィンドウに移動し、"アプリケーション引数" フィールドから入力できる > コマンドに、ポート番号を明示的に指定することで、ポート番号を変更できます。
CORS クロス オリジン リソース共有 (CORS) で許可されるオリジンを定義します。 スペースなしのコンマ区切りのリストでオリジンを指定します。 ワイルドカード値 (*) がサポートされており、これによって任意のオリジンからの要求を許可できます。
CORSCredentials true に設定すると、withCredentials 要求が許可されます。
ConnectionStrings コレクション。 関数のバインディングで使用される接続文字列にこのコレクションを使用しないでください。 このコレクションは、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 サイト構成設定によって決まります。これは、ポータルで設定できます。

設定を同期する

関数をローカルで開発する場合、アプリで必要なローカル設定は、コードがデプロイされる関数アプリのアプリ設定にも存在する必要があります。 関数アプリからローカル プロジェクトに現在の設定をダウンロードする必要がある場合もあります。 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 キー、位置情報データ、個人データなどがあります。

オフラインまたはローカルで機能する、データをクラウドに同期しない、かつオンライン アカウントにサインインする必要がない 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 を使用して作業する) を参照してください。