Markdown 50のルール

## 3行で

- Markdown記法にもルールがある
- 無視しても書けるけど、それに違和感がある人向け
- Markdown記法を書いた記事ではないです

## Markdown記法には（現在）50のルールがある

**※知らないうちに 47→50 に増えてたため更新しました。**

ルールを守らずに書いてもエラーを起こしたりすることはないけど、例えば「三点リーダ（…）は2つ続けて書かなければいけない」とか、「テーラードジャケットの一番下のボタンは外さなければいけない」とか、「葉巻は紙巻きたばこのように中指と人差し指で挟んで喫ってはいけない」とか、そういうたぐいのものだと思っている。守らなくても誰かが困るわけではない。でも守ることが美しい、とかそういう感じの。
ともかく『たぶんこれはやってしまう可能性がある』というものだけ抜粋して書きます。
**GitHubのReadmeにも使える！**

## MD001 - 見出しは1レベルずつ増加しなければならない

```markdown
# 見出し1

### 見出し3
```

上記のように見出しレベル2 `## 見出し` を抜かしてしまうのはNG。

## MD012 - 連続した複数の空白行があってはいけない

```markdown
ブログで見るみたいな



こういうやつです
```

空白行は１つまで。

## MD018 - 見出しのシャープ（#）の後はスペースを１つ空けなければならない

```markdown
##NG

## OK
```

また、2つ以上のスペースを空けてしまうと **MD019** のルール違反になります。
全角スペースもNGです。

## MD022 - 見出しは空白行で囲まなければならない

```markdown
これは
## NG
です

これは

## OK

です
```

先頭、もしくは末尾にある場合はこの限りではありません。

## MD023 - 見出しは行頭から書かなければならない

```markdown
  ## NG

見出しをインデントしてはいけない

## OK

行頭から書き出します
```

## MD024 - 複数の見出しで同じ文言を書いてはならない

```markdown
## なまえ

ハンバーグ

## なまえ 

にんじん

### なまえ 

ちいさいにんじん
```

見出しレベルが変わっても文言はダブったらダメです。

## MD025 - 見出しレベル１は複数回使ってはならない

```markdown
# WHAT

# WHY
```

**MD041**で後述しますが、要約すると**見出しレベル１は文の書き出しの１行目にしか書くことができません**。

## MD026 - 見出しの末尾に句点、もしくはピリオドを付けてはならない

```markdown
## 見出しです。

これはNGです。

## header.

これもNGです。

## 見出し。です

これはOKです。
```

ちなみに末尾が読点（、）であれば問題ないです（一応）。

## MD027 - 引用符のあとに複数のスペースを空けてはならない

```markdown
>OKな引用符の使い方

> これもOK

>  これはNG
```

## MD028 - 引用符と引用符の間に空白行があってはならない

```markdown
>空白行のみはNG

>下記のように

間にテキストを挟む場合はOK

>もしくは
>
>このようにする
```

引用元に空白行がある場合はこのルールで対応します。

## MD031 - コードブロックの上下は空白行で囲まなければならない

```markdown
NGな書きかた
` ``ruby
# 表示の都合上バッククオートにスペースを空けてます
`` `
以上

OKな書きかた

` ``ruby
# 表示の都合上バッククオートにスペースを空けてます
`` `

以上
```

末尾にある場合はこの限りではありません。

## MD032 - リストは空白行で囲まなければならない

```markdown
NGな書きかた
- リスト
- リスト2
以上

OKな書きかた

- リスト
- リスト2

以上
```

末尾にある場合はこの限りではありません。

## MD033 - HTMLを使用してはならない

```markdown
<b>太字にしたくてもこれはNGです</b>

**マークダウン記法**を使ってください
```

コードブロックの中で書く場合は問題ありません。
GithubのReadmeをデコるために色をつけたりしたいんですが、HTMLでしか色づけできないので、これのルールに反してしまうのが悩ましいですね。

## MD034 - リンクしたいURLは<>で囲まなければならない

```markdown
NGな書きかた
詳しくはhttps://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md#md034を参照

OKな書きかた
詳しくは<https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md#md034>を参照

リンクに変換されないURLを書きたい場合はバッククオートで囲みます
`https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md#md034`
```

## MD036 - 強調を見出しとして使ってはならない

```markdown
**見出し**

これはNGです

## 見出し

見出しタグを使いましょう
```

「複数の見出しで同じ文言を使ってはいけない」という**MD024**の制約があるため、目立たせたい文言には `**強調**` を使いたくなるところですが、これもルール違反です。うまい方法あれば教えてください。

## MD040 - コードブロックには言語を指定しなければならない

```markdown

` ``python
print ("MD031でもしれっと書いてましたがこんな感じです")

# 表示の都合上バッククオートにスペースを空けてます
`` `
```

こうなる↓

```python
print ("MD031でもしれっと書いてましたがこんな感じです")
```

実際のところ言語を指定してあげた方が色もついていい感じです。
ちなみにこの記事で使っているコードブロックには `markdown` で指定しています。

## MD041 - 最初の行は見出しレベル１でなければならない

```markdown
# はじまり

## それから

### そうなった
```

**MD025**でも先述しましたが、要約すると**見出しレベル１は文の書き出しの１行目にしか書くことができない**ということになります。

## MD047 - ファイルの最後は改行しなければならない

```markdown
※アンダースコアをカーソルとして見てください

NGな書きかた_

OKな書きかた
_
```

## MD048、049、050 - スタイルの記法は統一しなければならない

以下の例はどちらも同じスタイルを適用させることができる記法ですが、ひとつのファイル内ではどちらかの書き方に統一する必要があります（そんなことをわざわざすることはないと思いますが）。

```markdown
` ``ruby
# 表示の都合上バッククオートにスペースを空けてます
`` `

~~~ruby
# コードブロックはこちらでも書けるけど、Qiitaでは言語指定が↑の書き方にのみ対応してるっぽい
~~~
```

```markdown
*斜体にしたい*

_斜体にしたい_
```

```markdown
**強調させたい**

__強調させたい__
```

## まとめ

- VSCodeユーザーであれば拡張機能の[Markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint)を入れると、ルールを犯したときに教えてくれて便利

- 下記リンクを参考に執筆しました
[DavidAnson/markdownlint](https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md)

- 以下の記事でルールが増えてるのを知りました。ありがとうございます！

https://qiita.com/kurokurokurotti/items/c0f82aa4cbdb298221a6