1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】ヒアドキュメントについて

Posted at

はじめに

こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
本日はヒアドキュメントについてまとめていきたいと思います。
現在文字列クラスについて勉強中なのですが、ヒアドキュメントを初めて聞き意外と知らない方もいるのかなと思い簡単にまとめてみようと思いました

ヒアドキュメントとは

ヒアドキュメント(Here Document)は、複数行の文字列を簡単に作成するための行指向文字列リテラルです。
長い文章を埋め込むときには通常のクォーテーションよりも見やすいのが特徴です

ヒアドキュメントの基本形は、、<< 演算子の後に識別子を指定し、その識別子で始まり、再度同じ識別子が現れるまでの間の文字列を、1つの文字列として扱います。

message = <<TEXT
これはRubyのヒアドキュメントのサンプルです。
複数行にわたる文字列を記述できます。
HTMLやSQLのテンプレートにも便利です。
TEXT

puts message
# => これはRubyのヒアドキュメントのサンプルです。
# => 複数行にわたる文字列を記述できます。
# => HTMLやSQLのテンプレートにも便利です。

ヒアドキュメントを使わない場合

ヒアドキュメントを使わずに複数行の文字列を作成すると、各行をクォーテーションで囲み、行ごとに改行文字(\n)を追加する必要があります。
この方法では記述が煩雑になり、視認性も悪くなります。

message = "これはRubyのヒアドキュメントのサンプルです。\n" +
          "複数行にわたる文字列を記述できます。\n" +
          "HTMLやSQLのテンプレートにも便利です。"

puts message

ヒアドキュメントを使うと、コードがより簡潔で読みやすくなり、変更やメンテナンスもしやすくなります。

識別子の選択と種類

ヒアドキュメントの識別子には自由な名前が使えますが、慣例として EOF(End of File) や EOS(End of String) などがよく使われます。
また、識別子をシングルクォーテーション ' で囲むかダブルクォーテーション " で囲むかで、文字列の挙動が変わります

  • ダブルクォーテーション(<<-"EOS")
    式展開や特殊文字が有効
  • シングルクォーテーション(<<-'EOS')
    式展開や特殊文字が無効
name = "田中"
message1 = <<-"EOS"
こんにちは、#{name}さん。
今日は良い天気ですね。
EOS

message2 = <<-'EOS'
こんにちは、#{name}さん。
今日は良い天気ですね。
EOS

puts message1  # => こんにちは、田中さん。今日は良い天気ですね。
puts message2  # => こんにちは、#{name}さん。今日は良い天気ですね。

<<-<<~ の違い

<<-

この記法では識別子の前にハイフン(-)を付けることで、インデントされた識別子も認識されます。
ただし、文字列の内容そのものにはインデントが残ります。

message = <<-EOS
  この行はインデント付きで出力されます。
  ヒアドキュメントが終了する識別子もインデントできます。
EOS

puts message

出力結果

    この行はインデント付きで出力されます。
    ヒアドキュメントが終了する識別子もインデントできます。

<<~

この記法を使用すると、内容自体のインデントが取り除かれ、見た目を整えながらコードを記述できます。

message = <<~EOS
  この行のインデントは削除されて出力されます。
  ヒアドキュメントの内容がきれいに整えられます。
EOS

puts message

出力結果

この行のインデントは削除されて出力されます。
ヒアドキュメントの内容がきれいに整えられます。

応用例

ヒアドキュメントは上記のようなケースではなく、HTMLコード等の長いコードを作成したいときにも使用することが可能です。

name = "山田"
html = <<~EOS
  <html>
    <body>
      <h1>こんにちは、#{name}さん!</h1>
      <p>Rubyのヒアドキュメントを使ってHTMLを生成しています。</p>
    </body>
  </html>
EOS

puts html

まとめ

Rubyのヒアドキュメントは、複数行の文字列を簡潔に記述し、テンプレートなどの複雑な文字列操作を行う際に便利です。
ここで紹介したように、<<-<<~ といった記法を使ってインデントや式展開の設定も柔軟に行うことが可能になります。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?