BlazorでiOS/Androidネイティブアプリケーションを開発可能にする「Mobile Blazor Bindings」、マイクロソフトが発表 - Publickey
これなんですけど。「ざまりん乙」的な声が今回もチラホラ聞かれたので「マジか!それはすごい」と思って試してみました。
サンプルアプリを動かしてみた
こちらの手順の通りで、簡単に試すことができます。1
まあ、ソリューションを見てみただけで Xamarin(Xamarin.Forms アプリ) なんですけども。
inspect してみた
続いて、Android 向けのプロジェクトをエミュレータで実行し、Android Studio 付属の Device Monitor で inspect してみました(もしかしてガワネイティブ?という可能性もあったので)。
FrameLayout や RelativeLayout などの Android ネイティブ部品が並んでいるので確かに "ネイティブ" でした。
また、PlatformRenderer とか ButtonRenderer、これらは Xamarin.Forms アプリを inspect した時と同じ感じです。
Mobile Blazor Bindings のソースコードを見てみた
ソースコードはこちらです(Open by default 素晴らしい)。
ここらへん に、それっぽい記述を見つけることができます。
using XF = Xamarin.Forms;
namespace Microsoft.MobileBlazorBindings.Elements
{
public class Button : View
{
static Button()
{
ElementHandlerRegistry
.RegisterElementHandler<Button>(renderer => new ButtonHandler(renderer, new XF.Button()));
}
(以下略)
サンプルアプリに Razor テンプレート(*.razor
) に記述した <Button>
という要素は、上記の処理で Xamarin.Forms.Button
にマップされるように見えます。
つまり
「Razor の仕組みを使って Xamarin.Forms アプリを作ることができるのが Mobile Blazor Bindings」
ということのようです。 UI用DSLから Android/iOS 向けには Xamarin.Forms が使われる点は、Uno Platform にも近いと思います。
なにがおいしいの?
Blazor は「We B Assembly + Razor」の造語だっと記憶してますが、昨日の .NET Conf Focus on Blazor のまとめを見ると、
「WebAssembly 使う使わん関係なく、とにかく Razor 技術から様々なプラットフォーム向けアプリを生成するフレームワークが Blazor」
という事になったようですね(Mobile Blazor Bindings に wasm 技術の欠片は見当たりませんでした)。
という事で、.razor
テンプレートやそれが属するプロジェクトに記述された UI や C# コードは、Webアプリ/モバイルアプリ/デスクトップ向けアプリとしても再利用できますよ、という目論見のようです。
Razor は、ASP.NET を使ってWebフロントエンドを開発するための技術として普及している(と思う)ので、その流れでカバー範囲を広げたい人には刺さるでしょう(一方 XAML を主戦場とする人には前述の Uno Platform の方が刺さるでしょうか)。
「「「ネイティブAndroid のラッパーである Xamarin.Android」、をラップした Xamarin.Forms」をさらにラップした Mobile Blazor Bindings」、、、というゴテゴテ感、個人的にはキライじゃないし、それなりに基盤がしっかりしていないとさすがに崩れ落ちるので、.NET基盤 ってすごいなあ、と思います。
-
簡単に動かせたのは Xamarin.Forms アプリ開発環境は既に構築済みだったこともありw ↩