広告が嫌いですか? 行く 広告なし 今日

Markdown と HTML ドキュメント、README、API でそれぞれを使用するタイミング

掲載日
Markdown と HTML:ドキュメント、README、API 用にどちらを使うべきか 1

Markdown が実際に何であるか

Markdown は軽量のマーキング言語です — プレーンテキストをシンプルな規則(太字には星印、見出しにはハッシュ、コードにはバックティック)で書きます。そのマーキングは HTML に変換されます。一つの公式な Markdown 標準は存在しません。使用するパーサーによって得られる結果は異なります。

最も一般的な変種:

  • CommonMark — 严格的かつ明確に規定された標準。最も「ベーシックな Markdown」と言えるものです。
  • GitHub フラワード マーキング(GFM) — CommonMark にテーブル、タスクリスト、ストライクアウト、自動リンク付きURLを追加。GitHub および GitLab が表示するものです。
  • kramdown、Pandoc、MultiMarkdown — 補足機能として、フィートノート、定義リスト、カスタム属性など、CommonMarkには存在しない機能を提供しています。

README を作成し、GitHub がそれをレンダリングするのを期待している場合は、GFM がその基準です。静的サイトジェネレーターを使用している場合は、どのパーサーを使用しているか確認してください — たとえば、ネストされたリストやraw HTMLの処理において、そのパーサー間で差異が生じます。

Markdown が勝つ場面

README および開発者向けドキュメント Markdown は開発者ドキュメントのデフォルトです。GitHub、GitLab、Bitbucket、npm、PyPI などはすべて、Markdown をネイティブでレンダリングしています。README を HTML で書くことは技術的には可能ですが、編集者がそれを編集する必要があるため、実用的には不適切です。

Wiki および変更ログ 人間が編集できる、バージョン管理されたテキストファイルで、差分が読みやすいことが求められます。HTML は冗長で、意味のない差分を生成します。Markdown はシンプルに残ります。

ドキュメントサイト MkDocs、Docusaurus、Hugo、Jekyll などのツールは、Markdown ファイルを受け取り、ビルド時に HTML に変換します。作成者は Markdown を書きます。サイト側がプレゼンテーションを担当します。

非開発者によるコンテンツ作成のとき Markdown は HTML より学習しやすく、書くことのハードルが低いです。コンテンツパイプラインに非開発者(フロントエンドエンジニアではない)が含まれる場合、Markdown は大きな摩擦を減らします。

HTML が勝つ場面

メール メールクライアント — 特にOutlookは — CSSのサポートが有名に不一致です。HTML ではレイアウト、フォントサイズ、スペース、インラインスタイルに対して明確な制御が可能です。Markdown から HTML に変換されたメールは、特定のクライアントでタグを削除されたり、レンダリングがサポートされていない場合に破綻します。

細かいレイアウトとスタイル 必要な特定のカラム幅、フロートレイアウト、またはカスタムCSSクラスがある場合、Markdown は邪魔になります。あなたはraw HTMLを混ぜたり、パーサーの出力と戦わなければなりません。

複雑なテーブル GFMのテーブルはシンプルなグリッドに適しています。マージセル、複数行のセル、または列のスパンが必要な場合、Markdownの構文は機能しなくなります。HTML が適しています。 <table> 適しています。

CMSで管理されるコンテンツ ほとんどのCMSプラットフォームは、投稿コンテンツをHTMLとして保存したり、ブロックベースのエディタを使用して構造化されたHTMLを生成します。Markdownをそのパイプラインに強制することは、変換層を追加するだけであり、CMSがそのように設計されていない限り、明確なメリットはありません。

比較の概要

使用事例マークダウンhtml勝者
GitHub READMEネイティブサポート冗長で使いにくいマークダウン
メールテンプレート一貫性がないフルコントロールhtml
ドキュメントサイトネイティブでSSGを使用ビルドステップが必要マークダウン
複雑なテーブル限定フルコントロールhtml
APIレスポンスボディ一般的なパターン動作するが冗長マークダウン
CMSコンテンツ変換が必要ネイティブhtml
変更ログきれいな差分過剰マークダウン

GFM:CommonMarkより追加される機能

GitHub フラワード マーキングは、開発者が頻繁に使う機能をCommonMarkに追加します。以下は、CommonMarkに存在しない2つの例です:GFMテーブルとタスクリスト。これらは、純粋なCommonMarkパーサーではレンダリングされません。もしドキュメントのパイプラインが拡張機能なしのCommonMarkを使用している場合、これらのブロックはそのままテキストとして表示されます。常に、使用するパーサーに合わせて構文を設定してください。

