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