blog.dopana

Back

番号なしリストのマーカー#

Markdownで番号なしリストを作るには、各項目の先頭にダッシュ(-)、アスタリスク(*)、プラス(+)を付けます。1つ以上の項目をインデントするとネストしたリストになります:

- 項目A
- 項目B
  - ネストした項目B.1
markdown
* 項目A
* 項目B
  * ネストした項目B.1
markdown

どれも同じように表示されます。どの記号を使うかはスタイルの問題です — そしてそれこそがリンターが検査するところです。

MD004 (ul-style)#

MarkdownリンターのルールMD004(ul-style)は、文書全体で番号なしリストに使うマーカーの種類を設定・強制します。

  • タグ (Tags): bullet, ul
  • エイリアス (Aliases): ul-style
  • 自動修復 (Fixable): 一部の違反はツールによって自動修正可能です。
  • パラメータ (style):
    • consistent(デフォルト): 任意の記号(*-+)を使用できますが、文書内のすべてのリストが最初のリストのスタイルと一致する必要があります。
    • asterisk: アスタリスク(*)を強制します。
    • dash: ダッシュ(-)を強制します。
    • plus: プラス(+)を強制します。
    • sublist: ネストされたリストレベル(サブリスト)ごとに、親レベルと異なる独自の記号を使用することを許可します。

デフォルトの設定は通常 “consistent” です:

{
  "ul-style": {
    "style": "consistent"
  }
}
json

例えば、sublist スタイルが設定されている場合、最外形インデントにアスタリスク、中間インデントにプラス、最内形インデントにダッシュを使用しているため、以下の文書は有効です:

* 項目 1
  + 項目 2
    - 項目 3
  + 項目 4
* 項目 5
  + 項目 6
markdown

ダッシュを好む理由#

デフォルトはアスタリスクですが、ダッシュ(-)が一般的なスタイルで最も読みやすいと感じます。実際的な理由もあります: AIエージェントはほぼ常にダッシュを書き、アスタリスク(**)は太字に多用します。したがってリストをアスタリスクに強制するとノイズになります — 行頭の*はリストのマーカーなのか太字なのか、ひと目では曖昧だからです。

既存の文書を書き換えさせない#

既にアスタリスク(*)で統一され、完全に一貫している文書もあります。ルールを満たすためだけにその文書を書き換えたくありません。リンターは、きれいで一貫した内容を書き直す理由になるべきではありません。

選択肢1: ダッシュスタイルを設定#

JSON設定(.markdownlint.json)を更新すれば、ルールがダッシュを許容します:

{
  "ul-style": {
    "style": "dash"
  }
}
json

これでダッシュは通ります。しかしアスタリスクのみの文書は依然としてエラーになり、書き換え問題は残ります。

選択肢2: ルールを無効化#

このルールの価値は低いです — マーカーの選択は見た目の問題にすぎません。私は単純に無効化する方が好きです:

{
  "ul-style": false
}
json

これで両方のスタイルが自由に共存します。各文書は独自の慣習を保ち、強制書き換えもなく、リンターも静かです。

結論#

スタイルルールは意見であってバグではありません。MD004はどのマーカーを選ぶかだけに注目しますが、どの文書もそもそも一貫して1種類だけ使っています。"dash"設定は既存のアスタリスク文書を依然として罰するので、私は"ul-style": falseを選び、各ファイルが独自のスタイルを維持できるようにします。

参考文献#