Introduce 
Razor 
2014/10/17 
Template Engine Night 
do_aki
@do_aki 
@do_aki 
http://do-aki.net/ 
2
I 
PHP
Razor はASP.NET の一部 
• 正式には 
Razor view engine 
• Razor 構文 
• Webに特化したテン 
プレートエンジン 
• コードを埋め込める 
(C# / VB) 
http://msdn.microsoft.com/ja-jp/magazine/gg983489.aspx
<% ~ %> 
<%=~ %>
<% ~ %> 
<%=~ %>
Razor Syntax
Example 
@{ 
var label = “<label>”; 
var value = 999; 
} 
<h1>@label</h1> 
<p>value is @(value+1).</p> 
<h1>&lt;label&gt;</h1> 
<p>value is 1000.</p>
if 
@{ 
var now = DateTime.Now; 
} 
今日は@now.ToShortDateString() です。 
@* 時刻によって挨拶切り替える*@ 
@if (now.Hour < 12) { 
<p>おはよう</p> 
} else if (21 <= now.Hour) { 
<text>おやすみ</text> 
} 
今日は2014-10-17 です。 
(時刻によっては“<p>おはよう</p>” もしくは“おやすみ” も表示 
される)
foreach 
@{ 
var ary = new int[] { 1, 1, 2, 9 }; 
} 
@foreach (var val in ary) { 
if (0 < val) { 
<text>value is @val</text> 
} 
}
Layout 
layout.cshtml 
header 
@RenderBody 
footer 
body.cshtml 
@{ 
Layout = “layout”; 
} 
body 
header 
body 
footer
どうやって使う? 
• VisualStudio (Express 2003 for Web) 
– http://www.visualstudio.com/ 
– 「新しいWebサイト」(ASP.NET Web サイト) 
でさくっと試せる。 
• WebMatrix 
– http://www.microsoft.com/web/webmatrix/ 
– 使ったことない 
– Wordpress を簡単に動かせるとからしい
当然Windows
当然ASP.NET
ASP.NET なんて使わねーよ>< 
という人には
RazorEngine
RazorEngine works in .NET app 
var tpl = "My Name is @Model.Name !"; 
var model = new { Name = "do_aki" }; 
MessageBox.Show( 
RazorEngine.Razor.Parse(tpl, model) 
); 
 WinForms ok 
WPF ok 
 Console ok 
Nuget でさくっと入るので便利 
https://www.nuget.org/packages/RazorEngine/
layout in RazorEngine 
var layout = @" 
header 
@RenderBody() 
footer"; 
RazorEngine.Razor.Compile(layout, "mylayout"); 
var body = @" 
@{ 
Layout = ""mylayout""; 
} 
body"; 
var compiled = RazorEngine.Razor.Parse(body, model);
実装とか
Source code 公開されてる 
• Razor view engine 
– http://aspnetwebstack.codeplex.com/ 
– Apache License 2.0 
• RazorEngine 
– https://github.com/Antaris/RazorEngine 
– Microsoft Public License
Code Reading!
C# 力が足りない
先人の知恵を借りた
1. コード部とマークアップ部に分解しつつ 
構文木を構築 
2. コード部はそのまま、マークアップ部は 
Write メソッド呼び出し等に変換し 
て.NET のコード(正確には 
CodeCompileUnit )を生成 
(これが実行可能なclass となる) 
3. 2. のインスタンスを作成し、適宜プロパ 
ティを設定して実行する 
Template life cycle
@{ 
@{ 
now = DateTime.Now; 
} 
今日は@now.ToShortDateString() です。 
@* 時刻によって挨拶切り替える*@ 
@if (now.Hour < 12) { 
<p>おはよう</p> 
} else if (21 <= now.Hour) { 
<text>おやすみ</text> 
コード部とマークアップ部に分離 
} 
var now = DateTime.Now; 
} 
今日は@now.ToShortDateString() です。 
@* 時刻によって挨拶切り替える*@ 
@if (now.Hour < 12) { 
<p>おはよう</p> 
} else if (21 <= now.Hour) { 
<text>おやすみ</text> 
}
@{ 
var now = DateTime.Now; 
} 
今日は@now.ToShortDateString() です。 
@* 時刻によって挨拶切り替える*@ 
@if (now.Hour < 12) { 
<p>おはよう</p> 
} else if (21 <= now.Hour) { 
<text>おやすみ</text> 
} 
code 
m m 
markup 
m 
code 
code 
code 
c 
コード部とマークアップ部に分離
public class __CompiledTemplate { 
public void Execute() { 
var now = DateTime.Now; 
WriteLiteral(“今日は“); 
Write(now.ToShortDateString()); 
WriteLiteral (” です。rn”); 
if (now.Hour < 12) { 
WriteLiteral(“<p>おはよう</p>”) 
} else if (21 <= now.Hour) { 
WriteLiteral(“おやすみ”) 
class を構築 
} 
} 
(実際にはCodeDom.CodeCompileUnit) 
}
• あとはインスタンス生成してプロパティ 
割り当てて実行するだけ。 
• 実行にはRazor 関わってない 
• .NET のVM に載る感じ 
• 速いんじゃないかな 
実行
まとめ 
• ASP.NET のTemplate Engine であるところの 
Razor を紹介しました 
• RazorEngine を使えば.NET アプリケーショ 
ンでも簡単に利用できます 
• CodeDom 面白そう
ちなみに、yii (PHP)でRazor 構 
文っぽいノを使えるものあるら 
しい 
• yii-razor-view-render 
• https://code.google.com/p/yii-razor-view-render/
いじょー 
2014/10/17 
Template Engine Night 
do_aki

More Related Content

PPT
Using Windows Azure
PDF
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
PPT
081108huge_data.ppt
PPTX
イベント駆動プログラミングとI/O多重化
ODP
事例紹介「なうまぴおん」
PDF
ngx_small_lightで動的サムネイル生成 #yapcasia2012
PDF
WebAPIのバリデーションを、型の力でいい感じにする
PDF
ngx_small_light at 第2回闇鍋プログラミング勉強会
Using Windows Azure
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
081108huge_data.ppt
イベント駆動プログラミングとI/O多重化
事例紹介「なうまぴおん」
ngx_small_lightで動的サムネイル生成 #yapcasia2012
WebAPIのバリデーションを、型の力でいい感じにする
ngx_small_light at 第2回闇鍋プログラミング勉強会

What's hot (20)

PDF
カンタン画像サムネイル作成「Smalllight」
PDF
ストリーム処理エンジン「Zero」の開発と運用
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
PPT
about Thrift
PDF
成長を加速する minne の技術基盤戦略
PPT
Scripting Layer for Android + Perl
PPT
Titanium Mobile
PDF
Ansible入門
PDF
当社のawsへの取組
PDF
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
PDF
Ruby風Swift NSOperation編
PDF
UnrealEngineが5日間でasm.js化できたと聞いた俺たちは…
PPT
Scala on Hadoop
PPTX
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
PDF
Ansible 入門 #01 (初心者向け)
PDF
そろそろSSH/Telnetを離れて自動化したい
PDF
AWSとGCPを使用したインフラ環境
PDF
Zabbix API
PPT
20091119_sinatraを使ってみた
PDF
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
カンタン画像サムネイル作成「Smalllight」
ストリーム処理エンジン「Zero」の開発と運用
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
about Thrift
成長を加速する minne の技術基盤戦略
Scripting Layer for Android + Perl
Titanium Mobile
Ansible入門
当社のawsへの取組
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Ruby風Swift NSOperation編
UnrealEngineが5日間でasm.js化できたと聞いた俺たちは…
Scala on Hadoop
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansible 入門 #01 (初心者向け)
そろそろSSH/Telnetを離れて自動化したい
AWSとGCPを使用したインフラ環境
Zabbix API
20091119_sinatraを使ってみた
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
Ad

Viewers also liked (6)

PPTX
Ruby enumerable source code reading
PPTX
Sore php
PPTX
php and sapi and zendengine2 and...
PPTX
N対1 レプリケーション + Optimizer Hint
PPTX
php7's ast
PPTX
Writing php extensions in golang
Ruby enumerable source code reading
Sore php
php and sapi and zendengine2 and...
N対1 レプリケーション + Optimizer Hint
php7's ast
Writing php extensions in golang
Ad

Similar to 20141017 introduce razor (18)

PPTX
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
PDF
Pro aspnetmvc3framework chap15
PDF
Mvc conf session_2_shibamura
PDF
Blazor 触ってみた
PPTX
Blazor Web Assembly (C#) を触ってみた
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
PDF
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
PPTX
モノづくりBlazor勉強会1回目資料_Blazorについて.pptx
PDF
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
PDF
WebMatrixに対応した、新しいけど新しくないRazor
PDF
Blazor Server テンプレート解説
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
PDF
Application development with c#, .net 6, blazor web assembly, asp.net web api...
PDF
C# で Single Page Web アプリを 開発できる Blazor ― その魅力
PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
PDF
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
PDF
ASP.NETの進化とASP.NET Core Blazorの凄さ
Blazor0.6.0を用いたスクリプトレスWebアプリ開発の可能性
Pro aspnetmvc3framework chap15
Mvc conf session_2_shibamura
Blazor 触ってみた
Blazor Web Assembly (C#) を触ってみた
Application development with c#, .net 6, blazor web assembly, asp.net web api...
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
モノづくりBlazor勉強会1回目資料_Blazorについて.pptx
Developing .NET 6 Blazor WebAssemby apps with Radzen Blazor component library...
WebMatrixに対応した、新しいけど新しくないRazor
Blazor Server テンプレート解説
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
C# で Single Page Web アプリを 開発できる Blazor ― その魅力
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
ASP.NETの進化とASP.NET Core Blazorの凄さ

More from do_aki (20)

PPTX
Tritonn から Elasticsearch への移行話
PPTX
php-src の歩き方
PPTX
PHP と SAPI と ZendEngine3 と
PPTX
PHPとシグナル、その裏側
PPTX
再考:列挙型
PPTX
signal の話 或いは Zend Signals とは何か
PPTX
PHP AST 徹底解説(補遺)
PPTX
PHP AST 徹底解説
PPTX
20150212 プレゼンテーションzen
PPTX
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
PPTX
20141011 mastering mysqlnd
PPTX
php in ruby
PPTX
PHP から Groonga を使うにはこんなコードになるよ!
PPTX
N:1 Replication meets MHA
PDF
Php radomize
PPTX
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor
PPTX
マスタN対スレーブ1レプリケーションの作り方 ~あれから~
PPTX
Immortal
PPTX
Excel is image viewer
PDF
A bridge between php and ruby
Tritonn から Elasticsearch への移行話
php-src の歩き方
PHP と SAPI と ZendEngine3 と
PHPとシグナル、その裏側
再考:列挙型
signal の話 或いは Zend Signals とは何か
PHP AST 徹底解説(補遺)
PHP AST 徹底解説
20150212 プレゼンテーションzen
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
20141011 mastering mysqlnd
php in ruby
PHP から Groonga を使うにはこんなコードになるよ!
N:1 Replication meets MHA
Php radomize
セキュアそうでセキュアじゃない少しセキュアな気分になれるmysql_config_editor
マスタN対スレーブ1レプリケーションの作り方 ~あれから~
Immortal
Excel is image viewer
A bridge between php and ruby

20141017 introduce razor

  • 1. Introduce Razor 2014/10/17 Template Engine Night do_aki
  • 4. Razor はASP.NET の一部 • 正式には Razor view engine • Razor 構文 • Webに特化したテン プレートエンジン • コードを埋め込める (C# / VB) http://msdn.microsoft.com/ja-jp/magazine/gg983489.aspx
  • 5. <% ~ %> <%=~ %>
  • 6. <% ~ %> <%=~ %>
  • 8. Example @{ var label = “<label>”; var value = 999; } <h1>@label</h1> <p>value is @(value+1).</p> <h1>&lt;label&gt;</h1> <p>value is 1000.</p>
  • 9. if @{ var now = DateTime.Now; } 今日は@now.ToShortDateString() です。 @* 時刻によって挨拶切り替える*@ @if (now.Hour < 12) { <p>おはよう</p> } else if (21 <= now.Hour) { <text>おやすみ</text> } 今日は2014-10-17 です。 (時刻によっては“<p>おはよう</p>” もしくは“おやすみ” も表示 される)
  • 10. foreach @{ var ary = new int[] { 1, 1, 2, 9 }; } @foreach (var val in ary) { if (0 < val) { <text>value is @val</text> } }
  • 11. Layout layout.cshtml header @RenderBody footer body.cshtml @{ Layout = “layout”; } body header body footer
  • 12. どうやって使う? • VisualStudio (Express 2003 for Web) – http://www.visualstudio.com/ – 「新しいWebサイト」(ASP.NET Web サイト) でさくっと試せる。 • WebMatrix – http://www.microsoft.com/web/webmatrix/ – 使ったことない – Wordpress を簡単に動かせるとからしい
  • 17. RazorEngine works in .NET app var tpl = "My Name is @Model.Name !"; var model = new { Name = "do_aki" }; MessageBox.Show( RazorEngine.Razor.Parse(tpl, model) );  WinForms ok WPF ok  Console ok Nuget でさくっと入るので便利 https://www.nuget.org/packages/RazorEngine/
  • 18. layout in RazorEngine var layout = @" header @RenderBody() footer"; RazorEngine.Razor.Compile(layout, "mylayout"); var body = @" @{ Layout = ""mylayout""; } body"; var compiled = RazorEngine.Razor.Parse(body, model);
  • 20. Source code 公開されてる • Razor view engine – http://aspnetwebstack.codeplex.com/ – Apache License 2.0 • RazorEngine – https://github.com/Antaris/RazorEngine – Microsoft Public License
  • 24. 1. コード部とマークアップ部に分解しつつ 構文木を構築 2. コード部はそのまま、マークアップ部は Write メソッド呼び出し等に変換し て.NET のコード(正確には CodeCompileUnit )を生成 (これが実行可能なclass となる) 3. 2. のインスタンスを作成し、適宜プロパ ティを設定して実行する Template life cycle
  • 25. @{ @{ now = DateTime.Now; } 今日は@now.ToShortDateString() です。 @* 時刻によって挨拶切り替える*@ @if (now.Hour < 12) { <p>おはよう</p> } else if (21 <= now.Hour) { <text>おやすみ</text> コード部とマークアップ部に分離 } var now = DateTime.Now; } 今日は@now.ToShortDateString() です。 @* 時刻によって挨拶切り替える*@ @if (now.Hour < 12) { <p>おはよう</p> } else if (21 <= now.Hour) { <text>おやすみ</text> }
  • 26. @{ var now = DateTime.Now; } 今日は@now.ToShortDateString() です。 @* 時刻によって挨拶切り替える*@ @if (now.Hour < 12) { <p>おはよう</p> } else if (21 <= now.Hour) { <text>おやすみ</text> } code m m markup m code code code c コード部とマークアップ部に分離
  • 27. public class __CompiledTemplate { public void Execute() { var now = DateTime.Now; WriteLiteral(“今日は“); Write(now.ToShortDateString()); WriteLiteral (” です。rn”); if (now.Hour < 12) { WriteLiteral(“<p>おはよう</p>”) } else if (21 <= now.Hour) { WriteLiteral(“おやすみ”) class を構築 } } (実際にはCodeDom.CodeCompileUnit) }
  • 28. • あとはインスタンス生成してプロパティ 割り当てて実行するだけ。 • 実行にはRazor 関わってない • .NET のVM に載る感じ • 速いんじゃないかな 実行
  • 29. まとめ • ASP.NET のTemplate Engine であるところの Razor を紹介しました • RazorEngine を使えば.NET アプリケーショ ンでも簡単に利用できます • CodeDom 面白そう
  • 30. ちなみに、yii (PHP)でRazor 構 文っぽいノを使えるものあるら しい • yii-razor-view-render • https://code.google.com/p/yii-razor-view-render/
  • 31. いじょー 2014/10/17 Template Engine Night do_aki

Editor's Notes

  • #13: 関係ないけど、商用製品のロゴって安易に使えなくてメンドイよね。どこまでがフェアユースとして認められるのかわかりにくい。