Markdown のリンクスタイル比較:inline / reference / shortcut / autolink の使い分け

約7分

Markdown のリンクは「[text](url) で書く」とだけ覚えている人が多いですが、実は 4 種類の記法があります。長い記事や仕様書を書くと「同じ URL を 5 回書きたくない」「URL を脚注にまとめたい」「メールアドレスを自動リンク化したい」といった場面で、他の記法のほうが圧倒的に書きやすいケースが出てきます。本記事では 4 種類を比較し、用途別の選び方を整理します。

4 種類の記法

1. Inline link

最も一般的な記法:

詳しくは [公式ドキュメント](https://example.com/docs) を参照してください。

[テキスト](URL "オプションのタイトル") の形式。タイトル属性は HTML の title= に出力され、ホバー時のツールチップになります(多くの Markdown 実装でサポート)。

2. Reference link

URL を本文と分離し、末尾の参照定義に書く形式:

詳しくは [公式ドキュメント][docs] を参照してください。
さらに [API リファレンス][api] もあります。

[docs]: https://example.com/docs
[api]: https://example.com/api 'API リファレンス'

[テキスト][参照名] で本文を書き、別の場所で [参照名]: URL として URL を定義します。参照名はドキュメント全体で一意であれば、定義の位置はどこでも構いません。

3. Shortcut reference

参照名を省略する形式:

詳しくは [公式ドキュメント] を参照してください。

[公式ドキュメント]: https://example.com/docs

[テキスト] だけ書くと、テキスト自体が参照名として使われます。reference link の最短形。

4. Autolink

URL やメールアドレスをそのまま <> で囲む:

詳しくは <https://example.com/docs> を参照してください。
連絡先は <admin@example.com> です。

URL がそのまま表示され、リンクにもなります。テキストと URL を別にしたい場合は使えません(テキスト = URL)。

比較表

観点InlineReferenceShortcutAutolink
記法[t](url)[t][ref] + 後方定義[t] + [t]: url<url>
可読性(ソース)△(URL が混じる)◎(本文が読める)
URL 長への耐性✗(行が長くなる)
同じ URL の再利用✗(コピペ)◎(参照 1 つ)
URL を最後にまとめる
テキストと URL を分けたい△(テキスト = 参照名)
メアド・URL のクイック表示

用途別の推奨

ブログ記事・READMEの本文 → Inline

短めの文章で、URL が 1-2 個ずつポツポツ出てくる場合:

[GitHub リポジトリ](https://github.com/owner/repo) を見てください。

ソースが読みやすく、書く側も慣れている形式。Markdown の入門者が最初に覚えるのもこれ。

仕様書・長い記事・複数ページ → Reference

同じ URL を複数回参照する、URL が長い、本文を URL 抜きで読みたい場合:

本機能は [RFC 7519] および [RFC 8259] に準拠する。詳しくは [RFC 7519] §4 を参照。

[RFC 7519]: https://datatracker.ietf.org/doc/html/rfc7519
[RFC 8259]: https://datatracker.ietf.org/doc/html/rfc8259

利点:

  • 本文は短く、URL が視界を遮らない
  • URL を後でまとめて確認・修正できる
  • 同じ参照名で 5 回書いても URL は 1 箇所だけ

“URL なしで本文を読みたい” → Shortcut

参照名を考えずに、テキストそのままで参照:

本機能は [RFC 7519] に準拠する。

[RFC 7519]: https://datatracker.ietf.org/doc/html/rfc7519

[RFC 7519][rfc7519]」と書くより「[RFC 7519]」のほうが本文が読みやすい。同じ書き方を別の場所で 5 回しても、定義は 1 つだけ。

URL そのものを見せる → Autolink

「ここにアクセスして」と URL を見せたい場面:

GitHub Issues は <https://github.com/owner/repo/issues> で受け付けています。

CommonMark / GFM では https://... を裸で書くだけでもリンク化される実装が多いですが、< > で囲むほうが仕様準拠で、改行や周囲の文字に頼らず確実にリンクとして解釈されます。

CommonMark / GFM の細かい仕様

参照名の大文字小文字

参照名は大文字小文字を区別しない

[Foo][BAR][foo][bar] は同じリンクになる。

[bar]: https://example.com

正規化は ASCII 範囲の caseless(CommonMark §6.6)。ただし Unicode 文字を含む参照名は、実装によって挙動が分かれます。

Shortcut reference + テキスト内の []

[Foo] というテキストの後に [Bar] が来る。

[Foo]: https://foo.example
[Bar]: https://bar.example

これは [Foo] [Bar] の 2 つのショートカット参照として正しく動作します。[] を文字として書きたい場合はバックスラッシュエスケープ:

配列 [0] は最初の要素。

CommonMark と “linkify”(GFM 拡張)

GitHub Flavored Markdown は < > なしで URL を書いても自動リンクします(linkify 拡張):

詳しくは https://example.com を参照。 ← GFM では自動リンク

CommonMark の標準仕様には含まれていません。Hugo や Jekyll などジェネレータごとに対応状況が違うので、仕様に依存させたくないなら明示的に <>[]() を使うのが安全。

reference link の上級テク

URL を巨大なファイル末尾にまとめる

長い記事では本文と URL を完全に分離できます:

本機能は次の RFC に準拠する:

- HTTP の概要は [RFC 7230]
- セマンティクスは [RFC 7231]
- 認証は [RFC 7235]

詳細:[RFC 7230] §5、[RFC 7231] §6、[RFC 7235] §3。

<!-- 末尾にまとめて定義 -->

[RFC 7230]: https://datatracker.ietf.org/doc/html/rfc7230
[RFC 7231]: https://datatracker.ietf.org/doc/html/rfc7231
[RFC 7235]: https://datatracker.ietf.org/doc/html/rfc7235

URL が壊れたとき、末尾だけ確認すればよい。

参照名の命名規則

[Foo Bar Documentation][foo-bar-docs]

[foo-bar-docs]: https://example.com/foo-bar
  • 参照名は kebab-case か snake_case で統一
  • ドキュメント全体で一意に
  • 短く(タイプ量を減らす)

編集ツールでの取り扱い

  • VS Code:標準で reference link の URL ジャンプ・補完あり
  • prettier:reference link の参照名を整列、未使用の参照定義を検出(prose-wrap 設定で挙動が変わる)
  • markdownlint:参照定義の未使用 (MD053)、重複 (MD024) などをルール化

まとめ

Markdown の 4 種類のリンク記法は、本文と URL の分離度合いで並べると Autolink → Inline → Reference → Shortcut の順に分離が深まります。短い文章なら Inline、長い文書や仕様書では Reference / Shortcut、URL を見せたいなら Autolink、というのが基本指針です。reference link と shortcut reference を覚えると、長い記事の Markdown ソースが劇的に読みやすくなるので、本サイトのブログや GitHub の README を書くときは積極的に使うと良いです。

書いた Markdown を実際にレンダリングして確認したいときは Markdown プレビューツール を利用してください。