Azure Functionsでnpm等のライブラリを使う場合は、ZIPで固めてアップロードするzipデプロイのが一般的ですが、Node.jsに限って言えば Azure ポータル上から直接npm install する方法があります。
※ Azure Functions (Node.js) で npm パッケージを追加して利用する方法 (コンソール利用) の2021年版です
今回はis-oneという "それは '1' ですか?" を判定してくれるジョークライブラリを使ってみます。1
関数アプリの作成
Azure ポータルから関数アプリを作成します。
今回は i-need-libs-iesae2cu
という名前で作成しました。以降はこの名前で解説します。
関数の作成
i-need-libs-iesae2cu
内に関数を作成します。
今回は「開発環境 = ポータル」「テンプレート = HTTP Trigger」で作成しました。そうすると HttpTrigger1
という関数が作成されます。以降はこの名前を使って解説します。
関数アプリの「コンソール」で npm install する
HttpTrigger1
が作成されたら i-need-libs-iesae2cu
の管理画面に戻ります。
この管理画面には開発ツールのセクションに「コンソール」があります。これをクリックするとコマンドプロンプトが表示されます。このコマンドプロンプトが i-need-libs-iesae2cu
内の環境です。
D:\home\site\wwwroot\
が i-need-libs-iesae2cu
のルートとなっており、この中に関数名 = ディレクトリとして作成されています。
D:\home\site\wwwroot>ls -lF
total 1
drwxr-xr-x 1 Unknown+User Unknown+Group 0 Sep 22 13:49 HttpTrigger1/
-rw-r--r-- 1 Unknown+User Unknown+Group 141 Sep 22 13:47 host.json
ここで HttpTrigger1
に移動して npm install すれば目的は達成です。
D:\home\site\wwwroot>cd HttpTrigger1
D:\home\site\wwwroot\HttpTrigger1>npm init --yes
D:\home\site\wwwroot\HttpTrigger1>npm install is-one
npm init --yes
は package.json
を作成するためです。関数実行時に package.json
を求めらるため必須でが、初回の実行でOKです。
以降は npm install <lib>
でインストール可能です。
検証用コードと実行結果
const isOne = require('is-one');
module.exports = async function (context, req) {
console.log(`1 is ONE? => ${isOne(1)}`);
console.log(`2 is ONE? => ${isOne(2)}`);
context.res = {status: 204};
}
2021-09-22T14:07:33.128 [Information] Executing 'Functions.HttpTrigger1' (Reason='This function was programmatically called via the host APIs.', Id=XX)
2021-09-22T14:07:33.137 [Information] 1 is ONE? => true
2021-09-22T14:07:33.137 [Information] 2 is ONE? => false
2021-09-22T14:07:33.145 [Information] Executed 'Functions.HttpTrigger1' (Succeeded, Id=XX, Duration=17ms)
ライブラリをメンテナンスする
これもコンソールから npm コマンドでメンテナンスできます。
初期化したければ node_modules
package.json
package-lock.json
を削除すればOKです。
コンソール操作でよくあるミスやちょっと不便なところ
- CTRL+W でウィンドウを閉じてしまう (^^;;;;
- 速攻で CTRL+SHIFT+T でウィンドウ回復。
-
コピペができない (^^;;;;;→ CTRL+V (もしくは CTRL+SHIFT+V) でできる模様
こういった面倒なことがあるため、ある程度大きなものになるようだったらzipデプロイを検討しましょう。
あとがき
EoT
-
他のライブラリへの依存が一切無いことから、サンプルとしては秀逸。 ↩