テンプレートエンジンを作ろう!

テンプレートエンジンとは何か

テンプレートエンジンとはデータとテンプレートを受け取って組み合わせたものを出力するライブラリ

最近だとMustacheとかHoganとかHandlebarsとかUnderscoreとかが使われることが多い

それ以外にも簡単なので自作されることも
(ぶっちゃけこれでもいい)

function template (template, param) {
	return template.replace(/{{(.+)}}/g, function (all, name) {
		return param[name] || '';
	});
}

「じゃあなんで作るの?」

「じゃあなんで作るの?」

簡単な言語実装ができる

簡単な言語実装ができる

TDDと相性がいい

TDDと相性がいい

文字列処理の練習になる

文字列処理の練習になる

作り方

基本的な型は「テンプレート文字列と置き換え用objectを受け取って結果を返す」
(テンプレート文字列をコード上にどう保持するかという問題もあるけど)

ざっくりこんな感じ

function template (tmpl, param) {
	var result = '';
	while (true) {
		// tmpl === 'aaa{{bbb}}ccc'
		var match = tmpl.match(/([\s\S]+?)\{\{([\s\S]*?)\}\}([\s\S]+)/);
		if (!match) return result;
		// result === 'aaa'
		result += match[1];
		// element === 'bbb'
		var element = match[2];
		// tmpl === 'ccc'
		tmpl = match[3];
	}
	return result;
}

あとはテンプレートの仕様をどうするかで難易度は変わる

仕様例

仕様例

仕様例

仕様例

「実際実用になるか」

既存のテンプレートエンジンでいいものがない場合は自作でも結構使える

テンプレートエンジンはテストがそのままドキュメントになるので後で混乱することは少ない

ただ、最近はわりといいのが出てきたのでそっちを使うほうがいいかも

詳しくはこちら

クライアントサイドで動くJavaScript Template Engine7つ | 株式会社インフィニットループ技術ブログ

ご清聴ありがとうございました