Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

てぃーびーの Ruby 練習帳 | テンプレートを元にテキストを生成する

概要

テンプレートを元にテキストを生成する

前提

この記事は、非エンジニアさんも含めた初心者向けです。

状況

あるテンプレートがあり、一部だけ変更したテキストを多数生成したい場合。

サンプルデータ

以下のような表彰状を多数作成したい場合。

  • 表彰対象となる ○○○○ は付与対象により変更となります
  • 全は連 の会長名 XXXX は、会長が良く変わるので度々変更されます
表彰状

○○○○ 殿

おめでとさん。

全は連(全日本月曜日よ爆ぜろ連合)
会長 XXXX

解法一覧

Level 0

全て手動で入力する。

Level 1

ひな形を用意しておき、ファイルコピーをしてから手動で変更する。

Level 2

以下の Ruby のプログラムを作成し、結果を利用する。 文字列の 式展開 を利用します。

  • lv2.rb
def output_message(name, chairman)
  template =<<-EOS
表彰状

#{name} 殿

おめでとさん。

全は連(全日本月曜日よ爆ぜろ連合)
会長 #{chairman}
  EOS
end

[
  { name: '田中', chairman: '小保方' }, 
  { name: '鈴木', chairman: '佐村河内' }, 
  { name: '佐藤', chairman: '野々村' }, 
].each do |targets|
  puts output_message(targets[:name], targets[:chairman])
  puts "-----------------------------------------------"
end
  • 出力
% ruby lv2.rb
表彰状

田中 殿

おめでとさん。

全は連(全日本月曜日よ爆ぜろ連合)
会長 小保方
-----------------------------------------------
表彰状

鈴木 殿

おめでとさん。

全は連(全日本月曜日よ爆ぜろ連合)
会長 佐村河内
-----------------------------------------------
表彰状

佐藤 殿

おめでとさん。

全は連(全日本月曜日よ爆ぜろ連合)
会長 野々村
-----------------------------------------------

Level 3

以下の Ruby のプログラムを作成し、結果を利用する。 標準ライブラリの erb を利用します。

  • lv3.rb
require 'erb'

def output_message(name, chairman)
  template =<<-EOS
表彰状

<%=name%> 殿

おめでとさん。

全は連(全日本月曜日よ爆ぜろ連合)
会長 <%=chairman%>
  EOS
  ERB.new(template).result(binding)
end

[
  { name: '田中', chairman: '小保方' }, 
  { name: '鈴木', chairman: '佐村河内' }, 
  { name: '佐藤', chairman: '野々村' }, 
].each do |targets|
  puts output_message(targets[:name], targets[:chairman])
  puts "-----------------------------------------------"
end
  • 出力
% ruby lv2.rb
表彰状

田中 殿

おめでとさん。

全は連(全日本月曜日よ爆ぜろ連合)
会長 小保方
-----------------------------------------------
表彰状

鈴木 殿

おめでとさん。

全は連(全日本月曜日よ爆ぜろ連合)
会長 佐村河内
-----------------------------------------------
表彰状

佐藤 殿

おめでとさん。

全は連(全日本月曜日よ爆ぜろ連合)
会長 野々村
-----------------------------------------------

必要な知識

この記事のサンプルコードを理解するためには以下の文法を理解している必要があります。
不明点は Google などで調べましょう。

  • 文字列の変数展開
  • 配列
  • Hash
  • erb の利用方法
  • メソッドの定義
  • ヒアドキュメント
  • each による繰り返し処理

親記事