ほりひログ

所属組織の製品 (Azure とか) に関連する内容が多めだけど、個人の見解であって、所属組織を代表する公式情報ではないです。

Pre release 版 Azure Functions Runtime を動かす

以前から Pre release 版の Azure Functions Runtime を試そうとしては失敗してたが、ここにヒント(というかそのものずばり)があったので、その構築手順をまとめる。

Pre release 版?

まだ Azure Functions 上にリリースされていないランタイム*1
なので、ご利用は自己責任で。

構築手順

といっても、zip をダウンロードして展開するだけ。

まじめに書くと、

  1. Pre release 版の zip ファイルをダウンロードする
  2. ダウンロードしてきた zip ファイルをを好きなところに展開する
  3. func コマンドにパスを通す
  4. (Linux/Mac のみ) func コマンドに実行パーミッションを付与する

とこれだけ。

func コマンドを切り替える

上の手順で Pre release 版の func コマンドと Azure Functions Runtime が使えるようになるが、「展開してパスを通す」を素直にやってしまうと、以降も Pre release 版を使うことになるので、いざ正式リリース版を使う時にまたパスから直さないといけなくなる。

それはツライなので、Azure Functions Core Tools のバージョン マネージャー funcvm で Pre release 版も管理してみることにする。

github.com

funcvm 自体は npm i @anthonychu/funcvm -g でインストールする。

インストールされた funcvm は、 ~/.funcvm/download の下で Azure Functions Core Tools (つまり func コマンド) の各バージョンを管理している。
なので、この ~/.funcvm/download に適当な名前でディレクトリーを作って、その下に Pre release 版のパッケージを展開したらいいだけ。

~/.funcvm/download/
├── 3.0.4585
├── 4.0.4544
├── 4.x.xxxx-prerelease
└── funcvm-core-tools-version.txt

みたいな。

また funcvm では、

いつもはこのバージョンの func だけど、このディレクトリ配下ではこのバージョンの func を使う

みたいなことが、対象のディレクトリに .func-version ファイルを作ってその中にバージョン番号を書くことでできる。

この機能を使って、Pre release 版を試したいプロジェクトにだけ .func-version ファイルを作っておき、その中に上で作ったディレクトリ名 ( 上の例なら 4.x.xxxx-prerelease ) を書いておくと、そのディレクトリで実行した func コマンドは ~/.funcvm/download/4.x.xxxx-prerelease の下にある func を使ってくれる。
便利。

最後に funcvm で管理するためのバージョン番号に関する注意点。

まずディレクトリ名が正規表現 /^\d+\.\d+\.\d+/ にマッチしない場合 funcvm list に出てこない。
正直 ls ~/.funcvm/downloads とやれば出てくるディレクトリ一覧と同じなので、funcvm list で出せないから困るもの、って程でもないが、どうしても funcvm list で出力させたい場合は 4.9.9999 とかにしておけばいい。

また正規表現にマッチしていたとしても、そのバージョン番号が Azure Functions Core Tools の GitHub Releases に載っていない場合、funcvm use での .func-version の作成に失敗する。
これも、バージョン番号が書かれているだけのファイルなので、echo 4.9.9999 > .func-version で作ったとしてもその後の挙動に特に違いはない。

*1:Azure Functions 上のランタイムは、2022年6月3日現在、v4 系で v4.3.2、v3 系で 3.7.1