LoginSignup
14
11

More than 5 years have passed since last update.

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

Posted at

ヒアドキュメントとは

ヒアドキュメントとは一言で言うと、
『文字列をシェルスクリプトやプログラミング言語に埋め込むための方法』

改行や空白などが書いた通りに適用されるため、複数行に渡る長い文字列を作成する場合に
スッキリ書くことができる。

どんな時に使うのか

・シェルスクリプトに別のスクリプトを埋め込む
・プロトタイプ時のモックデータとして
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/

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11