以前のエントリーで「新しいプログラミング モデル」と書いてたもの、どうやら 「Azure Functions Node.js Framework v4」というらしい。
長いので以下 V4 と書く。
Visual Studio Code の Azure Functions 拡張機能が、V4 用のテンプレートを作ってくれるようになったので試してみた。
プロジェクト作成手順
まず Azure Functions 拡張機能を Visual Studio Code に入れる。
バージョンが1.10.0 以降になっているか確認すること。ちなみに 2023/2/9 現在、最新バージョンは 1.10.1。次に設定 (Ctrl + ,) から
Azure Functions: Show Node Programming Model
を探してチェックを入れる。
設定が終わったら、これまで通り、空っぽのディレクトリで Azure Functions のプロジェクトを作成する。
ウィザードの途中で「プログラミング モデルを選べ」と出てくるので
Model V4 (Preview)
を選択する*1。
あとは関数も一緒に作るか、とか出てくるがそこは今までと同じなので省略。
すると、こういうファイル構成になる。
今回は TypeScript を選択し、HTTP トリガーの関数を一緒に作ってみた。
以前のエントリーで書いた通り、関数 httpTrigger1.ts
があるディレクトリに function.json
はない。
さらに、関数のディレクトリ自体も package.json
の main
の値で決まるので、どこにあってもいい。
TypeScript のテンプレートの場合、初期構成と tsconfig.json
内の設定やらが相まって、dist/src/functions
以下の JavaScript ファイルをインポートすることになっている。
関数コードの内容も、以前のモデルでは最低限関数を export
するだけだったが、V4 では定義した関数とトリガー/バインディングをセットで app
というオブジェクトに登録する処理が追加された。
V4 ではこの app
への登録が重要で各関数を export
しておく必要はない((けど、単体テストとかを考えると export
しておいた方がよさそう))。
Azure Functions にデプロイしてみる
と、ローカルでのファイル構成の確認はここまでにして、さっそく Azure 上にデプロイしてみる。
まずは Function App リソースを作る。
ランタイムは当然 Node.js 、バージョンは 18 LTS。
OS もプランもどれでもいいはず。
出来上がったら Visual Studio Code からも確認。
作ったリソースを右クリックして、おもむろに Deploy to Function App...
を実行。
npm install やら tsc といった前処理が動いて Azure 上へのデプロイも完了!
と思いきやログの最後が気になる。
No HTTP triggers found.
だって。 HTTP トリガー関数しか作ってないのにそれすらないとは。
Azure ポータルから見ても、確かにない。
V4 として認識されてない感じ。
冒頭のリンク先を見直してみると、Setup
の最後にズバリ書いてあった。
なるほど、確かにローカルの local.settings.json
(下図右) には AzureWebJobsFeatureFlags
がある。
けど、デプロイしたての Function App (下図左) にはなかった。
なので、作ってみる。
Upload local settings...
で local.settings.json
の内容をアップロードできるの便利。
できた。
関数も認識された。
テンプレ通りの関数なので動作結果は割愛。
聞いてみた
デプロイ先の Function App に AzureWebJobsFeatureFlags
がなかったら何らかのメッセージが欲しいと思ったので、Azure Functions 拡張機能のリポジトリに issue を立てたら、
そのフラグ、ホスト側の対応でもうすぐいらなくなるから。
とコメントがついて、わずか 1 時間で閉じられた。
自分が立てた issue で最速クローズかもしれない。
即レスもらえたのはいいことだ。
けど Teams のチャットかメールの方がよかったかもと思った。
(2/11 追記)
Azure Functions Host の v4.15.2 で👆の「ホスト側の対応」が実施されたみたいなので、これが Azure 上でデプロイされれ AzureWebJobsFeatureFlags
のくだりは不要になるはず。
*1:V4 なのは Model なのか Framework なのか。。。