ソースコードとしての Markdown とプレーンテキストフォーマットとしての Markdown は異なるという話

Markdown はもともとはプレーンテキストフォーマットかつ HTML にトランスパイルできるソースコードでもあるという感じの言語として設計されていると思うが、今はむしろ HTML にトランスパイルできるソースコードという用途のほうが強くなっているように思う。プレーンテキストをそのまま読み書きするということをあまりせず、描画された HTML を見る機会の方が圧倒的に多い。このはてなブログにしてもそうである。

ブログの入力画面などに実装された軽量マークアップ言語はもともとがマークアップ言語であることを目的にしていて、Markdown はそのままでも読めるし HTML にも変換できる、というのとはちょっと趣が異なる。Wiki 記法や BBCode などはあきらかにコードであるし、はてな記法もそうだった。

それらが Markdown に置き換えられていったのは、Markdown が読みやすかったからというよりは書きやすかったからということが大きい。Markdownエニグマティックな記法が比較的少なく、普通に入力して普通に書ける。これが利点だったが、反面、表現力は犠牲になっている。定義リストやテーブルは使えないし、脚注などもない。たとえば大抵の Wiki では結局 Wiki 記法がそのまま使われているが、Wiki は図表も使うし目次も脚注も使うから、どうしたって Markdown では足りないし、何より Wiki 内リンクの取り扱いに特化した Wiki 記法が一番 Wiki に適している。

Scrapbox はその点で Wiki 記法と Markdown のいいとこどりをしていて、百科事典でも作るわけじゃなきゃこれで充分だよなというくらいの機能に抑えている。こういう割り切りはこれはこれで正しいと思うが、しかしどこでもこの記法でいいかというと全くそんなことはなくて、たとえば技術書の原稿を書くにはそれなりの表現力が必要になる。

さて、Markdownエニグマティックな記法がないことがいいところだと思うが、たとえばこういうものはどうだろう

![img alternative text](https://example.com/url_for_img)

これは img 要素を表示するためのものだが、! で画像だということが果たして誰がわかるだろうか。
なんならプレーンテキストとしては https://example.com/url_for_img これだけあれば充分で、これが単に URL か画像を表示したいかの区別をつけるのならば、そのようなマークアップをすることが正しかろうと思う。昨今のおおよそのテキストコミュニケーションサービスでは URL が指し示すリソースが画像であれば、自動でインライン展開を行うようになったりしているが、これがプレーンテキストフォーマットで求められる挙動だろう。もっとも Markdown は今から20年近く前のフォーマットなので、そうはいってもというところはある。

テキスト中の改行を\
明示するには  
`\` あるいは `  ` を行末に入力する必要がある

これもまた HTML にトランスパイルできる言語であろうとした結果の歪みと思っていて、おおよそ自然でない記法で改行というごく自然な行為をする必要がある。
もちろん Markdown は欧文しか想定していないので、日本語のように形式段落を日常的に使う言語に適していないのはしょうがない。しょうがないとは思うが、ソースコードとしては、本来意味のない折り返しこそ「次の行はこの行の続きである」ということを明示するべきのように思う。\ という記号は改行のエスケープ、つまり行が続くことを意味するし、ソースコードとしての振る舞いもそうであってほしい。しかしプレーンテキストフォーマットとしては逆で、手動による折り返しのほうを多用するから、折返しでない本当の改行を明示するというほうが利便性がある。なので目に見えない という改行の記法が存在すると思うが、果たしてという感じである。

それから、これは本来の Markdown の抱える問題ではないのだが、Markdown 派生の記法の多くが、エニグマティックな拡張記法を採用している、というのがある。全く Markdown の設計意図を理解していないと思うし、他の軽量マークアップ言語の研究も足りていない。部分的には ReST や AsciiDoc のほうが優れているという記法もあるが、それらを参考にしたとも思えないような、パーサが混乱しなさそうな空いている記号があったのでとりあえず使いました、という感じの、いかにもマークアップをしますという記法が多いのは、じゃあなんで Markdown 使ってんねんという気持ちになったりもする。まあどうして Markdown を使っているかというとそれがデファクトだからなので、Markdown の設計意図がどうこうというのはまったく関係ない話なのだけど。

Markdown を10年以上使っているが、やはり Markdown よりも日本語に適したプレーンテキストフォーマットが必要だなあということはずっと思っている。テキストフォーマットはテキストフォーマットであればいいので、ソースとして使わない限りは別にパーサも書かなくていいし、トランスパイラも書かなくていい。しかしトランスパイルしない環境であれば、別に Markdown でも困らないのだよな、とも思うので、結局特に何かを作ったりはしていない。ただ、Lazri はいいプロジェクトだと思うのでまたどこかでやろうとは思っている。Ruby 製なので TypeScript に移植したりするところからやる必要があり、そこで足踏みをしている。