どうもこんにちは。
今回は、Rubyのヒアドキュメントについて勉強をしたので、備忘録として残します。
ヒアドキュメントとは
ヒアドキュメントは、複数行にわたる文字列を簡単に扱うための構文です。
基本的な構文
文字列 = <<識別子
ここに複数行のテキストを記述します。
任意の行数だけ続けられます。
識別子
ヒアドキュメントで必要とするのは、識別子です。識別子は、どんな単語を使用しても大丈夫です。ただし、最初と最後の識別子が同じである必要があります。
message = <<END
こんにちは!
これはヒアドキュメントの例です。
複数行にわたるテキストを簡単に扱えます。
END
puts message
---
#=> こんにちは!
#=> これはヒアドキュメントの例です。
#=> 複数行にわたるテキストを簡単に扱えます。
変数展開や改行コードの扱い
変数展開や改行コードを使用する場合と使用しない場合で、使い分けが可能です。
使用する場合
まず、デフォルトの構文では変数展開や改行コードの使用が可能です。
name = "太郎"
message = <<END
こんにちは、#{name}さん!
今日は良い天気ですね。
END
puts message
#=> こんにちは、太郎さん!
#=> 今日は良い天気ですね。
また、通常の文字列と同様で、識別子を""
で括った場合も変数展開や改行コードの使用が可能です。(デフォルトでいいなら使わんですな)
使用しない場合
識別子を''
で括った場合、変数展開や改行コードの使用ができなくなります。
name = "太郎"
message = <<'END'
こんにちは、#{name}さん!
今日は良い天気ですね。\n
END
puts message
#=> こんにちは、#{name}さん!
#=> 今日は良い天気ですね。\n
ヒアドキュメントのインデントについて
デフォルトの構文では、以下のようにインデントを含めた状態で出力がされます。
def example
message = <<-END
これはインデントされたヒアドキュメントの例です。
メソッド内でインデントしても問題ありません。
END
puts message
end
example
#=> これはインデントされたヒアドキュメントの例です。
#=> メソッド内でインデントしても問題ありません。
インデントを含めない状態で出力したい場合は、<<~
を使うことで、ヒアドキュメント内の共通のインデントを自動的に削除できます。
def example
message = <<~END
これは自動的にインデントが削除されます。
コードの見た目を損なわずに複数行の文字列を記述できます。
END
puts message
end
example
#=> これは自動的にインデントが削除されます。
#=> コードの見た目を損なわずに複数行の文字列を記述できます。
まとめ
Railsアプリケーションで、ERBでロジックを組んでビューをレンダリングするより、コントローラとかでヒアドキュメントを使ってHTMLを生成した方が速いのかなとか思ったりしました。が、ERBにはキャッシュ機構なるものが存在しているようなので、素直にERBを使用した方が良いかもしれませんね。
また、先日のKaigi on RailsでViewComponent
を使用する方法についても学ぶことができたので、どこかで試したいです。
以上