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は型定義が存在しますが、そのほかのリソースについては型定義が存在しないので、そのあたりをうまくカバーすると開発が捗るのかなあ、と思っています。

アウトプット

目立ったものはなし

Profile
d_yama
元Microsoft MVP for Windows Development(2018-2020)
Sub-category : Windows Mixed Reality
Search