読者です 読者をやめる 読者になる 読者になる

しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Xamarin で Razor Template が使えることを知らなかった

Xamarin

ここ最近はずっと Xamarin.iOS を使ってアプリの開発を少しやっているのですが、その途中で新規作成ダイアログに Preprocessed Razor Template という項目を見つけたので試してみました。

f:id:shiba-yan:20160217233628p:plain

Razor 以外には T4 も使えるみたいですが、個人的には Razor で十分な気がしています。

ちゃんと本家にドキュメントもありました。名前の通り Razor で書いたテンプレートを予め C# にコンパイルしておく機能のようです。Razor Engine とは異なり事前にコンパイルされるので、とても高速なはずです。

Building HTML views using Razor Templates - Xamarin

アプリケーション側で WebView を使って動的にページを作成して表示する場合に、Razor でテンプレートとモデルを作成しておけば、MVC アプリケーションと同様にレンダリングした結果を得ることができます。

そして気が付いていなかったのですが、プロジェクトテンプレートにある WebView App を選ぶと、Razor Template を使ってプロジェクトが作成されるみたいです。

f:id:shiba-yan:20160217233403p:plain

説明をよく見ると、ちゃんと Razor Template Engine を使うと書いてあります。

実際にプロジェクトを作成すると、MVC アプリケーションのようなフォルダ構成になっていました。

f:id:shiba-yan:20160217233410p:plain

cshtml を編集し、保存したタイミングで C# へのコンパイルが行われるので、特にコンパイルを意識することなく書けてとても良い感じです。

プリコンパイル結果はファイルと同名のクラスとして出力されるので、そのクラスをインスタンス化して GenerateString を呼び出すだけという簡単な API です。

f:id:shiba-yan:20160217233902p:plain

別に HTML の生成に限らず、Razor Template は文字列の生成に使うことができるので、プリコンパイルされる汎用的なテンプレートエンジンだと考えると応用範囲がかなり広がりそうです。

もっと早く知っていれば、楽を出来た部分がかなり多かったなぁと思いました。

おまけ : Razor のプリコンパイル

ここまで Xamarin の話でしたが、Visual Studio も大昔から拡張機能をインストールすることで、同様に Razor のプリコンパイルを行えます。成り立ちの関係から、こちらは MVC 寄りになります。

Generator として Template を選択すると、Xamarin に近い形でのプリコンパイルが行われます。