koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

Blazor Server はウィザードで Azure App Service + SignalR Service にデプロイできてしまった他所感

Blazor WebAssembly を GitHub Actions で GitHub Pages に発行する - koudenpaのブログ ではBlazorの2種類のホスティングモデルのうち Blazor WebAssembly を GitHub Pages に配置した。もう一方のBlazor ServerはASP.NET Coreアプリケーションとしてホスティングする必要がある。そちらも試した。どうやったのかと所感を書いておく。

Blazor Serverのホスティング

今回はとりあえずホスティングしたかったのでVisual StudioのウィザードでAzureのリソース(App Service + SignalR Service)を作成してしまった。楽ちんだ。

Blazor Serverは単にASP.NET Coreのアプリケーションなので、いかようにもAzureにはデプロイできる。もちろんドキュメントを参照するとVisual Studioからのデプロイも案内されている。必要なリソースもウィザード形式で行えて楽だった。

また、Azure Pipelines上にCI/CDを構成するウィザードも提供されている。これを使ってPipelineを構成したところ、ASP.NET Core 2.x までの構成となってしまった。仕方ないのでタスクを編集して3.x対応した。それにしてもひな形が構成されるのは便利だ。そのうち3.xにも対応されるだろう。後はARMテンプレートを使ってのIaCや、Pipelinesもコード管理向けYAMLが出力も構成されるとより便利ではないか? といったところだ。この辺りは気が向いたらコード管理する形にしてみたい(特にARMテンプレート)。記事にまとめるにしてもそちらの方にしたい(~~したい。の実現性は低そう)。

f:id:koudenpa:20200114231151p:plain
発行ウィザードの下の方に継続的デリバリーの構成設定がある

f:id:koudenpa:20200114231408p:plain
CI/CDも構成できるがタスクが少し古かった

Blazor Componentの互換性

Blazor Serverのホスティングで試してみたかったのは、Blazor ComponentのWebAssembly : Server間での互換性だ。

Blazor ホスティングモデルの ASP.NET Core | Microsoft Docs

ホスティングモデルに関係なく、アプリモデルとコンポーネントモデルは同じです。

などと謳われているのだから試してみたくもなるだろう。

今回はHello Worldしたアプリケーションを丸ごとRazor Components Library(RCL)に切り出して、まったく同じコンポーネントをWebAssembly、Serverでホスティングしてみた。

当然ながらWebAssembly、Serverでサポートされない実装があるとエラーするのだが、ホスティング自体は何の問題もなく行えて一見全く同じ動作をする。これは素直にすごいと思った。ブラウザにどんどんDLLがダウンロードされるのはなかなか迫力もある。

.NET Standardのランタイムはどんどん充実している。

Blazor Server のアーキテクチャとどのような場合に使うのかについての所感

Blazor Serverは独特なアーキテクチャをしている。クライアントとサーバー間はSignalRで接続され、ユーザーがブラウザ上で行った操作がサーバーに送信、処理され、処理結果のDOMの差分が返却、反映される

一見すると意味が分からない構成だが、ASP.NET AJAXの延長線上と考えるとそれほど違和感もない。(ここでkoudenpa内で色々な思考の飛躍があるが言語化するのが大変なので割愛)や、以下のようなドキュメントが密に用意されていることから、既存の膨大なASP.NET WebFormsアプリケーションの資産を移行する先とする狙いがありそうだ(そういう発信もされているのかも? Blazorに関する発信はほとんど見ていない)。

docs.microsoft.com

docs.microsoft.com

Microsoft後方互換性の充実ぶりや、既存リソースを生かす施策には頭が下がる思いだ。とてもすごい。