前提
C#で書いた(ほぼ)スクリプトを特定の人がオンラインでできるようにWeb化したい。
ひとまず簡単にAzure FunctionとHTMLがあればいいか、と思ったらAzureにちょうどいいサービスができていたので、
それを使って構築してみる。
Static Web Apps
https://docs.microsoft.com/ja-jp/azure/static-web-apps/overview
まずはこのへん見ましょう。
フロントエンドはJSとかシンプルなHTMLとか、バックAPIはFunction使われる。
ただしリポジトリはGithub限定で個人的にちょっと不便(Azureのレポはあかんのかい…)
シンプルページをクローン
https://github.com/staticwebdev/vanilla-basic
このあたりからcloneする。
ただこのままだとルーティングがないので、routes.json
を作成する必要がある。
ルート定義(routes.json)
https://docs.microsoft.com/ja-jp/azure/static-web-apps/routes
このへんなんだが、シンプルHTMLだと一覧に入ってなかったり。
https://docs.microsoft.com/ja-jp/azure/static-web-apps/front-end-frameworks
この一覧参照
シンプルHTMLならルートフォルダにそのまま入れる。
routes.json
の書き方は
routes 配列に出現する順序で実行されます。
これを読んでないとマニュアルのスニペットをそのまま貼っつけてハマった。。
{
"routes": [
{
"route": "/profile",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin/*",
"allowedRoles": ["administrator"]
}
]
}
↑ちゃんと書くといわゆるこういう感じになる。(一要素だけ書いちゃってて動かなかった)
認証つける
特定の人だけに見せるページなら別途roleを割り当てる。
authenticated
のロールだとどんなアカウントでもひとまずログインした状態であれば見えてしまうので、
ちゃんとロール管理→招待、から対象のメールアドレスを入力しておく。(割り当てるroleはadminなどにすればいいかな)
※ここでロールのことが出てくる、routes.json
や認証の説明だけ読んでもわからんかった…
APIを追加する
https://docs.microsoft.com/ja-jp/azure/static-web-apps/add-api
大体ドキュメントの通りなんだが、例ではnodeでC#だとどうするのかわかりにくい。
C#はいらない子?
(というかVSCodeの操作前提ってなんだよ…ともなった)
けどちゃんとできるので、くじけずにやる。
APIフォルダにAzureFunction追加
api
フォルダを作成して、AzureFunctionプロジェクトをそこに作成する。(VSでもRiderでも大丈夫)
そいでAPIのコード書く(もちろんなんでもOK)
で、ちゃんと動くことを確認しておく。
ただ、このままだとfunction.json
がない。
自分で作るの?けど例も無いのにどうやって??
と思ったら、AzureFunctionの方のドキュメントに
https://docs.microsoft.com/ja-jp/visualstudio/mac/azure-functions-lab?view=vsmac-2019#exercise-4-working-with-functionjson
とあった。どうやらビルドした時に作成されているようだ。
それをルートの場所に持ってこよう。
Github Actionは動くがビルドされない
これがまぁ困った。
最初はcsファイルと各jsonファイルしかコミットしてなかったが、それだとビルドができないらしい。
全然API動かん…と思ってgithubActionのログをみたら(詳細にログ見れます。動かないときは要チェック)
Error: Could not detect the language from repo.
と出ていて、ビルドも何もできていない様子だった。
https://docs.microsoft.com/ja-jp/azure/app-service/deploy-local-git
このへん見て解決。
ASP.NET Core : *.sln または *.csproj
という様に、csprojファイルも追加するとちゃんとビルドできた。
所感
簡単にAPI付きのWebページを作れるのは便利。
認証もつけられるし。(BASIC認証もパッとできれば尚良)
ただAzure全体に言えることなんだが、ドキュメントがちょっとかゆいところに手が届かない感あり。