Markdown（マークダウン）の存在意義を理解する、ついでに .md ファイルの意味も


書き方やツールの話はしない。

「そもそも何者？」「何の意味があんの？」あたりの話をする。

# Markdown とは
文書を書いたり生成したりするためのフォーマットの一つ。

より専門的に言えば「軽量マークアップ言語の一つ」との説明になるが、よくわからんので掘り下げていく。

# 掘り下げる旅
コンピュータで文書を書くとはどういうことか――。

Markdown の意義を知るまで掘り下げてみるとしよう。

## 1: テキスト
リアルだとペンで紙に書いたりするが、デジタルでは少し違う。

キーボードやスマホなどで書く。最近は音声入力もあったりするし、音声を認識して文字起こししたりもできる。もちろん、プログラムの力で生成させることもできる。ChatGPT とかもそうで、内部的にプログラムが文章を生成している。

コンピュータ上で書いた文章を **テキスト（Text）** と呼ぶ。

## 2: テキストの表現方法は 2 種類
テキストには 2 種類ある。これはそういう仕様なので受け入れるしかない。

### 2-1: プレーンテキスト
まずは、キーボードなどで書いた文章を素のままで扱う **プレーンテキスト（Plain Text）**。プレーンとは「素の」といった意。

プレーンテキストは素の情報なので扱いやすい。どの PC やスマホで書こうが、プログラムで生成しようが、どこででも読める。一方で、何の装飾情報もないので読みづらいし、扱いづらい。たとえば太字にすることすらできない。素の文字情報しか扱ってないので、太字という概念はない。

### 2-2: リッチテキスト
次に、太字をつけたり文字色を変えたり、あるいは表や画像や動画を貼り付けたりしたテキストが **リッチテキスト（Rich Text）**。私たちが普段画面ごしに見ているのは、たいていはリッチテキスト。その名のとおり、プレーンと比べるとリッチだ。

リッチテキストのからくりは、プログラミング言語と同じようなもの。「こういう表記で書かれたものを太字と解釈します」みたいなルールがあって、私たちはそのルールに従ってプレーンテキストで書く。で、これをプログラムに読ませる。すると、プログラムはそのとおり、太字の表記で書かれた部分を太字とみなして、太字で表示する。

しかし、そんな難しそうなことなんていちいちやってられない。素人にプログラミング言語書かせるのか？ひえー。……なので普通は Microsoft Word みたいな専用ソフトを使う。このソフトは「ルールに基づいたプレーンテキストの記述」と「それを解釈してちゃんと表示」を上手く隠蔽して、まるで直接リッチテキストを編集できているように見せる。スライドをつくる Powerpoint とかも同じ。

## 3: リッチテキストをもっと楽につくりたい……
プログラマーやライターなど、**書くことを生業とした人にとって、Word のような専用ソフトはだるい**。

だるい理由その1、行き来がだるい。いちいちキーボードとマウスを行き来しなきゃいけないのがだるい。文字入力して、太字にしたいところを範囲選択して、ツールバーにある B のアイコンをクリックして……みたいなことを何度も何度もしないといけない。やってられない。キーボードから手を離さずにガリガリ書きたいよね。

だるい理由その2、管理や連携がしづらい。リッチテキストはその仕組み上、「表記ルールとそれを解釈するプログラム」のセットがたくさんできる。Word でスライドはつくれないし、Powerpoint で文書はつくれない。Word でつくった .docx ファイルを、Powerpoint で編集することはできない。これは「Word におけるセット」と「Powerpoint におけるセット」が違うからだ。もちろん Microsoft だけじゃなくて、セットはもっとある。かといって世の中の全員に Microsoft Word を使わせることもできない。**統一的に扱えるのはプレーンテキストだけだ**。

そこで生まれたのが **マークアップ言語** である。これは「人間が直接書ける程度に単純化された表記」と思えば良い。最も有名なのは Web ページを表示する HTML で、HTML では太字は `<b>太字</b>` と書く。`<b></b>` で囲めばいいのだ。いちいち `<b></b>` で囲むのは面倒くさいけど、これでもだいぶかんたんになった。ともかく、HTML が想定するルールどおりに書けば、あとはプログラム（もっというと Chrome や Edge や Safari などのブラウザ）が読み取ってちゃんと太字とか表示してくれる。

