はじめに
ある時にPowerShellのスクリプトで処理結果を整形して出力したいと思ったのですが、改行コード(CRLF)を入れてテキストを整形して出力するのが面倒だなと感じました。
その時にふと「そういえばRubyだとヒアドキュメントという書き方があった」ということを思い出し、PowerShellでも同様の方法があるのではないかと調べてみたところ、まさにヒアドキュメントそのものがありました。
そこで今回は、ヒアドキュメントについて調べた結果を記事としてまとめてみました。
学習環境
今回はWindows PowerShell ISEを使いました。
ヒアドキュメントの使い方
ヒアドキュメントの基本
- Microsoftのドキュメントによると、PowerShellのヒアドキュメントは正式には**「ヒア文字列リテラル」**と呼ぶそうです。
- ヒアドキュメントは「@"~"@」もしくは「@'~'@」の間に記述します。
- 以下の例では改行コード「`r`n」を埋め込む書き方と比較していますが、ヒアドキュメントを用いた方が可読性が良くなっていると思います。
ヒアドキュメントの基本的な使い方
# 改行コードを埋め込む書き方
$text1 = "複数行`r`nの`r`nテキスト"
# ヒアドキュメントを用いた書き方
$text2 = @"
複数行
の
テキスト
"@
Write-Host ----------
Write-Host $text1
Write-Host ----------
Write-Host $text2
Write-Host ----------
出力結果
----------
複数行
の
テキスト
----------
複数行
の
テキスト
----------
ヒアドキュメント内の式展開
- 式展開を使う場合、ヒアドキュメントは「@"~"@」で囲みます。
- 「@'~'@」と記述した場合は式展開されないので注意が必要です。
- 正式には「@"~"@」は「展開可能な文字列リテラル」、「@'~'@」は「逐語的ヒア文字列リテラル」と呼ぶそうです。
- 処理結果のレポートのようにほぼ固定的な文言を出力する場合は、式展開付きのヒアドキュメントを用いると便利だと感じました。
ヒアドキュメントの式展開
$today = Get-Date -Format "yyyy/MM/dd"
$pcName = $Env:Computername
$text = @"
$today
このPCは${pcName}です。
"@
Write-Host $text
出力結果
2023/09/07
このPCはNKOJIMA-DESKTOPです。
余談
- Microsoftの公式サイトで「ヒアドキュメント」と検索しても全く記事がヒットしませんでしたが、Microsoftでは正式名が「ヒア文字列リテラル」なので、記事もこの呼び名で統一されているようです。
- 別名として括弧書きで「ヒアドキュメント」と書いてもらえると、より多くの人が所望の記事を探しやすいと思ったのですが、その辺は色々あって難しいのかもしれませんね...