sb2md - Scrapbox ページを Markdown に変換する CLI

| 2 min read
Author: masahiro-kondo masahiro-kondoの画像

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

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み(2022-12-08)
  2. 直感が理性に大反抗!「モンティ・ホール問題」(2022-07-04)
  3. Nuxt3入門(第4回) - Nuxtのルーティングを理解する(2022-10-09)
  4. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する(2022-10-28)
  5. Podman Desktopがv1.0になったのでwindows版を試してみたところ、気付いたらv1.1に上がるくらいに機能豊富だった話(2023-06-09)
  6. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する(2022-09-25)
  7. VS Code で .NET MAUI の開発環境を構築する(macOS/iOS)(2023-08-14)
  8. Pytestを使ってみる(その2:VSCode拡張機能編)(2023-03-05)
  9. GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する(2023-01-16)
  10. 統計学で避けて通れない自由度の話(2022-06-20)