ひよっこエンジニアの雑多な日記

なんとかWeb系のエンジニアをやっています。

Rubyのヒアドキュメントで改行文字が認識されなくて戸惑った話

できるだけ気づきがあったらブログを更新しようと努力したいきむらです。
今回の記事はめっちゃ初歩的かつ、なんならヒアドキュメント関係ない記事です…笑

概要

SlackBotに通知を投げさせるような処理を作っていて文面をヒアドキュメントで作成しようとしていました。
配列に値を格納してヒアドキュメント上でjoinを使って改行文字(\n)で連結表示させようとしていた時のことです。 joinの引数にもたせた改行文字がうんともすんともいわないホラー的な現象がおきていました。

書いていたプログラムは下のような感じです。

str_ary = ['hoge', 'fuga', 'piyo']

<<~EOS
  文字列一覧です
  #{str_ary.join('\n')}
EOS

これで

文字列一覧です
hoge
fuga
piyo

という結果を期待していたのですが実際に帰ってきた結果は以下

文字列一覧です
hoge\nfuga\npiyo

これは無情ですね。悲しみしかありません。
ヒアドキュメント上だと改行文字が認識されないのかな?とか思ってしまって無駄に調べ物して時間を潰してしまいました。

原因

調べたと言うより途中で気づいてしまいました。真犯人に。

結果的に言うとヒアドキュメントは1mmも悪いことはしていませんでした…

何が原因だったのかと言うと

str_ary.join('\n')

こいつでした。セパレート文字の指定の仕方が悪かったのです。

解決法

犯人であるセパレート文字の指定の方法を

str_ary.join("\n")

シングルクォーテーションからダブルクォーテーションに変更しました。
すると、なんということでしょう、期待した結果が得られるではありませんか。

シングルクォーテーションだと式展開ができないって言うのは知っていたのですが特殊文字エスケープされてしまって効かなくなるとは知りませんでした。

つまりヒアドキュメントは何も悪くない。文字列の指定の仕方が悪かったんだ。
めっちゃ細いし初歩的なことなんですが、僕みたいに迷える子羊となってしまう人が現れるかもしれないのでメモメモ。

さいごに

最近仕事をこなしてもこなしても増えるんだよなあ
自分、分裂できないかなあ