元ネタは Homebrew の String#undent メソッドです. ここで紹介するものはそれを少し賢くしています. class String def undent min_space_num = self.split("\n").delete_if{|s| s=~ /^\s*$/ }.map{|s| s[/^\s+/].length }.min gsub(/^[ \t]{,#{min_space_num}}/, '') end end Ruby のヒアドキュメントは, class Notifier def warning <<-EOS This is warning. your action is invalid. check your input. EOS end end という風に,インデントを無視して書かなければなりません. なぜなら,<<-EOS と EOS で囲まれている