Markdownでのテーブル:GFM構文、揃え、および制約事項

GFMのパイプテーブル、アライメント、セル数制限。

目次

Markdown テーブルは、ヘッダー行、ハイフンによる区切り行、そしてその下にあるデータ行で構成されています。GFM および Hugo において、パイプ記号(|)をテーブルとして認識させるのはこの区切り行です。

このガイドは、ドキュメント作成ツール 2026年版:Markdown、LaTeX、PDF と印刷ワークフロー の一部です。その他のブロックタイプについては、Markdown チートシート で解説しています。

markdown table alignment

テーブルは、元の Markdown 構文や CommonMark には含まれていません。これは GitHub Flavored Markdown 仕様におけるテーブル拡張機能 です。Hugo 0.164 では、Goldmark がデフォルトでこの拡張機能を有効にしています(markup.goldmark.extensions.table)。以下のサンプルはフェンス(コードブロック)内で示しているため、パイプ記号がリテラル(そのままの文字)として残ります。これは Markdown コードブロック で見られるパターンと同じです。

パイプテーブルの構文

テーブルは3つの部分で構成されます:ヘッダー行、区切り行、そしてデータ行(0行以上)。セル間は | で区切られます。行の先頭と末尾のパイプ記号は省略可能です。パイプ記号隣のスペースはトリム(除去)されます。

| Header 1 | Header 2 |
| --- | --- |
| Cell A1  | Cell B1  |
| Cell A2  | Cell B2  |

GitHub の作成ドキュメントでは、各セルの区切りには少なくとも3つのハイフンが必要であり、テーブルの直前には空白行が必要と記載されています。GFM 仕様では、区切りセルはハイフンで構成されるとされ、どちらか一方または両側にコロンを付加することが可能とされており、その例には1つのハイフンだけのセルも含まれています。Hugo 0.164 では、次のように書かれたものもテーブルとしてレンダリングされました:

| A | B |
| - | - |
| 1 | 2 |

同じ Hugo のレンダリングでは、前の行が段落で、間に空白行がなくても <table> として変換されました。GitHub では、3つのハイフンの区切りと空白行に従う必要があります。当サイトでは、1つのハイフンで十分であり、空白行は必須ではありません。

|Too|Tight| のようなパイプ記号の間にスペースがない形式も、|---|---| の区切り行とともにレンダリングされました。パイプ記号の横にあるスペースはトリムされます。最初の例にスペースを入れるのは、ソースの差分(diff)が読みやすいようにするためです。

ヘッダー行と区切り行には、同じ数のセルが必要です。数が異なると、Hugo はテーブルとして認識しません。この場合、テキストとして処理され、ハイフンは Hugo のタイポグラファー(文字装飾機能)の対象となります:

| abc | def |
| --- |
| bar |

データ行は、ヘッダー行より短くても長くなっていても構いません。短い行の場合は、不足分が空セルで埋められます。ヘッダー行のセル数を超えるセルは、表示されなくなります。

| A | B | C |
| --- | --- | --- |
| 1 | 2 |
| A | B |
| --- | --- |
| 1 | 2 | 3 |

上記の1つ目は、3つ目のセルが空白としてレンダリングされます。2つ目は 1 と 2 のみレンダリングされます。

パイプ記号がない行でも、空白行が続くまではテーブルの一部とみなされます。Hugo 0.164 では、次の bar を、2番目のセルが空の行としてテーブル内に配置し、GFM の例 202 と一致させるよう処理しました。次の段落は、空白行の後に始まります。

| abc | def |
| --- | --- |
| bar | baz |
bar

next

列の揃え

揃えは、区切り行にコロン(:)を付けて指定します。コロンなしの --- は左揃えで、:--- と同じです。

| Left | Right | Center |
| :--- | ----: | :----: |
| text | 12.50 | yes    |
Left Right Center
text 12.50 yes

ヘッダー行にあるコロンは、そのセル内の単なる文字です。揃えを設定するものではありません。Hugo が使用するのは以下の区切り行です:

| :--- Left | Right ---: |
| :-------- | ---------- |
| Correct   | Alignment  |

セル内のコンテンツ

