マークダウン記法は、見出しやリストのような基本部分は どのサービスでもほぼ同じです。違いが出るのは改行の扱い、独自の拡張記法、そして日本語特有の問題である「句読点やかぎ括弧の隣で太字が効かない」現象です。この記事では記法を一覧にしたうえで、それぞれ実際に 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>
画像![代替テキスト](image.png)<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 つです。

  1. 句読点を ** の外に出す:**注意**:ここは必須です、「**重要**」です。見た目もほとんど変わりません。
  2. 閉じる ** の後に半角スペースを入れる:**注意:** ここは必須です。確実に効きますが、文中に空白が入ります。
  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 の記法の違い

基本の記法は共通ですが、各サービスは独自の記法を足しています。公式ガイドに書かれている主なものを並べます。

機能QiitaZennnoteGitHub
補足・警告ボックス:::note info / warn / alert:::message / :::message alertヘルプに記載なし> [!NOTE] など 5 種類
折りたたみ<details>(タグの下に空行が必要):::details タイトルヘルプに記載なし<details>
コードのファイル名```ruby:qiita.rb```js:ファイル名ヘルプに記載なしなし
数式ありあり(KaTeX)数式記法ありあり(MathJax)
ダイアグラムMermaid・PlantUMLMermaidヘルプに記載なしMermaid など
脚注ありあり(インライン脚注も)ヘルプに記載なしあり
見出しのレベル#〜#######〜######大見出し ## と小見出し ####〜######

出典:Qiita Markdown記法 チートシート、Zenn のMarkdown記法一覧、note ヘルプ:Markdownショートカット、GitHub Docs:基本的な書き方とフォーマットの構文。

note は Markdown のファイルをそのまま表示するサービスではなく、エディタで記号を入力すると書式に変わる「ショートカット」として対応しています。ヘルプに載っているのは ## + 半角スペース で大見出し、### + 半角スペース で小見出し、--- で区切り線、> で引用、``` でコード、- と 1. でリスト、** か __ で囲んで半角スペースを入れると強調、~~ で打ち消し線です。表やチェックボックスはこの一覧にありません。

独自記法は、ほかのサービスに持っていくと記号のまま表示されます。たとえば Zenn の :::message を GitHub に貼るとただの段落になり、GitHub の > [!NOTE] を本サイトのプレビューで開くと、[!NOTE] で始まる普通の引用になります。

HTML タグと安全性

CommonMark の仕様では HTML タグをそのまま書けますが、実際に表示されるかどうかはサービス次第です。

入力GitHubZenn(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 を確かめる

投稿前に確かめるなら、次の順が効率的です。

  1. Markdown プレビューに貼り付けて、CommonMark・GFM としての表示を見る。太字の ** がそのまま残っていれば、前の節の句読点の問題です。
  2. Markdown リンターで検査する。markdownlint 0.40 の既定の規則で、見出しレベルの飛びや URL の直書きなどを行番号つきで指摘します。
# リリースノート

https://example.com を参照

### 修正

* 一つ目
- 二つ目

この文書では、3 行目に MD034(URL の直書き)、5 行目に MD001(見出しが h1 から h3 に飛んでいる)、8 行目に MD004(箇条書きの記号が混在)、7 行目と 8 行目に MD032(リストの前後に空行がない)が出ます。最後の指摘は、* と - が別々のリストとして解釈されていることを示しています。

  1. Qiita の :::note、Zenn の :::message、GitHub の > [!NOTE] のような独自記法は、汎用の変換器では再現できないので、各サービスのプレビュー画面で確かめます。