Markdown Refactoring Toolsを作るか考える
背景
- Markdownで色んなドキュメントをまとめたい
- CMSがほしいわけじゃない
- 中途半端な出来のエディタを使わされる苦しみ
- チームメンバーに基盤を強制する苦しみ
- タグやカテゴリが付けられます!ウェブサイトとして公開できます!我々の流儀に従えば
- esa.ioやdocbase.ioのような「フラットに情報を置く」スタイルでは限界がある
- 日本語における「検索」というハードルの高さ
- 構造化からは逃れられないのではないか
- タグやカテゴリは「見つけやすくするための一助」にはなるが、本質的に必要なものから逃げている
- 情報が多くなればなるほど「自分が今、相対すべきものはコレだ」というスコープを少しずつ狭める体験=ディレクトリ/階層的構造には向き合わなくてはならないのではないか
成し遂げたいこと
相互リンクとディレクトリ階層を駆使して、体系化・構造化されたドキュメント群を構築したい。
障害
掲げた目標に対して、目下障害となっていることがある。
「最初から完全な構造は設計できない」。
新しくドキュメント化しなければならないことが生まれる度、先の構造は否定されて新しい構造に置き換えるべき、となることがある。
障害を超える方法論
- 障害自体を否定する: 最初から完全な構造を設計できる魔術を手に入れる
- 障害を受け入れて共存する: 完全ではない構造からスタートできるようにする
→ すなわち、リファクタリングの平易さが欲しい
リファクタリング
Markdown文書群におけるリファクタリングとはどのような操作か
- 文書の分割
- 文書の結合
- 文書の移動
どの操作も、
- テキストを移動する
- 関連ドキュメント群の中で、カットしたテキストへのリンクを付け替える
- (必要であれば)元の文書から新しい文書へのリンクを付ける
基本的にはこれだ。
- 文書の削除
これについては
- テキストを削除する
- 関連ドキュメント群の中で、カットしたテキストへのリンクを付け替える
用意したいもの
文書の分割、結合、移動、削除を気軽に行える手段
サポートしたい環境
VimやVSCodeなど、テキストエディタにとらわれずに作業できるものが良い
→ CLIで作って、エディタ側の支援はよしなに、かな。
必要なもの
文書群の操作可能なMarkdown AST
必要な調査
CommonMark、GitHub Flavored Markdownを基軸として、Markdownの文法に対応したASTパースライブラリを持つスタックを使いたい
ライブラリ調査
Go
https://github.com/yuin/goldmark が強すぎる。Hugoでも使われてるためか、Contributionも手厚い。
一応拡張性があり、CommonMark、GFM以外にも拡張できる模様。
JavaScript
https://github.com/remarkjs/remark こちらもほぼコレ。Deno対応、拡張はGFM以外未対応。
Rust
https://github.com/kivikakk/comrak これも競合なし。拡張性はGFMのそれをモジュールごとに対応している模様。ただ、それ以外はContribution待ち。
Rustはまだ不慣れだし、DenoかGoかなぁ
ここで作ってみよう
cliのパッケージって何が良いんだ今は
cristalhq/acmd
akamensky/argparse
cosiner/argv
rsteube/carapace
rsteube/carapace-bin
mkideal/cli
teris-io/cli
tucnak/climax
leaanthony/clir
posener/cmd
hedzr/cmdr
spf13/cobra
rainu/go-command-chain
jaffee/commandeer
posener/complete
dnote/dnote
elves/elvish
codingconcepts/env
cosiner/flag
integrii/flaggy
sgreben/flagvar
grijul/go-andotp
alexflint/go-arg
yitsushi/go-commander
jessevdk/go-flags
DavidGamba/go-getoptions
devfacet/gocmd
liujianping/job
alecthomas/kingpin
peterh/liner
mitchellh/cli
jawher/mow.cli
nanovms/ops
spf13/pflag
Zaba505/sand
octago/sflags
antham/strumt
bobg/subcmd
liujianping/ts
ukautz/clif
urfave/cli
dixonwille/wlog
dixonwille/wmenu
相変わらずCobra一強