PowerShell 6.1のConvertFrom-Markdownを使ってMarkdownファイルからHTMLファイルを生成してみる

PowerShell 6.1を導入したので、追加されたConvertFrom-MarkdownコマンドレットでMarkdownファイルからHTMLファイルを生成してみます

Markdown系のコマンドレットを確認する

とりあえず Get-HelpConvertFrom-Markdown のパラメータとか戻り値とか確認してみます

pwsh >Get-Help -Name 'ConvertFrom-Markdown'

NAME
    ConvertFrom-Markdown

SYNTAX
    ConvertFrom-Markdown [-Path] <string[]> [-AsVT100EncodedString] [<CommonParameters>]

    ConvertFrom-Markdown -LiteralPath <string[]> [-AsVT100EncodedString] [<CommonParameters>]

    ConvertFrom-Markdown -InputObject <psobject> [-AsVT100EncodedString] [<CommonParameters>]

(以下略)

ざっくり -PathMarkdown ファイル渡せばいいらしいです

ちなみに Get-Help ConvertFrom-Markdown -Online を実行したら https://docs.microsoft.com/ja-jp/powershell/module/Microsoft.PowerShell.Utility/ConvertFrom-Markdown に行けますが、現時点では 404 Not Foundだそうです

実際に動かしてみる

sample.md という名前で以下の様なファイルを用意して

# サンプルマークダウンファイル

これはサンプル用のマークダウンファイルです

[example.com](http://example.com)

ConvertFrom-Markdown-Path に渡してやります

pwsh >[Microsoft.PowerShell.MarkdownRender.MarkdownInfo] $md = ConvertFrom-Markdown -Path 'sample.md';
pwsh >Format-List -InputObject $md;

Html               : <h1 id="section">サンプルマークダウンファイル</h1>
                     <p>これはサンプル用のマークダウンファイルです</p>
                     <p><a href="http://example.com">example.com</a></p>

VT100EncodedString :
Tokens             : {Markdig.Syntax.HeadingBlock, Markdig.Syntax.ParagraphBlock, Markdig.Syntax.ParagraphBlock, Markdig.Extensions.AutoIdentifiers.HeadingLinkReferenceDefinition}

pwsh >$md.Html;
<h1 id="section">サンプルマークダウンファイル</h1>
<p>これはサンプル用のマークダウンファイルです</p>
<p><a href="http://example.com">example.com</a></p>

戻り値の PowerShell.MarkdownRender.MarkdownInfo オブジェクトの Html プロパティにbody要素の内容となる文字列が格納されているようです

ちなみに、void要素があった場合、XMLとしてはパースエラーになりますので ('<root>',$md.Html,'</root>' -Join '') -as [Xml.XmlDocument] とかやっても null が帰ってきます

ここで「じゃあvoid要素がったら終了タグを追加して」とかやりだすと話が大きくなるので今回は雑に行きます

pwsh >'<!DOCTYPE html><html><head><meta charset="utf-8"><title>sample</title></head><body>' + $md.html + '</body></html>' > sample.html;

我ながら本当に雑だな、おい

PowerShell 6.x からはリダイレクト演算子 (>) で出力したテキストファイルは UTF-8 (BOMなし) で出力されますのでHTMLファイルならこれでいでいけます (ちなみに PowerShell 5.1 までは UTF-16 でした)


上記のままだと html 要素に lang 属性がないとか、title 要素が固定とか、出力ファイル名が固定とか色々ありますので、欲しい機能を色々足せば完成です

そんな感じで