LaravelでMarkdownをHTMLに変換する

こんにちは小野です。
Laravel9以降では、文字列ユーティリティのStr
クラスにmarkdown()
メソッドが追加されています。
最近になって初めて使ってみたのでご紹介します。
Str::markdown()
Markdown形式の文字列をHTMLに変換してくれるメソッドです。
Laravelに標準で含まれているleague/commonmark
ライブラリをバックエンドに使っています。
基本的な使い方
use Illuminate\Support\Str;
$markdown = <<<MD
# 見出し
- アイテム1
- アイテム2
**太字**, *斜体*
MD;
$html = Str::markdown($markdown);
echo $html;
出力結果は以下のようなHTMLになります。
<h1>見出し</h1>
<ul>
<li>アイテム1</li>
<li>アイテム2</li>
</ul>
<p><strong>太字</strong>, <em>斜体</em>,</p>
Tailwind CSS のprose
クラスと合わせると、簡単に見た目を整えられます。
<div class="prose">
{!! $html !!}
</div>
オプション
league/commonmark
の設定オプションに対応します。
例:
[
'html_input' => 'strip', // 'allow', 'escape', 'strip'
'allow_unsafe_links' => false,
'max_nesting_level' => 10,
'renderer' => [
'block_separator' => "\n",
'inner_separator' => "\n",
'soft_break' => "\n",
],
]
設定はサービスプロバイダやカスタムラッパーを通じて渡す形になります。
まとめ
実装自体は簡単で、他のStr
クラスと併用できたり便利そうです。
ドキュメントにもありますが、デフォルトでは生のHTMLをそのまま出力するため、注意が必要です。