ヒアドキュメントを使って複数行の文字列を作成する

複数行の長い文字列を作成する場合にはヒアドキュメントを利用すると便利です。ここでは Ruby でヒアドキュメントを使って複数行の文字列を作成する方法について解説します。

(2022 年 10 月 13 日公開 / 2022 年 10 月 24 日更新)

ヒアドキュメントの使い方

ヒアドキュメントを使うと複数行の文字列を作成することができます。書式は次の通りです。

<<"識別子"
1行目
2行目
...
最終行
識別子

上記の場合、「<<"識別子"」の次の行から「識別子」の前の行末までが作成される文字列となります。改行されている箇所は実際に改行が文字列に入ります。「<<"識別子"」は行頭である必要はありませんが、最後の「識別子」は行頭に記述する必要があります。

識別子には任意の文字列を指定できます。1文字でなくても構いません。どのような文字でも構いませんが EOS などがよく使われているようです。(EOS=End of String)。

<<"EOS"
こんにちは
お元気ですか
ではさようなら
EOS

これは次のように記述した場合と同じです。

"こんにちは\nお元気ですか\nではさようなら\n"

識別子をダブルクオーテーションで囲んだ場合は文字列をダブルクオーテーションで囲んだ場合と同じ扱いになり、シングルクオーテーションで囲んだ場合は文字列をシングルクオーテーションで囲んだ場合と同じになります。(単に識別子が記述された場合は、ダブルクオーテーションで囲んだ場合と同じです)。

<<'EOS'
こんにちは
お元気ですか
ではさようなら
EOS

「<<"識別子"」の代わりに「<<-"識別子"」を使うと最後の識別子の前に空白やタブを記述することができます。

<<-"識別子"
1行目
2行目
...
最終行
  識別子

ヒアドキュメントは文字列ですので、他の文字列と同じく変数などに格納できます。(変数については他のページで詳しく確認します)。

str = <<"EOS"
こんにちは
お元気ですか
ではさようなら
EOS

また「print」メソッドなどの引数に指定する場合は次のような記述方法となります。

print(<<"EOS")
こんにちは
お元気ですか
ではさようなら
EOS

このような場合、「<<"識別子"」が書かれた箇所に次の行から最後の「識別子」の前の行までを1つの文字列と見なして「<<"識別子"」と置き換えます。

サンプルコード

では簡単なプログラムで確認してみます。

# encoding: UTF-8

str = <<"EOS"
こんにちは
  お元気ですか
    ではさようなら
EOS

puts(str)

下記のように実行して下さい。

ヒアドキュメントによる複数行文字列の作成

ヒアドキュメント内の各行の先頭に空白などが含まれている場合は、その空白も含めた文字列となりますので注意して下さい。

-- --

Ruby でヒアドキュメントを使って複数行の文字列を作成する方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。