Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

ScrapboxをUNIX的に縮退したScrapbogusを自前で動かしている

こういう記事を読んだ:

uma-the390.hatenablog.com

まず前提として、自分はScrapboxのヘヴィーユーザで、加えて会社でもScrapboxが大々的に使われている。いまプライベートScrapboxのページ数を数えてみたら、974ページあった。だからこの記事はScrapboxをdisってやろうという類のものではないことを承知してほしい。

この記事を読んだ感想としては、まあそうですねという感じ。同僚もだいたいScrapboxになんでも書いている印象がある。自分は普段から技術的な自由研究みたいなことをなんでもScrapboxに書いているので、そうだよね、という感想になった。

こういうページが無限にある

技術的なメモに限らず、普段の日記とか、ブログ未満のことをなんでもここに書いて、たまに分量が溜まったらブログの記事として消化したりしている。

りんごとしか書かれていない謎のページもある

このシナノゴールドのページは意味不明だけれど、おそらく帰省したときに食べたものがおいしかったのでメモしたのだと思う。

Scrapboxによる技術(や暮らしのあらゆる)メモの課題感

ところで、Scrapboxはページが巨大になってくるとどんどん重たくなってしまうという苦しみがあって、長いページを閲覧するのは苦行に近いところがある。

加えてブラウザでしか動かないという苦しみもある。ブラウザがあれば動くというのはありがたいのだが、普段のプログラミング環境であるEmacsで書ければな〜という想いもあり(例えば、日本語IMEをDDSKKに一本化できる)、Emacs用のscrapbox-modeを書いたこともあった:

github.com

だがそもそもScrapboxはページ更新系のAPIをあまり持っていないので、コマンドライン経由の編集には限界があるという問題があり、最終的にこのモードは使わなくなった。

Scrapbogusのご紹介

ある日自分は考えた。ようするに検索とクロスリファレンスとコードシンタックスハイライトが使えれば自分は十分なのだ。そこで、UNIX的?な以下の技術スタックを用いて、ScrapboxのパチモンであるScrapbogusを組み上げた(組み上げたといっても単一のプロダクトを書いたのではなく、既存のツールを組合わせた感じ)。

  • 検索
    • ripgrep (Emacsから利用可能)
  • コードシンタックスハイライト
    • markdown-mode(ようするにfoobar.mdを編集するだけ)
  • 他マシンへの共有
    • Resilio Sync
      • 昔はBittorrent SyncとかBTSyncと呼ばれていた、P2P的なファイル共有(同期)ツール
      • 特定のディレクトリの内容を他のマシンと同期する
      • LinuxやFreeBSDにノードを常駐させることができるので、常にこのノードがファイルを保存してくれる
    • Gitでもよさそう
  • リンク機構
    • Etags (Emacs標準搭載のタグをジャンプさせる機能)
      • etags --regex='/^# +\(.+\)$/\1/' *.md と書くことで、markdownファイルのh1見出しが自動的にインデックスされる。あとは本文中からM-.でジャンプできるようになる
      • 定期的な更新が必要
  • Docusaurusとかに入れるとかっこいいHTMLにできる

ディレクトリツリーは 以下のようになっている:

% tree
.
├── Scrapbox.md
├── TAGS
├── about.md
├── docusaurus.md
├── etags.md
├── manual.md
├── resiliosync.md
└── scrapbogus.md

0 directories, 8 files

例えばabout.mdには以下のような内容が保存されている:

# About

[scrapbogus]とは、[Scrapbox.md]をいい具合にUNIX的に縮退させてしまったツールのこと。最終的にEmacsのTAGSでも良いんじゃないの?という願望からうまれた。

## できること

- ページ作成: 普通にページを作成すればよい
- シンタックスハイライト: markdownなので勝手にEmacsがやってくれる
- 検索: rgなどのテキスト全文検索機能を使えばよい
- リンク: [etags]を使えばよい
  - `M-.`, `M-,` で高速移動できる
- 同期は、btsync[Resilio_Sync]やgitで行えばよい

[]でくくっておくと、そこで単語境界が区切れるので、その上でM-.すれば該当ページがあればジャンプできる。

当然だがマシンの上で全部完結するので爆速で、ストレスに感じたことはまったくない。便利なので真似してほしいけど、Scrapboxも好きなのでほどほどに真似してほしい。

自分の場合は、技術メモは一瞬で手元で検索したいという欲求があるので、技術メモとしての目的では満足している。

できないこと

もちろん、マシンの上で全部やることによって生じるデメリットもある。

  • 同時編集ができない
    • これは宿命的な問題で、同時編集は当然できない。多人数で使うといった用途にはScrapbogusは不向きで、普通にScrapboxを使ったほうがいい。
  • 画像貼り付けに難がある
    • Emacsの謎のテクノロジーによっていちおう画像は貼り付けられるし閲覧もできる。がScrapboxほどの便利さはない。
  • トラックバック的なビューが無い
    • Scrapboxでは「このページにリンクしているページ」という表示が可能だが、Scrapbogusだと不可能。がんばって全文検索することになる。
  • Scrapboxほど気楽に箇条書きができない
    • これは一長一短かもしれない。

まとめ

自分はこういうメカっぽい仕組みが好きなのでこういう仕組みを自分で作ることに喜びを覚えるけれど、世の中大多数の一般的な人々はそんなことないと思うので素直にScrapboxを使ったほうがよさそう。Scrapboxのほかにも色々と多機能なツールがあるけれど、正直諸君らそんな機能使えんやろ?活用せんやろ?みたいな気持ちがあるので無視している。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?