マークアップ言語自体はプレーンテキストで書けば良い。だから書くのが生業の人でもバリバリ書ける。`<b></b>` とかは正直書きづらいし、覚えないといけないけど……。

## 4: もっと楽に書けるマークアップ言語が欲しい……
まあすぐわかることだが、`<b></b>` みたいなのをいちいち書くのは正直つらい。もっと簡単にできねえのか？

そうして生まれたのが **軽量マークアップ言語** であり、Markdown はこのカテゴリに属する。

Markdown では太字は `**太字**` と書く。アスタリスク二個で囲むだけだ。ずいぶんと簡単である。他にも見出しとか、箇条書きとか、リンクとかも比較的かんたんに書ける。慣れたらサクサク書けるし、今この記事を書いている私もサクサク書いている。HTML よりはだいぶマシだし、愛用できる程度にはよくできている。

ただし、ブラウザが直接読み取ってくれるわけではない。ブラウザが読み取ってくれるのはあくまでも HTML だけ。なので、Markdown で書いたものをリッチテキストで読みたければ、Markdown → HTML と変換して、変換した HTML をブラウザで開く、なんてことになる。他にも変換例はあって、Markdown → PDF や Markdown → Docx もできる。

## 5: Markdown マジで便利
書くことが生業じゃない人にはわかりづらいだろうが、Markdown はかなり楽なのである。

実際、IT エンジニアの世界でもかなり使われている。Qiita を見る層は、おそらくすでに縁があるのではないか。一方で、SIer など専用ソフトで書く世界もまだまだあるし、まだまだ圧倒的多数派（そもそも Microsoft Office が強すぎる）だったりする。

## まとめ: Markdown とは
- プレーンテキストとリッチテキストがある
- リッチテキストは Word など専用ソフトで書くが、書くことが生業の人達にはつらい
- Q: プレーンテキストでリッチテキスト書きたいんだけど？
    - Ans: よりかんたんに書ける表記を考案すればいい！
- ソリューション1: マークアップ言語。HTML とか
    - 問題点: 言うて結構だるい
- ソリューション2: 軽量マークアップ言語。Markdown とか
    - だいぶいける
    - いけるので、ITエンジニアの世界でもかなり使われている

# .md ファイル
Markdown の意義は理解できたが、ついでに .md ファイルも見ておく。

## ファイルの種類をもって区別する
先ほど「表記ルールとそれを解釈するプログラムのセット」の話をしたが、このセットは **ファイルの種類** で区別する。

- Word のファイルは .docx
- Powerpoint のファイルは .pptx
- Excel のファイルは .xlsx
    - で、マクロがある場合は .xlsm

同様に、

- HTML ファイルは .html
- Markdown ファイルは .md

以上。

Markdown ファイルの種類は .md で表現する、と決まっているので受け入れるしかない。仮に退職届を Markdown で書くとしたら「退職届.md」になるだろう。

## 拡張子
この .xxx を **拡張子** という。

解釈するプログラムは、ファイル名についてるこの拡張子をもとに、それがどんな種類のファイルであるかを見る。退職届.docx だったら Word で書かれたファイルだし、退職届.md だったらプレーンテキストの Markdown で書かれたものだ。

## 関連付け
内部的には、拡張子ごとに自動でこれこれのプログラムを使え、との紐づけがある。退職届.docx を開いたときに Word で開かれるのはそのためだ。すでに「.docx ファイルは Word で開け」的な設定がされている。これを **関連付け** という。

ちなみに関連付けは、必ずされているとは限らない。特に Linux ではされていない方が多いだろう。この場合、**「解釈するプログラム」に対して「これを読み込め」と私たちが与える必要がある**。たとえば、以下のようにして開くだろう。

```
$ vi 退職届.md
```

上記は、vi というプログラムに、退職届.md というファイルを与えている。vi さんに「この退職届.mdを開け」と言っているわけだ。

# おわりに
Markdown の存在意義と、ついでに .md ファイルの意味を押さえた。