Core Tools を使用してローカルで Azure 関数を作成して実行する

完了

Azure Functions Core Tools を使用すると、コマンド ラインからローカル コンピューターで関数を開発して実行できます。

あなたは Azure portal の関数エディターではなく、自分のコンピューターで、最初の関数である単利計算機を構築する必要があります。 どちらも Azure Functions を直接サポートするように拡張できる、Visual Studio や Visual Studio Code などの開発環境を使用するかどうかはわかりません。 最終的には、コマンド ラインと基本的なテキスト エディターから Core Tools を使用することにします。

このユニットでは、Core Tools を使用して関数をローカルで作成し、実行する方法について説明します。 Azure Cloud Shell を使用してこれらの概念を説明する次のユニットの演習で使用する前に、Core Tools についてさらに学習しましょう。

Azure Functions Core Tools とは

Azure Functions Core Tools はスタンドアロン ランタイムであり、ローカル コンピューターから関数コードを開発、実行、デプロイするために使用できる一連のコマンド ライン ツールと共に使用できます。

Core Tools では、次のようないくつかの関数関連の機能がサポートされています。

  • ローカルで関数を開発するために必要なファイルとフォルダーを生成します。
  • コンピューターで関数をテストしてデバッグできるように、ローカル ランタイムを提供します。
  • 関数を Azure に公開する。

Core Tools を使用すると、コマンド ラインからこれらのタスクを実行できます。 任意のテキスト エディターを使用して、コードを記述し、構成を変更します。 また、Azure へのサインイン、Azure リソースの作成、プロジェクト ファイルのデプロイを行うには、Azure CLI または Azure PowerShell も必要です。

Core Tools は、func という名前の単一のコマンドライン ユーティリティとしてパッケージ化されています。 他のコマンドを使用せずにコマンド ラインから func を実行すると、バージョン情報と使用ガイドが表示されます。 すぐに読む必要はありませんが、次のような内容が表示されます。

A portion of the help text output by func.

Visual Studio と Visual Studio Code はどちらも Core Tools を使用して、統合されたローカル デバッグ エクスペリエンスを提供します。

ここでは、関数についてのいくつかの基本概念を説明します。

関数アプリと関数プロジェクト

関数をローカルで開発する場合は、''関数プロジェクト'' 内で作業します。 プロジェクトは、関数を定義するコードおよび構成ファイルを含むフォルダーです。 このコード プロジェクトは、Azure の "関数アプリ" リソースにデプロイされます。 関数アプリ インスタンスでは、すべての関数で、共通の構成値とリソースのセットが共有されます。

各関数アプリは特定の言語スタックを対象とし、各スタックには独自の言語固有のプロジェクト要件があります。 幸いなことに、関数プロジェクトを手動で作成する必要はありません。 Core Tools を使用すると、関数プロジェクトと関数を目的の言語でゼロから生成できます。

Core Tools のバージョン

Core Tools には Azure Functions ランタイムが含まれているため、使用する Core Tools のメジャー バージョンが、Azure の Functions ランタイムのメジャー バージョンと常に一致する必要があります。 現在、バージョン 4.x は Functions ランタイムの推奨バージョンであり、すべての言語をサポートする唯一のバージョンです。 このチュートリアルでは Core Tools バージョン 4.x について説明し、使用していますが、自分のコンピューターに何もインストールする必要はありません。 このチュートリアルでは、代わりにブラウザーの Azure Cloud Shell 環境で Core Tools を使用します。 Cloud Shell には、既にインストールされているコード エディターと共に、正しいバージョンの Core Tools、Azure CLI、Node.js が既に用意されています。

ローカル開発とAzure portal 開発

Azure portal には関数コード用の組み込みエディターが用意されていますが、特定の言語スタックにしか使用できません。 また、ポータルを使用して、ローカルで開発し、Azure にデプロイする関数を編集することもできません。 ローカル開発ワークフローを使い始めると、Azure portal を使用して関数コードに変更を加えることはできません。

Core Tools では、Azure Functions でサポートされているすべての言語スタックのローカル開発がサポートされています。

関数をローカルで作成する

Core Tools で関数を作成してローカル環境で実行する方法を詳しく見ていきましょう。 このチュートリアルでは、後で Azure に発行する方法について説明します。

func init を使用して新しい関数プロジェクトを作成する

新しい関数プロジェクトを作成するには、コマンド ラインで func init を実行します。

Output from func init creating a JavaScript function project.

func init では、どの言語ランタイムをアプリに使用するかを尋ねられます。 プロジェクト フォルダーの内容を適宜調整します。

新しい関数プロジェクトを作成する場合、プロジェクト フォルダーに含まれるファイルは、選択した言語ランタイムによって変わります。 選択したランタイムに関係なく、最も重要な 2 つのプロジェクト ファイルが常に存在します。

  • host.json には、関数アプリのログ オプションなどのランタイム構成値が格納されます。 このファイルに格納されている設定は、関数をローカルと Azure のどちらで実行している場合でも使用されます。
  • local.settings.json には、Core Tools を使用してローカルで実行する場合にのみ、関数アプリに適用される構成値が格納されます。 このファイルには、次の 2 種類の設定が含まれています。
    • ローカル ランタイム設定: ローカル関数ランタイム自体を構成するために使用されます。
    • カスタム アプリケーション設定: アプリのニーズに基づいて追加および構成します。 アプリ内のすべての関数でアクセスして使用できます。

func init から生成される関数プロジェクトには関数が含まれていません。 次のセクションでは、追加する方法を説明します。

func new を使用して新しい関数を作成する

プロジェクト内の個々の機能には、その動作を定義するコードと構成が必要です。 関数プロジェクト フォルダー内の func new を実行すると、新しい関数と、開発を始めるために必要なすべてのファイルが作成されます。

Output from func new creating a JavaScript function.

func new を実行すると、使用する関数トリガーの種類と関数の名前が確認され、関数プロジェクトで選択した言語で、完成した、発行可能なスターター実装が生成されます。 スタート コードは、選択したトリガーの種類の使用方法を示すものであり、それを利用してすぐに始めることができます。 関数の本体を独自の実装に置き換えると、構築、実行、テスト、公開の準備が整います。

このチュートリアルの次のパートでは、func new を使用して HTTP トリガー関数を作成し、単利計算を実行するスターター実装を変更します。

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

関数は、単独で実行できるプログラムではありません。 ホストする必要があります。 Azure Functions ホストは、関数コード以外のすべての機能を提供するものです。構成の読み込み、トリガーと HTTP 要求のリッスン、関数の記述に使用される言語のワーカー プロセスの開始、ログ出力の書き込みなどを実行します。 Azure では、関数アプリの起動時には、ホストが自動的に実行されます。

Core Tools を使用すると、Azure Functions ホストの独自のインスタンスを実行し、関数を発行前にローカルで試すことができます。 発行前に関数を実行することで、構成とコードが正しく読み込まれることを確認できます。また、Azure リソースを必要とせずに、実際の HTTP 呼び出しを行って関数をテストできます。

関数ホストをローカルで起動するには、関数プロジェクト フォルダーから func start を実行します。 Core Tools では、出力の末尾に、各関数の呼び出しに使用できるローカル URL が表示されます。 ホストの実行中に、curl などの HTTP 呼び出しを行うツールまたはライブラリを使用して、関数と対話できます。 ホストから生成されたすべてのログ出力は、Core Tools により、リアルタイムでターミナルに書き込まれます。

func start output showing a function invocation URL.