<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Template &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/template/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Thu, 19 Dec 2013 01:46:39 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>&#034;Template&#034; &#8211; Alphabetical Advent Calendar 2013</title>
		<link>https://blog.mach3.jp/2013/12/19/jaac2013-t-template.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 19 Dec 2013 01:46:39 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2013]]></category>
		<category><![CDATA[EJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mustache]]></category>
		<category><![CDATA[Template]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3771</guid>

					<description><![CDATA[&#8220;T&#8221; は Template の &#8220;T&#8221;。 テンプレート 動的なWebアプリケーションを制作する上で、 テンプレートは非常に強力な味方になります。 それだけにテンプレートエ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>&#8220;T&#8221; は Template の &#8220;T&#8221;。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-ln2nacy3ZKQ/UqR4laWBsFI/AAAAAAAACYg/bPA0l76eL5o/s400/ac2013-t.png" alt="T"/></figure>



<p></p>



<span id="more-3771"></span>



<h2 class="wp-block-heading">テンプレート</h2>



<p>動的なWebアプリケーションを制作する上で、 テンプレートは非常に強力な味方になります。 それだけにテンプレートエンジンはまさに群雄割拠で、 それぞれ個性や独自の趣向をもったライブラリが至る所で開発されています。</p>



<h3 class="wp-block-heading">基本的な機能</h3>



<p>どのテンプレートエンジンも記法こそ様々ですが、提供する機能や使い方は基本的に共通しています。 出力用の関数が用意されており、その関数に元となるテンプレート文字列と、 その中で展開したいデータを格納したオブジェクトを渡します。</p>



<p>例えば <strong>Mustache</strong> では <strong>render</strong> メソッドがそれにあたります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> output = Mustache.render(template, data);
</code></span></pre>


<p>render の中では、テンプレートの記述を元にして data オブジェクトの内容を展開していきます。 例えばこのようなテンプレートが文字列で用意されているとして、</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"mailto:{{email}}"</span>&gt;</span>{{name}}<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></span></pre>


<p>これを次のような data オブジェクトで展開したいとします。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> data = {
    <span class="hljs-attr">name</span>: <span class="hljs-string">"John"</span>,
    <span class="hljs-attr">email</span>: <span class="hljs-string">"john@example.com"</span>
};
</code></span></pre>


<p>これらを Mustache.render メソッドに渡すと、次のような出力が文字列で返されます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"mailto:john@example.com"</span>&gt;</span>John<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">制御構文</h3>



<p>テンプレートエンジンは、データのコレクションをループで回して全部出力させたり、 条件分岐を行なって true の場合のみ出力させたりといった機能を提供してくれます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-comment">&lt;!-- products（配列）の中のオブジェクトを全て出力 --&gt;</span>
    {{#products}}
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>{{name}} : {{price}}<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    {{/products}}
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>

<span class="hljs-comment">&lt;!-- isError が true の場合だけ出力 --&gt;</span>
{{#isError}}
<span class="hljs-tag">&lt;<span class="hljs-name">strong</span>&gt;</span>エラーです<span class="hljs-tag">&lt;/<span class="hljs-name">strong</span>&gt;</span>
{{/isError}}
</code></span></pre>


<p>これは Mustache での制御構文の例です。（制御構文の書き方はライブラリによって大きく異なります）</p>



<h3 class="wp-block-heading">テンプレートのコンパイル</h3>



<p>Mustache.render のようにテンプレートとデータを渡して出力する方法の他に、 テンプレートをコンパイルしてしまって繰り返し再利用可能な関数にしてしまう事もできます。 コンパイルも多くのテンプレートエンジンで実装されています。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> render = Mustache.compile(template);
<span class="hljs-keyword">var</span> output = render(data);
</code></span></pre>


<p>何度も繰り返し使うようなパーツはコンパイルしてしまったほうが、 人にもパフォーマンスにも優しそうです。</p>



<h3 class="wp-block-heading">テンプレート文字列</h3>



<p>Web開発においてテンプレート文字列の内容は主に HTML であり、JavaScript の文字列リテラルで表現するには長過ぎます。 そこで、次のように script 要素の中に閉じ込めてしまう手法がよくとられます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/template"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"template-profile"</span>&gt;</span><span class="handlebars"><span class="xml">
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"profile"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"name"</span>&gt;</span></span><span class="hljs-template-variable">{{name}}</span><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"email"</span>&gt;</span></span><span class="hljs-template-variable">{{email}}</span><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</span></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-keyword">var</span> template = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"template-profile"</span>).innerHTML;
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<h2 class="wp-block-heading">テンプレートエンジンライブラリの色々</h2>



<p>どのライブラリも記法・機能が千差万別です。 自分のスタイルや、プロジェクトに合ったテンプレートエンジンを選択しましょう。</p>



<h3 class="wp-block-heading">Mustache</h3>



<p><a href="http://mustache.github.io/">http://mustache.github.io/</a></p>



<p>Mustache の特徴として、「多言語に対応している」事と、「ロジックレスである」事が挙げられます。 JavaScript の他にも20言語（2013年12月現在）にわたって実装されていて、 サーバサイドでもフロントでも同じ記法でテンプレートを書くことができます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">section</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>{{title}}<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    {{#onsale}}<span class="hljs-tag">&lt;<span class="hljs-name">strong</span>&gt;</span>セール中！<span class="hljs-tag">&lt;/<span class="hljs-name">strong</span>&gt;</span>{{/onsale}}
    <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
    {{#items}}
        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>{{name}} : {{price}}<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    {{/items}}
    <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">section</span>&gt;</span>
</code></span></pre>


<p>ループや条件分岐は {{#name}} で表現する為、複雑な制御は出来ません。</p>



<h3 class="wp-block-heading">hogan.js</h3>



<p><a href="http://twitter.github.io/hogan.js/">http://twitter.github.io/hogan.js/</a></p>



<p>hogan.js は Mustache 互換のテンプレート記法を採用した、Twitter が提供するテンプレートエンジンです。 Mustache と変わらない記述で、本家よりも速く動作するとしています。 出力の仕方は Mustache と変わりありません。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> output = hogan.render(template, data); <span class="hljs-comment">// 出力</span>
<span class="hljs-keyword">var</span> render = hogan.compile(template); <span class="hljs-comment">// コンパイル</span>
</code></span></pre>


<h3 class="wp-block-heading">EJS</h3>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://github.com/visionmedia/ejs
</div></figure>



<p>Ruby の ERB スタイルでテンプレートを書ける JavaScript のライブラリです。 Mustache系と違って、テンプレート内にそのまま JavaScript コードを記述する事ができます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">section</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">%=</span> <span class="hljs-attr">title</span> %&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">%</span> <span class="hljs-attr">if</span>(<span class="hljs-attr">onsale</span>) { %&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">strong</span>&gt;</span>セール中！<span class="hljs-tag">&lt;/<span class="hljs-name">strong</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">%</span> } %&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">%</span> <span class="hljs-attr">items.forEach</span>(<span class="hljs-attr">function</span>(<span class="hljs-attr">item</span>){ %&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">%=</span> <span class="hljs-attr">item.name</span> %&gt;</span> : <span class="hljs-tag">&lt;<span class="hljs-name">%=</span> <span class="hljs-attr">item.price</span> %&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">%</span> }) %&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">section</span>&gt;</span>
</code></span></pre>


<p>テンプレートにロジックが必要な場合は非常に強力な味方になりますね。 記述もタグで囲むだけのシンプルなもので、 Ruby 開発者は勿論、PHP の開発者にとっても馴染みのある書き方なのではないでしょうか。</p>



<p>出力に使うメソッド名は上に上げたものと変わりません。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> output = ejs.render(template, data); <span class="hljs-comment">// 出力</span>
<span class="hljs-keyword">var</span> render = ejs.compile(template); <span class="hljs-comment">// コンパイル</span>
</code></span></pre>


<h3 class="wp-block-heading">underscore</h3>



<p><a href="http://underscorejs.org/">http://underscorejs.org/</a></p>



<p>underscore.js は便利なメソッドを多数提供してくれる大変有難いライブラリですが、 その中の <strong>_.template</strong> メソッドがテンプレートエンジンとして働いてくれます。</p>



<p>テンプレートの記述は ERB に倣った物で、上の EJS で書いたテンプレートがそのまま _.template で動作します。 出力もコンパイルも同じメソッドで行います。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> output = _.template(template, data); <span class="hljs-comment">// 出力</span>
<span class="hljs-keyword">var</span> render = _.template(template); <span class="hljs-comment">// コンパイル</span>
</code></span></pre>


<p>一番の魅力は、この機能が underscore.js の一部でしかないという点だと思います。 他の便利なメソッドを使う為に、あるいは Backbone.js を使う為にインクルードしておいた underscore.js がテンプレートエンジンとしても働き、 新たに別のライブラリを読み込む必要がないのです。</p>



<h2 class="wp-block-heading">参考資料</h2>



<ul class="wp-block-list">
<li><a href="http://mustache.github.io/">{{ mustache }}</a></li>



<li><a href="http://twitter.github.io/hogan.js/">Hogan.js</a></li>



<li><a href="https://github.com/visionmedia/ejs">visionmedia/ejs</a></li>



<li><a href="http://underscorejs.org/">Underscore.js</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CodeIgniterの出力にMustacheを使ってみる</title>
		<link>https://blog.mach3.jp/2011/03/01/mustache-on-codeigniter.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 01 Mar 2011 01:00:52 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Mustache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Template]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1631</guid>

					<description><![CDATA[シンプルで軽量なPHPフレームワーク、CodeIgniterのビューで これまた軽量なMustacheを使用してみるメモ。 CodeIgniterのビューファイルではプレーンなPHPを書きますが、 Mustacheを読み [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>シンプルで軽量なPHPフレームワーク、CodeIgniterのビューで<br />
これまた軽量なMustacheを使用してみるメモ。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/_JJkNs5Ixl70/TWvWRwYUpcI/AAAAAAAABNc/OL5j1uGU-2Q/201103010203.png" alt="CodeIgniter + Mustache"/></figure>



<p></p>



<span id="more-1631"></span>



<p>CodeIgniterのビューファイルではプレーンなPHPを書きますが、<br />
Mustacheを読み込んで使用する事で、<br />
より簡単な、見通しの良いビューファイルが出来上がるのでは！ と思いやってみました。</p>



<h2 class="wp-block-heading">普通にライブラリとして読み込む</h2>



<h3 class="wp-block-heading">配置する</h3>



<p class="caution">
  執筆時からMustacheのバージョンが変わり、単ファイルではなくなっているため、手順が大きく変わる可能性があります。 （2012/10/25）
</p>



<p>まずはPHP版のMustacheをダウンロードしてきます。</p>



<p>» <a href="https://github.com/bobthecow/mustache.php/">bobthecow/mustache.php · GitHub</a></p>



<p>ダウンロードしてきたMustache.phpを、<br />
system/application/libraries/ にコピーします。<br />
ここは、CIのユーザーライブラリを格納しておくお決まりの場所です。<br />
cf) <a href="http://codeigniter.jp/user_guide_ja/general/creating_libraries.html">ライブラリの作成 : CodeIgniter ユーザガイド 日本語版</a></p>



<h3 class="wp-block-heading">簡単な例</h3>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;library( <span class="hljs-string">"mustache"</span> );

<span class="hljs-keyword">echo</span> <span class="hljs-keyword">$this</span>-&gt;mustache-&gt;render(
    <span class="hljs-comment">// 第一引数はテンプレート（文字列）</span>
    <span class="hljs-string">"Hello, I am {{name}}"</span>,
    <span class="hljs-comment">// 第二引数はテンプレートに渡す連想配列</span>
    <span class="hljs-keyword">array</span>( <span class="hljs-string">"name"</span> =&gt; <span class="hljs-string">"HogeFuga"</span> )
);
<span class="hljs-comment">// Hello, I am Hogefuga</span>
</code></span></pre>


<p>文字列をテンプレートとして出力してみた例。</p>



<h3 class="wp-block-heading">ビューファイルを読み込んで出力する</h3>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">/* コントローラ内 */</span>
<span class="hljs-keyword">$this</span>-&gt;load-&gt;library( <span class="hljs-string">"mustache"</span> );
<span class="hljs-keyword">$this</span>-&gt;mustache-&gt;render(
    <span class="hljs-keyword">$this</span>-&gt;load-&gt;view( <span class="hljs-string">"example.php"</span>, <span class="hljs-keyword">null</span>, <span class="hljs-keyword">true</span> ),
    <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"members"</span> =&gt; <span class="hljs-keyword">array</span>(
            <span class="hljs-keyword">array</span>( <span class="hljs-string">"name"</span> =&gt; <span class="hljs-string">"太郎"</span> ),
            <span class="hljs-keyword">array</span>( <span class="hljs-string">"name"</span> =&gt; <span class="hljs-string">"花子"</span> ),
            <span class="hljs-keyword">array</span>( <span class="hljs-string">"name"</span> =&gt; <span class="hljs-string">"ジョンソン"</span> )
        )
    )
);
</code></span></pre>


<p>CIおなじみの$this-&gt;load-&gt;view()の第三引数にtrueを渡すと<br />
結果を文字列で受け取れるのでそれを使います。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-comment">&lt;!--ビューファイル（example.php）--&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
    {{#members}}
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>わたしが{{name}}です！<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    {{/members}}
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
</code></span></pre>


<p>出力結果</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-comment">&lt;!--出力結果--&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>わたしが太郎です！<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>わたしが花子です！<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>わたしがジョンソンです！<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
</code></span></pre>


<h2 class="wp-block-heading">Controllerを拡張してみる</h2>



<p>毎度$this-&gt;mustache-&gt;render()と、$this-&gt;load-&gt;view()を<br />
両方呼ぶのが面倒だと感じたなら、<br />
コアクラスのControllerを拡張してしまう手もあります。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">/*
 * 2.0でおき場所がかわったので注意
 * 1.7.x → system/application/libraries/MY_Controller.php
 * 2.0 → system/application/core/MY_Controller.php
 */</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MY_Controller</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{

    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">__construct</span><span class="hljs-params">()</span></span>{
        <span class="hljs-keyword">parent</span>::__construct();
        <span class="hljs-keyword">$this</span>-&gt;load-&gt;library(<span class="hljs-string">"mustache"</span>);
    }

    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">_render</span><span class="hljs-params">( $name, $data = null, $return = false )</span></span>{
        $res = <span class="hljs-keyword">$this</span>-&gt;mustache-&gt;render(
            <span class="hljs-keyword">$this</span>-&gt;load-&gt;view( $name, <span class="hljs-keyword">null</span>, <span class="hljs-keyword">true</span> ),
            $data
        );
        <span class="hljs-keyword">if</span>( $return ) <span class="hljs-keyword">return</span> $res;
        <span class="hljs-keyword">echo</span> $res;
    }
}
</code></span></pre>


<p>上の例では、$this-&gt;_render()を使う事で、<br />
$this-&gt;load-&gt;view()と同じ要領でビューファイルを<br />
Mustacheを通して出力する事が出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;_render(
    <span class="hljs-string">"example.php"</span>,
    <span class="hljs-keyword">array</span>( <span class="hljs-string">"name"</span> =&gt; <span class="hljs-string">"foobar"</span> )
);
</code></span></pre>


<h2 class="wp-block-heading">まとめ</h2>



<p>単純な出力しか出来ないので場合によっては不向きですが、<br />
他言語とテンプレートの共有が出来るなんていう利点もあったり。<br />
なかなか悪くない組み合わせな気がします。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>どこでも活躍できるテンプレートエンジン「Mustache」</title>
		<link>https://blog.mach3.jp/2010/10/05/mustache-template-engine.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 05 Oct 2010 03:34:25 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mustache]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Template]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=807</guid>

					<description><![CDATA[世にテンプレートエンジンは多くあれど、 これ程多くの場所で活躍出来るテンプレートエンジンはなさそうです。 本稿はそんなテンプレートエンジン「Mustache」の試用レビューです。 Mustacheについて {{ must [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>世にテンプレートエンジンは多くあれど、<br />
これ程多くの場所で活躍出来るテンプレートエンジンはなさそうです。<br />
本稿はそんなテンプレートエンジン「Mustache」の試用レビューです。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TKnnq0vc63I/AAAAAAAABDE/OOIY9hnndPo/201010042339.png" alt="Mustache"/></figure>



<p></p>



<span id="more-807"></span>



<h2 class="wp-block-heading">Mustacheについて</h2>



<p><a href="http://mustache.github.com/">{{ mustache }}</a></p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TKnnq894ymI/AAAAAAAABDI/hGayGzxelqI/201010042340.png" alt="Mustache"/></figure>



<p></p>



<p>&#8220;Mustache&#8221;というのは口ひげを指す言葉で、「ますたっしゅ」とか発音する様です。<br />
テンプレートタグに使用されている「{」が口ひげに似てるので、そこらへんが由来っぽいです。</p>



<p>公式を見れば分かるとおり、Mustacheは1言語にとどまらず、<br />
様々な言葉で開発されているテンプレートエンジンです。<br />
知らない言語も入ってたりしますね…。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Available in Ruby, JavaScript, Python, Erlang, PHP, Perl, Go, Lua, ooc, C++, ActionScript, Java, ColdFusion, Scala, and for node.js.</p>
</blockquote>



<h2 class="wp-block-heading">簡単な使い方</h2>



<p>JavaScript版のmustache.jsで簡単な使い方を紹介してみます。</p>



<h3 class="wp-block-heading">最もシンプルな例</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'Hello, {{name}}!'</span>;
<span class="hljs-keyword">var</span> html = Mustache.to_html( template, {
    <span class="hljs-attr">name</span>:<span class="hljs-string">"mach3"</span>
});
alert(html); <span class="hljs-comment">// "Hello, mach3!"</span>
</code></span></pre>


<p>テンプレートにデータを渡して出力するには、<em>Mustache.to_html()</em>メソッドを使用します。<br />
第一引数はテンプレートの文字列、第二引数は渡すデータ(Object)です。<br />
基本的に<em>{{</em>と<em>}}</em>で囲った物が、テンプレートタグとして認識されます。</p>



<h3 class="wp-block-heading">条件分岐</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'{{#isError}}エラーが発生しました。{{/isError}}'</span>;
<span class="hljs-keyword">var</span> html = Mustache.to_html( template, {
    <span class="hljs-attr">isError</span>:<span class="hljs-literal">true</span>
});
</code></span></pre>


<p>dataの値がtrueである場合に<br />
<em>{{#data}}</em>と<em>{{/data}}</em>に囲まれた部分が処理されます。<br />
ちなみに条件を逆にしたい場合は、<em>#</em>の代わりに<em>^</em>を使用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'{{^isError}}正常です。{{/isError}}'</span>;
</code></span></pre>


<h3 class="wp-block-heading">ループ処理</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'&lt;ul&gt;{{#fruits}}&lt;li&gt;{{.}}&lt;/li&gt;{{/fruits}}&lt;/ul&gt;'</span>;
<span class="hljs-keyword">var</span> html = Mustache.to_html( template, {
    <span class="hljs-attr">fruits</span>:&#91;<span class="hljs-string">"apple"</span>,<span class="hljs-string">"orange"</span>,<span class="hljs-string">"banana"</span>]
});
</code></span></pre>


<p>記法は条件分岐と同じですが、dataが配列等の可算なオブジェクトだった場合は<br />
その数だけ<em>{{#data}}</em>と<em>{{/data}}</em>に囲まれた部分が処理されます。<br />
<em>{{.}}</em>とする事で現在の値にアクセス出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> template = <span class="hljs-string">'&lt;ul&gt;{{#fruits}}&lt;li&gt;{{name}} : &amp;yen;{{price}}&lt;/li&gt;{{/fruits}}&lt;/ul&gt;'</span>;
<span class="hljs-keyword">var</span> html = Mustache.to_html( template, {
    <span class="hljs-attr">product</span>:&#91;
        { <span class="hljs-attr">name</span>:<span class="hljs-string">"apple"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">100</span> },
        { <span class="hljs-attr">name</span>:<span class="hljs-string">"orange"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">75</span> },
        { <span class="hljs-attr">name</span>:<span class="hljs-string">"banana"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">50</span> }
    ]
});
</code></span></pre>


<p>もう少し複雑な例です。<br />
配列の値がオブジェクトである時は、ループ内で直接nameやpriceの値にアクセス出来ます。<br />
一覧を出力する場合等はこの方法を選択する事になるでしょう。</p>



<h3 class="wp-block-heading">コメントアウト</h3>


<pre class="wp-block-code"><span><code class="hljs language-xml">var template = '<span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>超音速。{{! この中はスルーされます }}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>'
</code></span></pre>


<p><em>{{! &#8230; }}</em>とすると、その中身はコメントと認識されてスルーされます。</p>



<p>さらに高度なテンプレートタグについては、GithubのREADME/Manualをご覧ください。</p>



<ul class="wp-block-list">
<li><a href="http://github.com/janl/mustache.js">janl&#8217;s mustache.js at master &#8211; GitHub</a> </li>



<li><a href="http://mustache.github.com/mustache.5.html">mustache(5) &#8212; Logic-less templates.</a> </li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>必要な機能が十分に備わっているのは勿論、<br />
どの言語を使用しても同じ記法でテンプレートが書けるというのは強みですね。<br />
しかも、特にWeb屋が扱う言語は概ね網羅している様子。<br />
非常に有用なライブラリと思いますが、如何でしょうか。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>「jquery.tmpl.js」による手軽なJavaScriptテンプレーティング</title>
		<link>https://blog.mach3.jp/2010/04/12/jquery-tmpl-js.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 12 Apr 2010 23:51:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Template]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/04/12/%e3%80%8cjquery-tmpl-js%e3%80%8d%e3%81%ab%e3%82%88%e3%82%8b%e6%89%8b%e8%bb%bd%e3%81%aajavascript%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0.html</guid>

					<description><![CDATA[nje’s jquery-tmpl at master – GitHub jQueryのテンプレートプラグインは幾つか公開されていますが、 中でもこれはjQueryに馴染んだ記法になるので、使い易いのではないでしょうか。 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="http://github.com/nje/jquery-tmpl">nje’s jquery-tmpl at master – GitHub</a><br />
jQueryのテンプレートプラグインは幾つか公開されていますが、<br />
中でもこれはjQueryに馴染んだ記法になるので、使い易いのではないでしょうか。<br />
というわけで、軽くご紹介。</p>



<span id="more-61"></span>



<p><a href="http://github.com/nje/jquery-tmpl">nje’s jquery-tmpl at master – GitHub</a><br />
ダウンロードはこちらの「DOWNLOAD SOURCE」より。</p>



<p>軽くデモしてみました。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"template"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/html"</span>&gt;</span><span class="handlebars"><span class="xml">
    <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>{%= name %} : ¥{%= price %}<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
</span></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>

<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span>&gt;</span><span class="javascript">
    <span class="hljs-keyword">var</span> foods = &#91;
        { <span class="hljs-attr">name</span>:<span class="hljs-string">"おにぎり"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">100</span> },
        { <span class="hljs-attr">name</span>:<span class="hljs-string">"フライドチキン"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">150</span> },
        { <span class="hljs-attr">name</span>:<span class="hljs-string">"カップラーメン"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">180</span> }
    ];
    $(<span class="hljs-string">"#template"</span>).render(foods).appendTo(<span class="hljs-string">"ul"</span>);
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>結果</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li>おにぎり : ¥100</li>



<li>フライドチキン : ¥150</li>



<li>カップラーメン : ¥180</li>
</ul>
</blockquote>



<p>特徴として、テンプレートの中身をscript要素に挿入しています。<br />
typeが<em>text/html</em>になっているのに注意しましょう。<br />
script要素（#template）に格納されているテンプレートを<br />
foodsを元にレンダリングし、ulに挿入する、という流れです。</p>



<p>HTMLの出力には、renderメソッドを用います。</p>



<h3 class="wp-block-heading">jQuery.fn.render( data, options )</h3>



<dl>
<dt>data : Array or Object</dt>
<dd>If an array, the template is instantiated once for each item. Otherwise, the template is instantiated only once. （配列ならそれぞれのアイテムに対して、そうでなければ一度だけテンプレートがインスタンス化されます。）</dd>
<dt>options : Object</dt>
<dd>An object literal representing optional settings. You can set a rendering and rendered event handler. You also can pass any value and the value will be passed to the template. （オプションの設定を格納したオブジェクトリテラルを受け取ります。&#8221;rendering&#8221;または&#8221;rendered&#8221;イベントにコールバックを設定する事が可能。また、テンプレートに渡す値を自由に設定する事も出来ます。)</dd>
</dl>



<p>必殺跳訳。だいたい（!?）こんなかんじの意味でしょう。<br />
渡したいアイテムが一つだけの場合は、以下のような感じで。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> foods = { <span class="hljs-attr">name</span>:<span class="hljs-string">"おにぎり"</span>, <span class="hljs-attr">price</span>:<span class="hljs-number">100</span> };
</code></span></pre>


<p>なお、&#8221;rendering&#8221;および&#8221;rendered&#8221;イベントは、<br />
それぞれのアイテムのレンダリング全てに関してコールされるのでご注意を。<br />
foodsの中身が100個あれば100回呼ばれます。</p>



<p>この他にも色んな提案が書かれていましたが、<br />
一番よさげと思ったjQuery.fn.renderをログってみました。<br />
他の提案も気になる方はこちらから。<br />
<a href="http://wiki.github.com/nje/jquery/jquery-templates-proposal">jQuery Templates Proposal &#8211; jquery &#8211; GitHub</a><br />
既存のテンプレートエンジンについても言及していますよ。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
