Scrapbox記法をMarkdownに変換するライブラリをRustで書いた
Scrapboxを雑な技術メモ置き場として常用している。一方でZennはそこで書き留めたメモを整理してまとめる場所として使っている。
そこで問題になるのがScrapbox記法で書いたメモをZennのMarkdownに変換するところである。
これまでは下記のGo製のCLIツールを使っていたがコードブロックの処理やリスト、その他一部のリンクがうまく変換できないことが結構あって地味なストレスであった。
そこで今回Rustの勉強も兼ねてScrapbox記法をMarkdownに変換するツールを書いてみた。
CLIとして使うなら下記のような感じでインストールして
cargo install --git https://github.com/YuheiNakasaka/sb2md-rs --bin sb2md_cli
こんな感じで使う。sb2mdと同じ使い方である。
sb2md_cli razokulover-tech-memo/scrapbox記法をmarkdownに変換するparserをrustで書く
またライブラリとして使うならcargo.tomlに下記のように依存追加するとインストールできる。
[dependencies]
sb2md_converter = { git = "https://github.com/YuheiNakasaka/sb2md-rs" }
すると下記のようにScrapbox記法をMarkdownに変換できる。
use sb2md_converter::ToMd;
fn main() {
let text = "- this is a [* test]. In details, [https://example.com/ link] should be shown. [https://scrapbox.io/files/test.png]";
let md = ToMd::new(text.to_string()).convert();
println!("{}", md);
}
自分用のツールとして作ったのでcrateとして公開してない。もし要望が発生したりすればやろうかなくらいな感じ。バイナリ配布にしても同様。
crossというツールとGitHub Actionsを使ってクロスバイナリ配布もやろうと思ったがOpenSSL周りのエラーが発生してしまい面倒になったのでやめた。これも要望があればやるか...という感じ。
あとは今後やってみたいこととしてはWASMに変換してwebベースのScrapbox to Markdownのページを作ってもいいかなと思っている。ただしうまいこと依存関係を処理しないとreqwestのせいで爆重のWASMが生成されると思うからコンバータ部分だけ分離する必要がありそう。この辺詳しくないので後のお楽しみにしておく。
[追記] 書いた↓
その他何かあれば@razokuloverまでどうぞ。
Discussion
コメント失礼します。
実はCosense(旧Scrapbox)を開発したエンジニアが書いた、変換ツールがあります、かなり古いですが、少しは役にたつかもしれません。