マークダウン記法は、見出しやリストのような基本部分は どのサービスでもほぼ同じです。違いが出るのは改行の扱い、独自の拡張記法、そして日本語特有の問題である「句読点やかぎ括弧の隣で太字が効かない」現象です。この記事では記法を一覧にしたうえで、それぞれ実際に HTML に変換した結果を載せています。
変換結果は 2026-10-02 に次の 3 つで確かめました。CommonMark と GFM(GitHub Flavored Markdown)の結果は、本サイトの Markdown プレビューと同じ micromark 4 と GFM 拡張で変換したもの、Zenn の結果は Zenn が公開している変換ライブラリ zenn-markdown-html 0.5.4(markdown-it 14 ベース)で変換したもの、GitHub の結果は GitHub の Markdown API(POST /markdown)の出力です。基準にした仕様は CommonMark 0.31.2 と GFM 0.29 です。
マークダウン記法 一覧(早見表)
| 書きたいもの | 記法 | 変換結果 |
|---|---|---|
| 見出し | ## 見出し | <h2>(# の後に半角スペースが必要) |
| 段落 | 空行で区切る | <p> |
| 強制改行 | 行末に半角スペース 2 つ、または \ | <br /> |
| 太字 | **太字** | <strong> |
| 斜体 | *斜体* | <em> |
| 打ち消し線 | ~~取り消し~~ | <del>(GFM) |
| 箇条書き | - 項目 | <ul><li> |
| 番号付き | 1. 項目 | <ol><li> |
| チェックボックス | - [ ] 未完了 / - [x] 完了 | 無効化された <input type="checkbox">(GFM) |
| インラインコード | `code` | <code> |
| コードブロック | ```js … ``` | <pre><code class="language-js"> |
| リンク | [文字](https://example.com) | <a href> |
| 画像 |  | <img alt> |
| 表 | | 列 | と |---| | <table>(GFM) |
| 引用 | > 引用文 | <blockquote> |
| 区切り線 | --- | <hr /> |
| 脚注 | 本文[^1] と [^1]: 注 | 末尾の脚注(GitHub・Qiita・Zenn) |
見出し・段落・改行
見出しは # の数がレベルで、# の後に半角スペースが必要です。#見出し はただの段落になります。全角スペースを入れた # 見出し も見出しにならない点に注意してください。CommonMark で見出しの区切りとして認められるのは半角スペースとタブだけです。
改行の扱いはサービスごとにいちばん差が出るところです。CommonMark では、段落の中の 1 回の改行は「ソフト改行」で、ブラウザでは空白として表示されます。日本語の文章では空白も入らずに 2 行がつながって見えます。
| 入力 | CommonMark・GitHub の .md ファイル | GitHub の Issue・コメント | Zenn |
|---|---|---|---|
1行目 改行 2行目 | 1 行につながる | 改行される | 改行される |
1行目\ 改行 2行目(行末に \) | 改行される | 改行される | 改行される |
GitHub のドキュメントは、Issue・プルリクエスト・ディスカッションでは改行がそのまま反映され、.md ファイルでは 1 行につながると明記しています(GitHub Docs)。Markdown API でも、markdown モードでは <br> が入らず、コメント用の gfm モードでは入りました。zenn-markdown-html も 1 回の改行を <br /> にします。Zenn で書いた記事を GitHub の README に移すと段落が 1 行にまとまってしまうのはこのためです。どこでも同じ結果にしたいなら、行末に \ を置くか、段落を空行で分けます。行末の半角スペース 2 つでも改行できますが、見えないうえに保存時にエディタが消してしまうことがあります。
強調・太字・打ち消し線
| 記法 | 結果 | 補足 |
|---|---|---|
太字**強調**します | 「強調」が太字 | 文中でも ** は効く |
テキスト__強調__です | 太字にならない | _ は単語の途中では強調にならない |
*注意*: | 「注意」が斜体 | 日本語フォントでは斜体が目立たないことが多い |
~~取り消し~~線 | 「取り消し」に打ち消し線 | GFM の拡張。CommonMark ではそのまま表示 |
* と _ はどちらも強調に使えますが、文字の間に挟まったときの扱いが違います。CommonMark の規則では、_ は単語の途中で強調を始めたり終えたりできません。英語の snake_case を守るための規則ですが、日本語は単語を空白で区切らないので、テキスト__強調__です のように文中で __ を使うと太字になりません。日本語の文章では ** を使うのが安全です。
打ち消し線は CommonMark にはなく GFM の拡張です。GFM の仕様ではチルダ 1 つでも 2 つでもよく、GitHub と本サイトのプレビューは ~1つ~ も打ち消し線にしますが、Zenn(zenn-markdown-html)は ~~ だけを受け付けました。どこでも通じるのは ~~ です。
日本語で太字が効かないとき
日本語の Markdown でいちばんよく起きるのが、太字の記号がそのまま表示されてしまう問題です。
| 入力 | CommonMark・GitHub・Zenn・本サイトのプレビュー |
|---|---|
**重要**です | 太字になる |
**10%オフ**です | 太字になる |
**注意:**ここは必須です | ** がそのまま表示される |
**「重要」**です | ** がそのまま表示される |
**10%**の割引 | ** がそのまま表示される |
原因は CommonMark の「区切り文字の並び(delimiter run)」の規則です(CommonMark 0.31.2 §6.2)。閉じる側の ** は「右側に接する(right-flanking)」必要があり、直前が句読点や記号の場合は、直後が空白か句読点でなければなりません。**注意:**ここ では閉じる ** の直前が全角コロン「:」(句読点)、直後が「こ」(文字)なので、閉じる記号として認められません。**「重要」**です の「」」、**10%**の割引 の「%」も同じです。英語では単語の後に空白が来るので問題になりにくいのですが、日本語は助詞が直後に続くため引っかかります。
GitHub の Markdown API と zenn-markdown-html でも結果は同じで、この 3 つはどれも太字になりませんでした。Qiita の公式チートシートも、強調と打ち消し線について「前後に 半角スペース か 改行文字 を入れてください」と注意しています(Qiita: Markdown記法 チートシート)。
書き手の側でできる対処は 3 つです。
- 句読点を
**の外に出す:**注意**:ここは必須です、「**重要**」です。見た目もほとんど変わりません。 - 閉じる
**の後に半角スペースを入れる:**注意:** ここは必須です。確実に効きますが、文中に空白が入ります。 - 変換する側に CJK 対応の拡張を入れる:micromark 用の micromark-extension-cjk-friendly を使うと、上の 3 つの入力がすべて太字になりました。自分でサイトを作るときの選択肢です。
リスト・番号付きリスト・チェックボックス
| 入力 | 結果 |
|---|---|
3. 三番目 / 4. 四番目 | 3 から始まる番号付きリスト(最初の数字だけが意味を持つ) |
- 親 / - 子(2 文字下げ) / - 孫 | 3 段の入れ子 |
- 親 / - 子(1 文字下げ) | 入れ子にならず同じ階層 |
* 一つ目 / - 二つ目 | 記号を変えると別のリストになる |
入れ子にするには、子の行を親の項目の本文が始まる位置まで下げます。- の後の本文は 3 文字目から始まるので 2 文字以上、10. なら 4 文字以上が必要です。番号付きリストでは最初の数字が開始番号になり、2 行目以降の数字は無視されます。すべて 1. と書いておくと、項目を足したときに番号を書き直さずに済みます。
コード・リンク・画像・表
| 項目 | 価格 |
|:--|--:|
| 税込 | 1,980円 |
表は GFM の拡張で、2 行目の区切り行の : で揃え方を決めます(:-- 左、:-: 中央、--: 右)。セルの中に | を書くときは \| とエスケープします。セルに入るのはインライン要素だけで、箇条書きやコードブロックは入りません。表を手で揃えるのが面倒なら、Markdown 表作成ツールで CSV や JSON から生成できます。
リンクの URL に空白を含むファイル名を書くときは [資料](<資料 2026.pdf>) のように < > で囲みます。変換後は日本語と空白がパーセントエンコードされます。URL をそのまま書いた https://zenn.dev/ は GFM の自動リンクで、www.example.jp のように www. で始まる文字列も GFM ではリンクになりますが、zenn-markdown-html ではリンクになりませんでした。
コードブロックの言語名はフェンスの直後に書きます。Qiita と Zenn はさらにファイル名を付けられ、Qiita は ```ruby:qiita.rb、Zenn は ```js:ファイル名 の形です(各公式ガイド)。GitHub と CommonMark では : 以降も情報文字列の一部として扱われるだけです。
引用・脚注・区切り線・エスケープ
脚注は 脚注の例[^1]です。 と [^1]: 脚注の内容 の組で書きます。GitHub・Qiita・Zenn で使え、本サイトのプレビューも変換します。Zenn はさらに インライン^[脚注の内容]で のようなインライン脚注に対応していますが、ほかでは ^[…] がそのまま表示されます。
--- だけの行は区切り線ですが、文章の直後の行に --- を書くと、上の行が <h2> 見出しになります(setext 見出し)。区切り線のつもりなら前に空行を入れます。記号そのものを表示したいときは、前に \ を付けます。\*強調しない\* \# 見出しにしない はそのまま表示されます。エスケープできるのは ASCII の記号だけで、全角の記号に付けた \ は残ります。\*全角\* はそのまま \*全角\* と表示されます。
Qiita・Zenn・note・GitHub の記法の違い
基本の記法は共通ですが、各サービスは独自の記法を足しています。公式ガイドに書かれている主なものを並べます。
| 機能 | Qiita | Zenn | note | GitHub |
|---|---|---|---|---|
| 補足・警告ボックス | :::note info / warn / alert | :::message / :::message alert | ヘルプに記載なし | > [!NOTE] など 5 種類 |
| 折りたたみ | <details>(タグの下に空行が必要) | :::details タイトル | ヘルプに記載なし | <details> |
| コードのファイル名 | ```ruby:qiita.rb | ```js:ファイル名 | ヘルプに記載なし | なし |
| 数式 | あり | あり(KaTeX) | 数式記法あり | あり(MathJax) |
| ダイアグラム | Mermaid・PlantUML | Mermaid | ヘルプに記載なし | Mermaid など |
| 脚注 | あり | あり(インライン脚注も) | ヘルプに記載なし | あり |
| 見出しのレベル | #〜###### | #〜###### | 大見出し ## と小見出し ### | #〜###### |
出典:Qiita Markdown記法 チートシート、Zenn のMarkdown記法一覧、note ヘルプ:Markdownショートカット、GitHub Docs:基本的な書き方とフォーマットの構文。
note は Markdown のファイルをそのまま表示するサービスではなく、エディタで記号を入力すると書式に変わる「ショートカット」として対応しています。ヘルプに載っているのは ## + 半角スペース で大見出し、### + 半角スペース で小見出し、--- で区切り線、> で引用、``` でコード、- と 1. でリスト、** か __ で囲んで半角スペースを入れると強調、~~ で打ち消し線です。表やチェックボックスはこの一覧にありません。
独自記法は、ほかのサービスに持っていくと記号のまま表示されます。たとえば Zenn の :::message を GitHub に貼るとただの段落になり、GitHub の > [!NOTE] を本サイトのプレビューで開くと、[!NOTE] で始まる普通の引用になります。
HTML タグと安全性
CommonMark の仕様では HTML タグをそのまま書けますが、実際に表示されるかどうかはサービス次第です。
| 入力 | GitHub | Zenn(zenn-markdown-html) | 本サイトのプレビュー |
|---|---|---|---|
<details><summary>…</summary> | 折りたたみとして表示 | 文字として表示 | 文字として表示 |
<script>alert(1)</script> | 文字として表示 | 文字として表示 | 文字として表示 |
<b onclick="x()"> | <b> だけ残り onclick は削除 | 文字として表示 | 文字として表示 |
GFM には <script>・<style>・<iframe> など 9 種類のタグを無効にする規則があり(GFM §6.11)、GitHub はさらに属性も取り除きます。本サイトの Markdown プレビューは貼り付けた文章でスクリプトが動かないよう、すべての HTML タグを文字として表示します。中の Markdown(上の例の Markdown)は変換されます。折りたたみを使うなら、表示は GitHub や Qiita で確認してください。Zenn では <details> の代わりに :::details を使います。
書いた Markdown を確かめる
投稿前に確かめるなら、次の順が効率的です。
- Markdown プレビューに貼り付けて、CommonMark・GFM としての表示を見る。太字の
**がそのまま残っていれば、前の節の句読点の問題です。 - Markdown リンターで検査する。markdownlint 0.40 の既定の規則で、見出しレベルの飛びや URL の直書きなどを行番号つきで指摘します。
# リリースノート
https://example.com を参照
### 修正
* 一つ目
- 二つ目
この文書では、3 行目に MD034(URL の直書き)、5 行目に MD001(見出しが h1 から h3 に飛んでいる)、8 行目に MD004(箇条書きの記号が混在)、7 行目と 8 行目に MD032(リストの前後に空行がない)が出ます。最後の指摘は、* と - が別々のリストとして解釈されていることを示しています。
- Qiita の
:::note、Zenn の:::message、GitHub の> [!NOTE]のような独自記法は、汎用の変換器では再現できないので、各サービスのプレビュー画面で確かめます。