本文へ移動
Develop Tools
← 使い方ガイドへ戻る

HTMLをMarkdownに変換する方法|Web文章をMarkdown形式へ変換

既存HTMLをREADMEや記事原稿へ再利用するときは、Tagを文字置換せずDOMとして解析し、要素ごとのRuleでMarkdownへ直します。

MarkdownとHTMLを変換しSourceと安全なPreviewを分けて確認する流れ
MarkdownとHTMLを変換しSourceと安全なPreviewを分けて確認する流れ

MarkdownとHTMLをブラウザ内で変換する

入力をサーバーへ送信せず、変換結果のSourceと安全化されたPreviewを分けて確認できます。

HTMLをMarkdownへ変換する

結論:HTMLをDOMとして解析し、意味のある要素をMarkdown記法へ対応付ける

h1~h6、p、strong/em、ul/ol、blockquote、pre/code、a、img、table等はMarkdownへ対応できます。

class、style、data属性、Layout用div、複雑なTable等はMarkdownに同等表現がなく、簡略化や損失が発生します。

変換が成功したことと、利用先で意味・見た目・安全性が保たれることは別に確認してください。

Tag置換ではなくDOMと変換Ruleで処理する

文字列置換では入れ子、属性、Entity、空白を壊しやすいため、DOMParserでTreeを作り、Node種別ごとに変換します。

現行ツールはURLからHTMLを取得しません。HTML SourceまたはFileを利用し、認証Cookieや個人情報を含む内容は共有前に除去します。

確認対象確認内容判断
Headingh1~h6#の数
Listul/ol/li入れ子Indent
Codepre/codeFence長と言語Class
Link/Imagehref/srcBase URL

Markdown・HTML相互変換ツールで確認する手順

  1. HTML→Markdownを選び、HTMLを貼るかFileを開きます。
  2. 未対応要素を保持・Text化・削除から選びます。
  3. 相対URLを解決する必要があればBase URLを入力します。
  4. 変換し、Markdown SourceとPreviewを確認します。

Base URLへCredentialやTokenを含めないでください。ToolはURL先をFetchしません。

HTML要素とMarkdownの対応

HTMLMarkdown失われ得る情報
<h2>##id・class
<strong>** **style
<a href>[text](url)data属性
<table>Pipe Tablerowspan・colspan

変換・表示・安全化を別工程として確認する

工程主な役割ここでは保証しないこと
Parse・変換Markdown構文をHTML要素へ、またはHTML DOMをMarkdown記法へ対応付けるCSSの見た目、利用先独自拡張
Sanitizescript、iframe、form、event属性、危険URL等を除外する元HTMLの完全保持、すべての業務要件への適合
Preview安全化済み結果をアプリ本体と分離したiframeで確認する本番CMSと同一CSS、外部Resourceの永続性
保存・貼り付け確認済みSourceをFileまたはClipboardへ出す変換先での再Sanitizeや自動整形

MarkdownのRaw HTMLを許可する設定はSanitizeを無効にする設定ではありません。Raw HTMLを構文として受け入れるかどうかと、生成HTMLから危険要素を除くかどうかは独立した判断です。信頼できない入力を無加工でinnerHTMLへ入れず、変換後もSanitizeし、実行可能なPreviewから隔離します。

変換後に確認する回帰テスト

  • 見出し、段落、太字、斜体、順序付き・順序なし・入れ子List、引用、水平線を確認する
  • Inline Code、Fenced Code、Fence内のBacktick、言語指定、HTMLのpre/codeを確認する
  • Link、Reference Link、Image、相対URL、URLを含む括弧、Title属性を確認する
  • GFMのTable、Task List、取り消し線、Autolinkを変換先と同じ方言で確認する
  • Raw HTML、HTML Entity、&・<・>、2 Space改行、空行、Whitespaceを確認する
  • script、onclick、javascript:、iframe、form等がPreviewや保存結果で実行可能にならないか確認する
  • Markdown→HTML→MarkdownのRound Trip差分を取り、意味・属性・空白・表現形式の損失を確認する

現行のMarkdown・HTML相互変換ツールで確認できる範囲

DevelopToolsの現行ツールは、Markdown→HTMLとHTML→Markdownをブラウザ内だけで処理します。Markdown→HTMLはMarkedをGFMモードで使用し、見出し、段落、強調、リスト、引用、表、タスクリスト、取り消し線、コード、リンク、画像を変換します。HTML→MarkdownはDOMParserで解析したDOMを独自のタグ別ルールで直列化し、見出し、段落、強調、リスト、引用、表、pre/code、リンク、画像などを変換します。

機能現行ツールの動作
入力Text貼り付け、Markdown・HTML File読込、Drag & Drop
Markdown方言MarkedのGFMモード。改行をbrへ変換するOptionを切替可能
HTML出力HTML断片または完全Document、整形または1行圧縮
HTML→Markdown独自Converter。未対応要素を保持・Text化・削除から選択
安全化DOMPurifyで変換結果をSanitizeし、CSP付きsandbox iframeでPreview
外部通信変換自体は送信なし。外部画像Previewを明示的に有効化した場合だけ画像HostへRequest
未対応URLからのWeb Page取得、CSS再現、JavaScript実行後DOM取得、完全な往復復元、Front Matter専用解析

変換結果のSourceとPreviewは別物です。保存・貼り付け用Sourceを確認し、次に安全化されたPreviewで構造を確認します。CSSによる最終Appearance、CMS固有Sanitizer、相対URLの基準、変換先が採用するMarkdown方言は利用先でも再確認してください。

仕様とライブラリの公式資料で確認する

Markdownには実装差があるため、構文の期待値はCommonMark、GFM拡張はGitHub Flavored Markdown、利用中ParserのOptionはその公式Documentを確認します。Markedは出力HTMLをSanitizeしないと公式に明記しているため、変換後のSanitizeを別工程として扱います。TurndownはHTML→Markdown実装の代表例としてRule・Keep・Remove・GFM Pluginの考え方を確認する資料であり、現行ツール自体はTurndownを使用していません。

具体例:CMS本文HTMLをMarkdown原稿へ戻す

本文のh2、p、ul、pre/code、aを含むHTML断片を入力します。

再編集しやすいMarkdownへ変換できますが、CMS固有classは別途記録が必要です。

  1. HTML抽出
  2. 未対応要素設定
  3. 変換
  4. Source差分確認

現行ツールは独自Converterであり、Turndownを使用していません。

よくある質問

Markdown→HTML→Markdownで元の文章へ完全に戻せますか?
完全には戻せません。同じ意味を複数のMarkdown記法で表せるうえ、HTMLのclass・style・data属性・複雑な表・空白にはMarkdown側の対応表現がないためです。往復後の差分を必ず確認してください。
Raw HTMLを許可すればscriptも保存できますか?
現行ツールでは保存できません。Raw HTMLの解釈設定とは別にDOMPurifyでscript、iframe、form、event属性等を除去し、PreviewにもCSPを設定します。
入力内容はサーバーへ送信されますか?
変換、File読込、Copy、Downloadはブラウザ内で完結します。ただし外部画像Previewを有効にすると、ブラウザが画像URLのHostへRequestします。