2021年6月第1週レポート
インプット
📝 Azure FunctionsのMS Learnをやってみた
Reactをちょっと勉強したので社内利用のWebアプリ作ってみようかなと思っているのですが、せっかくなのでバックエンド側もあまり使ったことない技術を使って実験しようと思っています。Azure Functionsってやつをつかってサーバレスアーキテクチャってやつをやってみるぜぇ。
Azure Functionsはv2のころ.NETランタイムでちょっと使っていたのですが、今回はNodeランタイムを使ってTypeScriptで書いてみることにしました。Azure Functions + SignalR + CosmosDBを使ったリアルタイム更新アプリのMS Learnモジュールを参考に こちらのコードをTypeScriptでリライトする形で学習しました。
プロジェクト作成についてはAzure Functions Core Toolsを使いました。func init
コマンドで対話形式でTypeScriptでの開発環境を作成することができました。新しいFunctionsを作る時もfunc new
コマンドから作ることができます。
NodeランタイムのAzure Functionsは関数ごとに用意されたfunction.json
をまずはサーチしてJSコードを実行するようです。func new
コマンドを実行することによって関数名と同一のディレクトリとfunction.json
、エントリポイントのスケルトンコードが作成されます。function.json
の中身をみてみると、
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"scriptFile": "../dist/getStocks/index.js"
}
scriptFile
プロパティに実行対象のJSコードのパスが指定されているので、Azure Functionsは指定されているパスのコードを実行するようです。func new
コマンドで作られるtsconfig.json
をみてみると、トランスパイルしたコードのディレクトリは./dist
が設定されているので、トランスパイルしてからデプロイすれば問題なく実行されるようになっているようです。
関数本体のTSコードは次のようになります。
import { AzureFunction, Context, HttpRequest } from '@azure/functions'
const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest, stocks: any): Promise<void> {
context.res.body = stocks
}
export default httpTrigger
JSコードと特に差異があるわけではないです。Azure Functionsではmodule.exports
が参照する関数が実行されるようになっているので、TypeScriptでは実行させたい関数をデフォルトエクスポートしておけば良さそうです。
NodeランタイムのAzure Functionsでは、関数の引数にfunction.json
で設定した順にトリガー、もしくはバインドしたリソースについてのオブジェクトが渡されます。HTTPトリガーについてのオブジェクトHttpRequest
は型定義が存在しますが、そのほかのリソースについては型定義が存在しないので、そのあたりをうまくカバーすると開発が捗るのかなあ、と思っています。
アウトプット
目立ったものはなし