双方向同期版scrapbox-duplicator
exported jsonを特定のgithubリポジトリに同期する仕組み
各scrapboxプロジェクトにおいて、commit + pushとpull相当の操作を定期的に実行する
pullする時に、フィルタをかけられるようにする
Obsidianの3rd party同期システムがこういうやり方だったのが、アイデアの元
push/pullを普通にやる
ここでは、プライベートなページを見られても良い人のみ招待する
pushは普通にやる
pullするときは、private.iconを書いたものをフィルタする
privateな情報は隠しつつ、自分のprojectを井戸端的な場所にできたらおもろい
万が一荒らされたら、public側からのcommitを全部revertするだけで良い
もしくはpublic側からのcommitをプルリクエストにして、承認してからマージするようにしてもいいかも
特定の人の編集だけ無視しよう…と思ったらJSONに編集者の情報は出てないのか…
追加された?
リリースノート、更新止まってたけど更新されたんだ
エクスポートJSON、割と不完全だな…
嬉しいところ
全プロジェクトで編集ができる
現状のscrapbox-duplicatorはコピー元プロジェクトしか編集できず、コピー先は上書きされる
新しい仕組みなら、どっちを編集しても良い
実装
課題(たぶん解決できる)
Conflictをどう処理する?
別にコードとかじゃない自然言語なので雑に強制マージしちゃって良い気がする
[conflict.icon]
をつけてdiffを残す?
json上のページの順番が変化するので、差分を上手く扱えない?
これは、gitで扱う前にjsonを各ページで別々のファイルにバラすのが良さそう
ページタイトル変更 / ページ削除をどう扱う?
各ページにuniqueなIDをつける
元からついてそう
"pages":[{...,"id":"6371325095071a001d61a1e6"...
そのIDと、各プロジェクトにおけるpage ID(タイトルを変えても変わらない)を紐づけるテーブルを用意する
新しいIDはなぜ必要??
page IDがjsonに含まれていないと思っていたが、含まれているのなら不要か
タイトルが変わっていたら、それもcommitとして反映させる
って感じで行けるかな
課題(未解決)
scrapboxプロジェクトをexportしてimportすると行リンクは切れるので
これ、どうしようもないのかな..?
ページをimportしないと行idは確定しないが、importした後では行リンク参照を変えられない
詳細情報付きのエクスポートをしても行IDの情報はついてないんだなぁ
今日、ベクトル検索で行リンクを出そうとしてて、行IDの情報がないことに気づいた
まあまあ処理は面倒だけど、実現可能性はありそう
結構違うものになるので、新しいrepoを作ろうかな
いいね!
scrapboxのexport APIで良い気がする
管理者がいるからそれでいいのか、そういやそうだ
pullはimport?
+1
この仕組みがあれば「ローカルで動くScrapboxが欲しい」も実現できるのでは
public側でページを作成するとどうなるのだろう
public->privateの際 [public.icon]
がなければ強制的につける?