#マークアップ #markdown #csv #tsv
はじめに
AIとの親和性によりMarkdown記法が持て囃される昨今だが、あえてCSV/TSVによる新しい軽量マークアップ記法を考えてみた。
パーサーはVibe Codingで雑に実装している。
なぜ考えようと思ったのか
主に2つの理由から。
Markdownのテーブルがつらい
Markdownのテーブル記法は入力するのも列を修正するのも面倒すぎる。実際のところ動機はこれだけと言っても良い。
すべての情報はRDBのレコードであるべき
すべての情報は、可能な限り、正規化されたRDBのレコードとして扱われるべきだと思っている。HTMLやJSONなど階層構造が前提のデータ形式は、人間にとっての可読性に寄り添うための妥協の産物に過ぎない。
CSVDoc/TSVDocの基本的な考え方
ドキュメントを構成する各ブロック要素がCSVまたはTSVの1行(1レコード)に対応し、
- 1列目: HTMLタグ(またはそのエイリアス)
- 2列目: コンテンツ
- 3列目: 属性
となる。
1列目にはエイリアスを使うことができ、例えば #
は <h1>
、 -
は <ul>
、 |
は <table>
に変換される。
コンテンツの列を可変にすればテーブルが書きやすくなるが、RDBの思想に反すると思い3列に固定した。
CSVDocの例
#,CSVDocについて
##,見出し
,CSVDocにおいて、見出しのレベルは `#` の数またはHTMLタグで表現されます。
##,リスト
-,Item 1
-,Item 2
_-,Subitem
##,テーブル
[,First name
[,Last name
|0,John
|0,Smith
|1,Jane
|1,Doe
TSVDocの例
# TSVDocについて
## 見出し
TSVDocにおいて、見出しのレベルは `#` の数またはHTMLタグで表現されます。
## リスト
- Item 1
- Item 2
_- Subitem
## テーブル
[ First name
[ Last name
|0 John
|0 Smith
|1 Jane
|1 Doe
良いところ
CSV/TSVのフォーマットをそのまま利用できる
記法とは言いつつもただのCSV/TSVであり、独自のデータフォーマットにロックインされることはない。MarkdownやHTMLへの変換も簡単。
ファイルがそのままデータベースになる
これは結構便利なのではないかと思う。すべてのブロック要素がそれぞれ1つのレコードになっているため、NotionのようにリッチなUIで直接データベースをいじるようなサービスと相性が良さそう。
見た目が割とシンプル
特にTSVは意外とすっきりしていて、見た目のシンプルさはMarkdownと遜色ない。エディターによってはインデントが揃ってきれいに見える。
悪いところ
CSVではダブルクォートを多用する必要がある
CSVはカンマ区切りのため、カンマを含むテキストはダブルクォートで囲む必要がある。また、ダブルクォートはエスケープする必要がある。
TSVでは不可視のタブの扱いが難しい
タブの表示は環境に依存する上、不可視のため取り扱いが難しい。 インデントにはスペースが好まれ、 TSVよりCSVを目にする機会が多いのはそういうことなのだろう。
前後の行に依存している
テーブルやリスト、コードブロック等は前後の行に強く依存している。それぞれを独立したレコードとして扱うには、前後の行へのポインターを持たせるなどの工夫が必要かもしれない。
さいごに
構造化されたテキストがフラットなテーブルであるのは気持ちが良く、個人的には好感触。ただCSV/TSVをプレーンテキストとして編集するのはプログラマーくらいなので、一般的には受け入れられなさそう。