## GFM Table
| Name     | Role     | Status  |
|----------|----------|---------|
| Alice    | Author   | Active  |
| Bob      | Reviewer | Pending |

## GFM Task List
- [x] Write draft
- [x] Add code examples
- [ ] CMO review
- [ ] Schedule publish

どちらも、CommonMark拡張機能なしのパーサーではレンダリングされません。もしドキュメントのツールチェーンが拡張機能なしのCommonMarkを使用している場合、これらのブロックはそのままテキストとして表示されます。常に、使用するパーサーに合わせて構文を設定してください。

Markdown と HTML の混在

ほとんどのMarkdownパーサーは、インラインでraw HTMLを許容します。CommonMarkはデフォルトで許容し、GFMも同様に許容しています(一部のセキュリティ処理を含む)。これにより、パーサーが表現できない要素を表現するために、 <div> または <table> をMarkdownファイルに挿入できます。

通常に破れるのは、MarkdownをHTMLブロックの中にネストすることです。もし <div> を開き、その中にMarkdownを書くと、ほとんどのパーサーはそのブロック全体をraw HTMLとして扱います。HTMLのラップ内でMarkdownコンテンツが必要な場合は、パーサーがそれをサポートしている必要があります(kramdownにはこのために markdown="1" 属性がありますが、他の多くはサポートしていません)。

ルール:構造的なオーバーライドのためにHTMLブロックをまれに使用してください。Markdownファイル内で完全なセクションをHTMLで書くのは避け、その時点でHTMLを直接書くべきです。

APIレスポンスボディにおけるMarkdown

一般的で実用的なパターン:APIはレスポンスフィールドにMarkdown文字列を返します。Notionの富テキストAPI、Slackのブロックキット、さまざまなヘルプデスクやCMSのAPIは、クライアントがレンダリングするMarkdownコンテンツを送信します。

なぜなら、Markdownはコンパクトで人間が読みやすく、エディタに優しいからです。ストレージ **bold text** は、ストレージ <strong>bold text</strong>よりも安価で明確です。また、データ形式が特定のHTML構造に依存しないことにより、データのフォーマットがより独立しています。人間が読みやすいコンテンツを返すAPIを構築している場合、Markdownを文字列フィールドに含めるのは妥当なデフォルトです — ただし、使用している変種を明確にドキュメント化してください。

Markdownを安全にレンダリング

フロントエンドでユーザー入力されたMarkdownを未処理でレンダリングすることは、XSSのベクトルになります。Markdownパーサーがraw HTMLをサポートしている場合、ユーザーのコンテンツに <script>alert('xss')</script> が含まれている場合、それをそのまま通過させます。

解決策:HTML出力をスキャン 、Markdown入力をスキャンするのではなく、HTML出力をスキャンしてください。DOMPurify(ブラウザ)、sanitize-html(Node.js)、またはBleach(Python)などのライブラリは、レンダリングされたHTMLから危険なタグや属性を削除しつつ、安全なフォーマットを維持します。信頼できないMarkdownをDOMに直接レンダリングしないでください。スキャン処理を実施しない限り、パーサーはあなたのセキュリティ層ではありません。、Markdownの入力ではない。DOMPurify(ブラウザ用)、sanitize-html(Node.js)、またはBleach(Python)などのライブラリは、レンダリングされるHTMLから危険なタグや属性を削除し、安全なフォーマットを保持します。信頼できないMarkdownをDOMに直接レンダリングしないでください。パーサーはあなたのセキュリティ層ではありません。

ブラウザで試してみる

Markdownのレンダリングを試したい場合、GFM構文をテストしたり、テーブルやタスクリストのプレビューを確認したり、raw HTMLがMarkdown内でどのように動作するかを確認したりできます。この IO Tools Markdown Editor は、インストール不要でブラウザ上で動作する高速なMarkdownエディタです。ドキュメント作成、READMEファイルのプレビュー、またはフォーマットを確定する前にパーサーの動作をテストするために使用できます。

広告なしで楽しみたいですか? 今すぐ広告なしで

拡張機能をインストールする

お気に入りのブラウザにIOツールを追加して、すぐにアクセスし、検索を高速化します。

に追加 Chrome拡張機能 に追加 エッジ拡張 に追加 Firefox 拡張機能 に追加 Opera 拡張機能

スコアボードが到着しました!

スコアボード ゲームを追跡する楽しい方法です。すべてのデータはブラウザに保存されます。さらに多くの機能がまもなく登場します!

ニュースコーナー 技術ハイライト付き

参加する

価値ある無料ツールの提供を継続するためにご協力ください

コーヒーを買って