📚

erbに関する私的メモ

2021/06/19に公開

要約

自分の使いやすいテンプレートエンジンを求めて、このメモを残します。

はじめに

この文章を書いた動機

dotfilesの管理プログラムに、TheLocehiliosan/yadm: Yet Another Dotfiles Manager というプログラムがある。このプログラムには、templateと呼ばれる機能があり、呼び出されたOS, マシン名、 クラス(自分で定義できるスキーマみたいなの), ユーザ名、 distroなどを受け取って、テンプレート展開できる。 see Templates - yadm これを使うと、dotfilesをsymbolic linkで作っていると実行可能なファイルは自分で動的に切り替えられるが、そうでないファイルは編集し回らないといけない手間が減る。

現在yadmは、素朴なawkによる実装、esh(shで作られた、テンプレートエンジン), j2cli(pythonのjinja2), envtplをサポートしている。どれをメインで使うのがいいのか、それともerbを使うのがいいのかを判断する一助として本文章を書いている。主に自分のためであり、動的に設定ファイルを生成したい時にこの文章を見ることになろう。

この文章はだれ向けか

主に自分、erbに興味を持っている人。動的に設定ファイルを作る方法について興味がある人

この文書の読み方

この文書は、本文だけだと意味がわからないと思うので、必要に応じて動機なども確認してください。

本文

sample

下記はサンプルを改変して、yadmで使ったときに便利そうな書き方を試している。

yadm標準だと、distro名はとれるが、versionはとれないが、マシン名はとれるので、case when句で、複数のマシン名で処理をくくれるのは、素朴なawk実装だと面倒くさい。
yadmのドキュメントにもあるが、shell scriptや ~/.vimrcなど実行して評価される系のやつはこんな仕掛けは必要なく、自分で分岐したらいい。

でも、~/.Xresourceなどに画面スケールを埋める場合は、使っているマシン毎に変えたくなる部分がでるだろう。

知見がたまったら、また書く。programの中のヒアドキュメントとして使われる例が多数だが、テンプレート展開として、こう使うといいみたいのができるといいな。


<? xml version="1.0" ?>
<%# コメントだよ %>
<% user = ENV["USER"] %>
<% require 'prime' -%>
<erb-example>
  <calc><%= 1+1 %></calc>
  <var><%= __FILE__ %></var>
  <library><%= Prime.each(10).to_a.join(", ") %></library>
  <% if user == "yabuki" %> hello yabuki <% else %> hello you <% end %>
  <% case user
  when "yabuki" then %>
hello yabuki
  <% when "yukiharu" %>
hello yukiharu
  <% else %>
hello you
  <% end %>
  <% machine = `hostname`.chomp %>
  <%= $?.to_s %>
  <%= machine %>
  <% case machine
  when "Orlanth", "Odayla" %>
you are in Debian/Sid.
  <% else %>
you are in Debian/Buster.
  <% end %>

</erb-example>

下記のように実行する。
erb -T - examples.erb

<? xml version="1.0" ?>


<erb-example>
  <calc>2</calc>
  <var>examples.erb</var>
  <library>2, 3, 5, 7</library>
   hello yabuki 
  
hello yabuki
  
  
  pid 3878586 exit 0
  Orlanth
  
you are in Debian/Sid.
  

</erb-example>

空白行ができる件については、設定ファイルなら問題にならないこともあるので、問題にぶつかるまでは放置。erb -Tオプションと、その使い方かなぁ。コメント書くと空白行が増えるのはいまいちだけど。あと、これは自動生成だから、yadm.sourceを触れというのもいるな。

erbには、まだまだわかっていないことがあって <%でなく % で始まるのは、どこでどう有効なのかとか。 -Tオプションの使い方とか。わかったら追記していこう

参考にしたドキュメントたち

関連するかも知れないドキュメントたち

謝辞

erb作者、そして、erb周辺のドキュメントを整備していただいている方々に。

さいごに

件名 日付
記事を書いた日 2021-06-19
記事を変更した日 2024-10-23

上記は、この記事の鮮度を判断する一助のために書き手が載せたものです。

詳細な変更履歴は、 GitHub - yabuki/friendly-potato: zenn-contents を参照してください。

記事に対するTypoの指摘などは、pull reqをしてもらえるとありがたいです。受け入れるかどうかは、差分とPull reqの文章で判断いたします。





GitHubで編集を提案

Discussion