コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

ムスタァッシュ……

ムスタァッシュって響きだけで記事を書き始めてしまったわけですが

突然ですが英単語クイズです。この単語の意味はなんでしょう?

Mustache

そうですね……。ムスタァッシュ……ですね。まあ、ひげとかそういう意味です。と言いたいところですが、なぜか英語ではひげをあらわす単語が複数あったりします。なんででしょうね。

ちなみに、ひげをあらわす単語はこんな感じです。深くは知りたい場合はググりましょう。

単語 意味
口ひげ mustache
頬ひげ beard / whiskers
もみあげ sideburn
ちょびひげ small mustache
縁どりひげ trimmed beard
コールマンひげ Coleman mustache
やぎひげ goatee

そんな感じで分類されます。色々ありますが「mustache」で言われたら概ね鼻と口の間に生えているひげのことという認識でいいと思います。


ついでだから Mustache やろうか

まあ、そんな話は置いておいて今日はこのテンプレートエンジンを触っていこうと思います。
{{ mustache }}

なぜやりだしたかと言えば、ムスタァッシュって響きだけで記事を書き始めてしまったからで理由は特にありません。


これ単体だけですと、使い道は微妙なんですがなんか色々なフレームワークに組み込まれていたり、いなかったりするので覚えておくといつか役に立つ日もあるかもしれません。まあ、よくわかんないですけどね。あと、使える言語が無駄に多いので触れる機会があるかもしれない。まあ、よくわかんないですけどね。


あ、情報が古いですがドットインストールに講座があるので興味があれば。
mustache入門

ドットインストール曰く、簡単な操作方法はこんな感じです。Gemを使ったインストールはgem install mustacheで落とせるっぽいですよ。他の言語での使い方は公式参照でお願いします。

データの用意(data.yml)

title: sample
score: 100
showScore: true
html: <p>
users:
  - name: sample01
    email: sample_mail01
  - name: sample02
    email: sample_mail02

テンプレート部分の用意(temp.mustache)

{{! コメント }}
- {{title}}
- {{score}}
- {{html}}
{{! HTMLタグの埋込 }}
- {{{html}}}
- {{&html}}

{{! 区切り記号の変更 }}
{{=<% %>=}}
- <% html %>
<%={{ }}=%>

{{! 真偽値の判定 }}
{{#showScore}}
- {{score}}
{{/showScore}}

{{^showScore}}
- score is false
{{/showScore}}

{{! 複雑なデータの操作 }}
{{! partial利用 }}
{{#users}}
{{> user}} 
{{!  user.mustacheに記述 - {{name}} ({{email}}) }}
{{/users}}

実行コマンドは以下のようにするといいらしい。

$mustache YAML.yml TEMPLATE.mustach

ちなみに今回利用したmustacheのバージョンは1.0.5でした。


触ってみた

このままmustacheファイルいじっても、いまいち「何に利用できるの?」感しかないのでドットインストールで落としてきてしまったMustacheで自分が思う使えそうな感じに書き換えたやつを試してみます。

なんかつくってみる。

require 'mustache'
class Test < Mustache
    def name
      "Andou"
    end
  
    def score
      rand(0..100)
    end
end
  
puts Test.render "お名前:{{name}}"
puts Test.render "点数:{{score}}"

実行するとこんな感じ。点数はランダムで表示されます。

$ ruby ***.rb
お名前:Andou
点数:46

まあ、こうやっても「何に使えるの?」感しかないっていうね……。でも、mustacheファイルつかってテキストファイルいじるよりかは汎用性は多少あるんではないでしょうか。テンプレート系の話は実装規模が大きくないと恩恵を得られないからね。仕方ないね。