Markdig

プログラミング
公開 2025年1月10日 最終更新 2025年10月7日
Article Image

はじめに

Markdig は、.NET 向けのオープンソース Markdown ライブラリです。
Markdown 形式のテキストを HTML に変換でき、NuGet パッケージとして提供されています。
豊富な拡張機能と高速な変換、柔軟なカスタマイズ性が魅力です。

公式 xoofx / markdig - GitHub

最小コード

1Markdig をインストール

dotnet add package Markdig

または

Install-Package Markdig

2コード(Program.cs)

Markdown.ToHtml() で変換します。

// Program.cs
using Markdig;

// Markdown テキスト
var markdown = "# こんにちは、コロちんだよ!\nこれは *Markdig* のテストです。";

// Markdown を HTML に変換
var html = Markdown.ToHtml(markdown);

// 結果を表示
Console.WriteLine(html);

出力結果

<h1>こんにちは、コロちんだよ!</h1>
<p>これは <em>Markdig</em> のテストです。</p>

Markdig の出力をカスタマイズ

Markdig にはパイプライン(MarkdownPipeline)と呼ばれる仕組みがあり、Markdown の解析と変換処理をカスタマイズできます。 AutoIdentifiers という拡張機能をパイプラインに追加してみます。
MarkdownPipeline のインスタンスを生成し、Markdown.ToHtml() の第2引数に指定します。

using Markdig;
using Markdig.Extensions.AutoIdentifiers;

// Markdown テキスト
var markdown = "# こんにちは、コロちんだよ!\nこれは *Markdig* のテストです。";

// パイプラインを構築
var pipeline = new MarkdownPipelineBuilder()
    .UseAutoIdentifiers(AutoIdentifierOptions.GitHub) // GitHub スタイルの自動識別子を使用
    .Build();

// Markdown を HTML に変換
// 第2引数に MarkdownPipeline のインスタンスを指定
var html = Markdown.ToHtml(markdown, pipeline);

// 結果を表示
Console.WriteLine(html);

出力結果

<h1 id="こんにちはコロちんだよ">こんにちは、コロちんだよ!</h1>
<p>これは <em>Markdig</em> のテストです。</p>

見出しタグ(H タグ)に id が追加されています。
AutoIdentifiers は見出しタグに自動的に id を付与する拡張機能です。

変換サンプル

Markdown - Wikipedia の各記法を Markdig で変換してみます。

引用

> "このテキストは、HTMLのblockquote要素に囲まれます。
blockquote要素はreflowableです。テキストを好きなように
改行できます。改行したとしても、変換後はひとつの
blockquote要素として扱われます。"

"このテキストは、HTMLのblockquote要素に囲まれます。 blockquote要素はreflowableです。テキストを好きなように 改行できます。改行したとしても、変換後はひとつの blockquote要素として扱われます。"

リスト

* 順序無しリストのアイテム
    * サブアイテムはタブもしくは4つのスペースでインデントする
* 順序無しリストの別のアイテム
+ 順序無しリストのアイテム
    + サブアイテムはタブもしくは4つのスペースでインデントする
+ 順序無しリストの別のアイテム
- 順序無しリストのアイテム
    - サブアイテムはタブもしくは4つのスペースでインデントする
- 順序無しリストの別のアイテム
1. 順序付きリストのアイテム
    1. サブアイテムはタブもしくは4つのスペースでインデントする
2. 順序付きリストの別のアイテム
  • 順序無しリストのアイテム
    • サブアイテムはタブもしくは4つのスペースでインデントする
  • 順序無しリストの別のアイテム
  • 順序無しリストのアイテム
    • サブアイテムはタブもしくは4つのスペースでインデントする
  • 順序無しリストの別のアイテム
  • 順序無しリストのアイテム
    • サブアイテムはタブもしくは4つのスペースでインデントする
  • 順序無しリストの別のアイテム
  1. 順序付きリストのアイテム
    1. サブアイテムはタブもしくは4つのスペースでインデントする
  2. 順序付きリストの別のアイテム

コード

これは段落です。文中に`コードテキスト`を含みます。

これは段落です。文中にコードテキストを含みます。

```javascript
(() => {
  'use strict';
  console.log('Hello world');
})();
```
(() => {
  'use strict';
  console.log('Hello world');
})();

水平線

* * *
***
*****
- - -
---------------------------------------





リンク

[リンクのテキスト](リンクのアドレス "リンクのタイトル")

[リンクのテキスト][linkref]

[linkref]: https://ja.wikipedia.org/wiki/Markdown

リンクのテキスト

リンクのテキスト

強調

*強調* もしくは _強調_(斜体として表現されることが多い)
**強い強調** もしくは __強い強調__(太字として表現されることが多い)

強調 もしくは 強調(斜体として表現されることが多い) 強い強調 もしくは 強い強調(太字として表現されることが多い)

画像

![Altのテキスト](https://korochin0911.github.io/images202501/xzxkrv.webp)
![Altのテキスト](https://korochin0911.github.io/images202501/xzxkrv.webp "タイトル")

AltのテキストAltのテキスト タイトルAltのテキスト

インライン HTML

<font color="red">赤</font>

参考資料

xoofx / markdig - GitHub
CommonMark Spec