generated at
双方向同期版scrapbox-duplicator
exported jsonを特定のgithubリポジトリに同期する仕組み
各scrapboxプロジェクトにおいて、commit + pushとpull相当の操作を定期的に実行する
pullする時に、フィルタをかけられるようにする
Obsidianの3rd party同期システムがこういうやり方だったのが、アイデアの元blu3mo
具体的な使い方のイメージ(/blu3mo + /blu3mo-public
/blu3mo (private) :
push/pullを普通にやる
ここでは、プライベートなページを見られても良い人のみ招待する
/blu3mo-public (public):
pushは普通にやる
pullするときは、private.iconを書いたものをフィルタする
これが一番やりたい事blu3moblu3moblu3mo
Scrapbox as SNSのあり方の一つとしてとても面白いと思っている
privateな情報は隠しつつ、自分のprojectを井戸端的な場所にできたらおもろい
万が一荒らされたら、public側からのcommitを全部revertするだけで良い
もしくはpublic側からのcommitをプルリクエストにして、承認してからマージするようにしてもいいかもnishio
特定の人の編集だけ無視しよう…と思ったらJSONに編集者の情報は出てないのか…
追加された?inajob
リリースノート、更新止まってたけど更新されたんだ基素
エクスポートJSON、割と不完全だな…
嬉しいところ
全プロジェクトで編集ができる
現状のscrapbox-duplicatorはコピー元プロジェクトしか編集できず、コピー先は上書きされる
新しい仕組みなら、どっちを編集しても良い

実装
課題(たぶん解決できる)
Conflictをどう処理する?
別にコードとかじゃない自然言語なので雑に強制マージしちゃって良い気がする
[conflict.icon] をつけてdiffを残す?bsahd
json上のページの順番が変化するので、差分を上手く扱えない?
これは、gitで扱う前にjsonを各ページで別々のファイルにバラすのが良さそう
ページタイトル変更 / ページ削除をどう扱う?
各ページにuniqueなIDをつける
元からついてそうnishio
"pages":[{...,"id":"6371325095071a001d61a1e6"...
そのIDと、各プロジェクトにおけるpage ID(タイトルを変えても変わらない)を紐づけるテーブルを用意する
新しいIDはなぜ必要??nishio
page IDがjsonに含まれていないと思っていたが、含まれているのなら不要かblu3mo
タイトルが変わっていたら、それもcommitとして反映させる
って感じで行けるかな
課題(未解決)
行リンクが破綻する
scrapboxプロジェクトをexportしてimportすると行リンクは切れるので
これ、どうしようもないのかな..?blu3mo
ページをimportしないと行idは確定しないが、importした後では行リンク参照を変えられない
詳細情報付きのエクスポートをしても行IDの情報はついてないんだなぁnishio
今日、ベクトル検索で行リンクを出そうとしてて、行IDの情報がないことに気づいた
テキストフラグメント付きURLを使えば解決できそうblu3mo
まあまあ処理は面倒だけど、実現可能性はありそう

結構違うものになるので、新しいrepoを作ろうかなblu3mo


いいね!wogikaze
GitHub Actionsでcommit+push,pullはできるのかな?
commit+pushは井戸端には管理者がいないより答えは単に全ページのAPIを順番に叩いているだけ /takker/scrapbox-external-backup でやるとして
scrapboxのexport APIで良い気がするblu3mo
管理者がいるからそれでいいのか、そういやそうだwogikaze
pullはimport?
+1blu3mo

この仕組みがあれば「ローカルで動くScrapboxが欲しい」も実現できるのでは
気になるblu3mo

public側でページを作成するとどうなるのだろうbsahd
public->privateの際 [public.icon] がなければ強制的につける?