Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Next.js+yjs+BlockNoteでNotionライクな最高の共同編集エディタを作ろう
Search
imaimai17468
August 22, 2024
0
2.9k
Next.js+yjs+BlockNoteでNotionライクな最高の共同編集エディタを作ろう
imaimai17468
August 22, 2024
Tweet
Share
More Decks by imaimai17468
See All by imaimai17468
コーディングチェックの自動化がしたい!
imaimai17468
4
1.1k
型パズルを好きになるために、競プロを型システムだけで解いてみることにした
imaimai17468
5
600
フロントエンド設計の所感 1年目
imaimai17468
0
56
Silk Weave -未来研究大会発表資料-
imaimai17468
1
26
Next.jsでクエリパラメータを楽に扱おう nuqsを紹介!
imaimai17468
3
1.7k
TailwindCSSで学ぶ技術批判の気をつけ方
imaimai17468
7
6.6k
BlockNoteを布教するぜ
imaimai17468
0
34
Marp + Cursorによるスライド生成
imaimai17468
0
420
Next.jsにおけるLazy Loading
imaimai17468
0
560
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
246
12k
How to Ace a Technical Interview
jacobian
278
23k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
The Language of Interfaces
destraynor
158
25k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Unsuck your backbone
ammeep
671
58k
Visualization
eitanlees
146
16k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Building Adaptive Systems
keathley
43
2.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Thoughts on Productivity
jonyablonski
69
4.8k
Transcript
Next.js+yjs+BlockNoteでNotionライクな最高の共 同編集エディタを作ろう いまいまい 1
自己紹介 いまいまい (今井俊希) 初登壇 株式会社ゆめみ 新卒 フロントエンドエンジニア 2
リッチエディタの実装、枯れてない? 技術的知見が少ない Zennの検索結果 リッチエディタ 9件 WYSIWYG 19件 開発停止&TS未対応多数 3
現状 Mantine Editor.js TipTap 大体見た目同じ 10年くらい前から変わってない 4
現時点でのベストプラクティス? Zennやしずかなインターネット メニューバーは非表示 markdown入力でスタイル反映 5
なんかいいのないの? 最近使った中で良いテキストエディタ... 6
あるじゃん 7
そんなあなたに BlockNote 8
必要なのはこれだけ! hooksでインスタンスを作ってコンポーネントに渡すだけ グラフ描画とかでよく見るパターン import "@blocknote/core/fonts/inter.css"; import { useCreateBlockNote } from
"@blocknote/react"; import { BlockNoteView } from "@blocknote/mantine"; import "@blocknote/mantine/style.css"; export default function App() { const editor = useCreateBlockNote(); return <BlockNoteView editor={editor} />; } 9
カスタマイズも豊富! ツールバーやカーソルなどの形や色の変更 カスタムブロックも定義可能! 独自のコードブロックやアラートなど 10
でも、controlどうするの? どうせ面倒でしょ? 11
(前置き) 型構造は複雑 type Block = { id: string; type: string;
props: Record<string, boolean | number | string>; content: InlineContent[] | TableContent | undefined; children: Block[]; }; children: Block[] : 無限入れ子 12
ちゃんと詰まらないように変換できます 13
入出力は簡単! Markdown / HTMLで入力・出力できます! ex) Markdownの場合 // INPUT: in first
rendering (ex. useEffect) const blocks = await editor.tryParseMarkdownToBlocks(e.target.value); // OUTPUT: Markdown export handler const markdown = await editor.blocksToMarkdownLossy(editor.document); 14
共同編集エディタにしてみよう(魔改造) 15
yjsとy-webrtcについて yjs: yjsはリアルタイムコラボレーションのためのJSライブラリ CRDT(Conflict-free Replicated Data Type)を使用しており、競合を自動的に 解決 y-webrtc: yjsのためのWebRTCプロバイダ
16
設定方法 Yjsとwebrtcの設定をして const doc = new Y.Doc(); const provider =
new WebrtcProvider("my-document-id", doc); ブチ込む! const editor = useCreateBlockNote({ // ... collaboration: { provider, fragment: doc.getXmlFragment("document-store"), user: { name: "My Username", color: "#ff0000", }, }, }); 17
BlockNote + yjsの環境は1コマンドで構築できます! npx create-liveblocks-app@latest --example nextjs-yjs-blocknote-advanced 18
BlockNote、魅力的じゃない? お知らせ 私が所属している株式会社ゆめみは複数のアフタートークイベントをやります! 奮ってご参加ください! 19