sb2md - Scrapbox ページを Markdown に変換する CLI
Scrapbox の記法はシンプルでサクサク書けます。ただ、書いた記事をブログなどに転用する際 Markdown に変換するのがちょっと手間です。sb2md は Scrapbox のページを Markdown に変換するための CLI です。
GitHub - kondoumh/sb2md: CLI to convert Scrapbox page to Markdown
以前紹介した非公式 Scrapbox アプリでも同じことができますが、単機能のコマンドがあってもよいかということで Go で書いてみました。
リリースページから macOS / Windows / Linux のバイナリをダウンロード可能です。
https://github.com/kondoumh/sb2md/releases/latest
Go の環境を構築している場合は、以下でもインストールできます。
go install github.com/kondoumh/sb2md@latest
プロジェクトとページタイトルを /
区切りで指定すると標準出力に Markdown 変換されたテキストが出力されます。
sb2md <scrapbox project>/<title>
以下のページを出力する例です。
https://scrapbox.io/kondoumh/Sandbox
$ sb2md kondoumh/Sandbox
元ページのイメージ。
Markdown 変換後のレンダリングイメージ。
Scrapbox には見出しという概念がないので、文字サイズ修飾 *
の数で以下のようにマッピングしてます(行頭でマッチしたケースのみ変換)。
文字サイズ | 見出しレベル |
---|---|
**** (4以上) |
# |
*** |
## |
** |
### |
* |
#### |
コマンドオプションで --hatena (-n) フラグをつけると、ページ中のリンクをはてなブログの埋め込み形式で出力します。
- オプションなし :
[kondoumh (kondoumh) · GitHub](https://github.com/kondoumh)
- オプションあり :
[https://github.com/kondoumh:embed:cite]
Usage には書いてないですが、sbgraph のパッケージを使っているので、Cookie を環境変数に指定するとプライベートプロジェクトのページも変換できます。
SB_COOKIE_ID=connect.sid
SB_COOKIE_VALUE=xxxx
sb2md private-project/hoge
制限事項としては以下があります。
- インデント内の引用・テーブル・コードブロックは抽出されず、そのままの行が出力されます
- Gyazo の画像は PNG 形式決めうちで出力してます
Scrapbox はアウトライン機能が優れていて、テキストだけでなくテーブルやコードブロックなどの要素もインデントで階層化できます。今はインデントされたテーブルやコードブロックまでは手抜きして解析していません。対応するとしても Markdown では表現できないためフラットに展開することになります。
ちなみに scrapbox-parser という NPM パッケージは、ネストしたテーブルやコードブロックも抽出できます(この記事書くまで知りませんでした)。
GitHub - progfay/scrapbox-parser: Scrapbox notation → JavaScript Object