ヒアドキュメントとは・基本の使い方(ruby)


ヒアドキュメントとは

ヒアドキュメントとは一言で言うと、

『文字列をシェルスクリプトやプログラミング言語に埋め込むための方法』

改行や空白などが書いた通りに適用されるため、複数行に渡る長い文字列を作成する場合に

スッキリ書くことができる。


どんな時に使うのか

・シェルスクリプトに別のスクリプトを埋め込む

・プロトタイプ時のモックデータとして

etc


使い方


基本

data =  <<EOS

test
テスト
123
EOS

識別子は慣習的にEOFやEOSが使われるが、終わりと始まりで一致していれば何を使用しても良い。


インデント

  data =  <<EOF

test
テスト
123
EOF

=> SyntaxError: can't find string "EOF" anywhere before EOF

dataの前にインデントをつけると

エラーになる

インデントを付けたい場合は

識別子の前に「-」をつける。

  data =  <<-EOF

test
テスト
123
EOF

またドキュメント内にインデントをつけると空白と認識されてしまう。

先頭のインデントを無視させるには、識別子の前に「~」をつける

data =  <<EOF

test
テスト
123
EOF
=> " test\n テスト\n 123\n"

data = <<~EOF
test
テスト
123
EOF
=> "test\nテスト\n123\n"


式展開

式展開も可能。

name = "TAKE"

country = "日本"
data = <<EOF
私の名前は#{name}です
#{country}から来ました。
EOF
=> "私の名前はTAKEです\n日本から来ました。\n"

識別子をシングルクオーテーションで囲むと式展開は無効になる

(文字列として認識される)

name = "TAKE"

country = "日本"
data = <<'EOF'
私の名前は#{name}です
#{country}から来ました。
EOF
=> "私の名前は\#{name}です\n\#{country}から来ました。\n"


その他

ヒアドキュメント内の文字列に対してメソッドを実行できる

data =  <<EOF.upcase

test
ruby
EOF
=> "TEST\nRUBY\n"

複数のヒアドキュメントを組み合わせることもできる

data =  <<EOF1, <<EOF2

ヒアドキュメント1
EOF1
ヒアドキュメント2
EOF2
=> ["ヒアドキュメント1\n", "ヒアドキュメント2\n"]


参考

https://www.sejuku.net/blog/14283#i-10

https://tomoyuki65.com/how-to-use-heredoc-in-ruby/