集計バッチ等で生の SQL を heredoc で直接書いてコメントとかインデントとか入れて可読性を維持したいケースがあったので考えてみた.
注意としてはSQL分上の文字列リテラルでコメントとか改行に相当のものが含まれてると意図しない文字列になってしまうが、集計時はレアケースなので気にしない.
<<-SQL.gsub(%r(\-\- .*$), '').gsub(%r(/\*.+\*/), '').squish
SELECT
id, name -- comment
FROM
users
WHERE
users.age > 18 /* 未成年を除外 */ AND users.gender_code = 1
SQL
# => "SELECT id, name FROM users WHERE users.age > 18 AND users.gender_code = 1"
String#squish()
は Rails の ActiveSupport のメソッドです.