セル内ではインライン(行内)要素が機能します:強調、コードスパン、リンクなどです。ブロックレベルの要素は機能しません。GFM 仕様には、テーブル内にブロックレベルの要素を挿入できないと定められているため、セル内のリストやフェンス(コードブロック)は、リストやフェンスとして扱われません。

| Feature    | Status     | Documentation |
| ---------- | ---------- | ------------- |
| **API v2** | *Released* | [ドキュメント](/api)  |
| `Auth`     | Beta       | 近日公開      |

リテラルのパイプ記号を表すには \| または &#124; を使用します。Hugo 0.164 では、両方が | としてレンダリングされました。

| Expression | Result |
| ---------- | ------ |
| a &#124; b | true   |
| x \| y     | false  |

セル内の改行は、HTML の <br> タグを使用します。当サイトでは markup.goldmark.renderer.unsafe が true に設定されているため、このタグは保持されます。生 HTML を除去する処理系では、この2つの部分が連結されて表示されます。

セル内でハイフン3つ(---)を入力することは、Hugo における別の罠です。タイポグラファーがセル内の --- をエムダッシュ(&mdash;)に書き換えます。コードスパンに囲めば、ハイフンはそのまま保持されます。\--- は -&ndash; としてレンダリングされました。

| As text | As code |
| ------- | ------- |
| ---     | `---`   |

マージセル(セル結合)

GFM には rowspan(縦結合)や colspan(横結合)がありません。1つのセルが2行にまたがる必要がある場合は、HTML でテーブルを書きます。当サイトの unsafe レンダラーは、その HTML をページに残すようになっています:

<table>
  <tr>
    <td rowspan="2">Merged</td>
    <td>Cell 1</td>
  </tr>
  <tr>
    <td>Cell 2</td>
  </tr>
</table>

Pandoc の markdown+pipe_tables ライターは、このページのパイプ構文を出力します。これは Word ドキュメントを Markdown へ変換する際 に使用されるライターです。グリッドテーブルやその他の Pandoc 固有のレイアウトは、方言(Dialect)の機能であり、GFM vs CommonMark vs Pandoc Markdown で詳しく解説しています。

幅の広いパイプテーブルは、スクロール表示またははみ出し(オーバーフロー)が発生します。移植性のある縮小方法としては、行列の転置(トランスポーズ)、複数の小さなテーブルへの分割、または独自の CSS を持つ HTML テーブルの使用があります。パイプ構文にはキャプション(表題)がありません。Hugo の目次(Table of Contents)は、見出し(ヘッダー)から構築されます。

テーブルがテキストのままになる場合のチェック項目

ヘッダー行と区切り行のセル数を数えてください。これらの2つの数が異なる場合、そのブロックは段落として処理されます。短いデータ行であってもテーブルとしては扱われますが、末尾が空セルとなります。markdownlint のルール MD056 は、短い行はセルが欠けているように見え、追加のセルは破棄されるため、すべての行がその数に一致することを求めます。

区切り行のコロンを確認してください。ヘッダーにあるコロンはテキストであり、その列の揃えは区切り行の設定に従います。

セル内の --- が当サイトで単一のダッシュ記号として表示される場合は、タイポグラファーによって書き換えられたことになります。ハイフンはコードスパンに囲んでください。

GitHub でパイプ記号がテキストとして表示される場合は、GitHub のドキュメントで要求されている空白行を追加し、各セルの区切りに少なくとも3つのハイフンを使用してください。Hugo 0.164 では、より短い形式もすでに受け入れられていました。

区切り行が欠けていることも、パイプブロックがテキストのままになる別の原因です。Hugo 0.164 では、次を段落として処理していました:

| Header 1 | Header 2 |
| Cell A   | Cell B   |

パラメータテーブル例

同じ区切り行に揃え指定を含めることで、インラインコードを収めるスペースも確保できます:

| Parameter | Type    | Default | Required |
| :-------- | :------ | :-----: | :------: |
| `apiKey`  | string  | —       | Yes      |
| `timeout` | number  | 30000   | No       |
| `retries` | number  | 3       | No       |

関連リンク

購読する

システム、インフラ、AIエンジニアリングの新記事をお届けします。