概要
テンプレートを元にテキストを生成する
前提
この記事は、非エンジニアさんも含めた初心者向けです。
状況
あるテンプレートがあり、一部だけ変更したテキストを多数生成したい場合。
サンプルデータ
以下のような表彰状を多数作成したい場合。
- 表彰対象となる ○○○○ は付与対象により変更となります
- 全は連 の会長名 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 による繰り返し処理