blocknoteの共同編集を試す
from 2025/03/08
inajob.icon
バックエンドをLadeに戻した
多分無料プランになってそうなので、15分で落ちないほうに戻した
作り方
サーバ側
以下をそのままデプロイするだけ
https://github.com/yjs/yjs-demos/tree/main/demo-server
認証などがないので、放置すると危険そう
ほかの人もyjsのサーバとして別のサービスから書き込んだりできてしまう
Originの制限くらいはした方がよさそう
クライアント側
ViteでセットアップしてApp.tsxを以下に書き換えるだけ
code: typescript
import "@blocknote/core/fonts/inter.css";
import { useCreateBlockNote } from "@blocknote/react";
import { BlockNoteView } from "@blocknote/mantine";
import "@blocknote/mantine/style.css";
import * as Y from "yjs";
const doc = new Y.Doc();
import { WebsocketProvider } from "y-websocket";
const provider = new WebsocketProvider("wss://yjs-server-36qw.onrender.com", "blocknote-test-room", doc);
function Editor() {
const editor = useCreateBlockNote({
collaboration: {
provider,
fragment: doc.getXmlFragment("document-store"),
user: {
name: "My Username",
color: "#ff0000",
},
},
});
return <BlockNoteView editor={editor} />;
}
function App() {
return <Editor />;
}
export default App
blocknoteにこだわらないなら以下も簡単に動かせる
https://github.com/yjs/yjs-demos/
何もわからず組み込んでるけど、これで複数ページのWikiみたいなのを作るのはどうするのが良いのか?
ページごとに別のroomにするだけでok?
from 2025/03/07
inajob.icon
https://inajob.github.io/blocknote-test/dist/
リベンジ
外にバックエンドサーバを立てた
認証なしで何でも書き込めるので後で消します
すごいsta.icon
同時編集、自分でもつくれたら幅広がるだろうなと思いつつ、まだ手を出せてない
一瞬そう思うのでたまに作りたくなるんですが、個人の知的生産でツールでこの機能が必要なことはあまりないような気もして、深入りしないようにしてますinajob.icon
今回は楽にできそうだったので試食です
ソースコードほとんどサンプルのままなので、思った以上に簡単ですinajob.icon
おお、そうなんですね、自力でつくったのかと思ってましたsta.icon
これですinajob.icon
GitHub - TypeCellOS/BlockNote: A React Rich Text Editor that's block-based (Notion style) and extensible. Built on top of Prosemirror and Tiptap.
このレベルのライブラリがあるのすごいsta.icon
共同編集のコアはyjsを使っているみたいinajob.icon
バックエンドはLadeをつかってみたが、これいつ課金されるのかドキュメントを見てもわからない・・
Cloud built for developers | Lade
急に請求着ても怖いし早めに消します・・
CLIからいくつか操作をすると、ちゃんとFreeプランのAppになっていたので、心配しなくてよさそう
無料のサイズのAppはいくらでも作れるのか?料金体系はいまだ不透明
Ladeって誰も使ってなさそう、新しいのか?無名なのか?
nodejsが動けば何でもよいので後で別のバックエンドに切り替えます
バックエンドをRenderに変更した
15分アクセスがないとアプリが落ちるのでデータが飛ぶと思われる
コピペ永続化bsahd.icon
スラッシュコマンドで署名できるようにしたい(inajob)
スラッシュの必要はないな、Ctrl+iで署名できるといいな
blocknote+yjsはさっと作るには便利なのだがいろいろ心配あり
データの永続化
LevelDBの永続化機能を利用することは出来る(このバックエンドでは使っておらずオンメモリのみ)
将来的な互換性
Yjs自体の構造
Yjsの上のJSONの構造
スケール性能
バックエンドは今はLeveDB(https://github.com/google/leveldb)
GROWIとかも共同編集の仕組みがあるが、共同編集したい文書ごとにHackMDを起動して共同編集が終わったらWikiに書き戻しているので、何か課題があるのではないかと思っている(思っているだけ)
お、一度消えたかと思ったけど、以前アクセスしたブラウザのタブでリロードしたら復活した?
CRDTの仕組みで、ブラウザに残ってたデータが同期された?
from 2025/03/06
inajob.icon
これってみんな見えるのかな?
https://inajob.github.io/blocknote-test/dist/
WebRTCが動いてるんですが、これって何の設定もなくほかの人のブラウザと通信できるんだったか、、?inajob.icon
そういうものではなさそう、同じパソコンで2つブラウザを開いたら通信できてる
ふむ、シグナリングサーバというのを用意する必要がありそう
blocknoteを使うと共同編集できるリッチテキスト共有系のWebサービスがサッと作れそうだと思った
BlockNote - Javascript Block-Based React rich text editor
GitHub - TypeCellOS/BlockNote: A React Rich Text Editor that's block-based (Notion style) and extensible. Built on top of Prosemirror and Tiptap.
基本機能はオープンソース
まだベータ版的な感じなので破壊的な変更はありそう
こんな感じで見えてるsta.icon
https://gyazo.com/e58ec6df3b21e1587ced28aa7e6e81c2
ありがとうございます。状況把握しましたinajob.icon