きりかノート 3冊め

おあそびプログラミング

PowerShellのテンプレートエンジンEPS

rubyのERBみたいの。

Windows上でテキスト生成するのにテンプレート処理的なことをしたくって、でもわざわざrubyとかいれるのもなあと思って、PowerShell Galleryで"Template"で検索。コード生成みたいのが多い中で、EPSがふつうにテキスト生成するものっぽいので試してみることに。

"<%" "%>"で囲った中にPowerShellのコードを書くと実行される。まんまeRuby/ERBだね。

ReadMe.mdの例。

   PS> Get-Content Test.eps
   Hi <%= $name %>

   <%# this is a comment -%>
   Please buy me the following items:
   <% 1..5 | %{ -%>
     - <%= $_ %> pigs ...
   <% } -%>

   Dave is a <% if($True) { %>boy<% } else { %>girl<% } %>.

   Thanks,
   Dave
   <%= (Get-Date -f yyyy-MM-dd) %>
   PS> Invoke-EpsTemplate -Path Test.eps -Safe -binding @{ name = "dave" }
   Hi dave

   Please buy me the following items:
     - 1 pigs ...
     - 2 pigs ...
     - 3 pigs ...
     - 4 pigs ...
     - 5 pigs ...

   Dave is a boy.

   Thanks,
   Dave
   2017-06-12

由来的にもわからないでもないが、"EPS"って名前はどーなん?特にファイル名の拡張子。

ファイル入力のとき相対パスを解決しない

Invoke-EpsTemplateには文字列かファイルのいずれかを食わせるんだけど、ファイル名を渡したときReadMeにあるように相対パスで書いてもうまく処理できないことがある。コードみたら簡単に直せそうだったのでプルリクエストだしといた。

テストどうするか悩んだものの、もともと-Pathに対してテストなかったのでスルー。

無事に取り込まれたので、現在の0.4.0の次のリリースで直ってると思う。

日本語環境でテストが失敗する

例外のテストがメッセージを検証するというものなので、日本語環境で実行すると失敗する。
手元では直してみたけれど、この方法でよいかが自信ないのでプルリクエスト出すのは保留してる。