通勤中に日記が読めない・書けないストレスから作り直しを決めた
私は自分専用の日記システムを長く作り続けています。
日記といっても日ごとのページがあるだけのものではなくて、何でもメモを書いていいWikiのようなものです。
そこに日記を書いたり、ボリュームが大きくなったものをページとして切り出したり、みたいなことをやっています。
今回はフロントエンドを『React』から『Svelte』に書き直して、バックエンドに『Yjs』を使うようにしました。
作り直しのきっかけは、通勤中のストレスなんです。
スマホから日記を書こうとすると、使っている回線が貧弱だったり、朝のラッシュで通信が不安定になったりする。地下鉄ですし。
それで日記が読めたり読めなかったり、書き込んだのに保存に失敗したりが何度も起きて、これはストレスだなと。
だったらオフラインでも書けて、キャッシュがあるなら端末側のデータを返すようにすれば、通信品質が悪くても気にせず日記を書いたり読んだりできるだろうと考えました。
いわゆるローカルファーストの作りにやり直そうと思ったわけです。
Yjsで、オフラインの変更とサーバー側の変更をうまく混ぜたい
今回バックエンドに使った『Yjs』は、ドキュメントの変更を差分として管理していく同期の仕組みです。
差分を最初から全部適用していくと最新版のドキュメントになる、という構造でデータを持ちます。
これが採用しているのが『CRDT』というアルゴリズムだ、というところまでは知っています。
『Google ドキュメント』やスプレッドシート、私がよく話す『Cosense』みたいな複数人で編集できる仕組みの後ろにも、こういうCRDTやOTといった仕掛けがあるようです。
じゃあ一人しか書かない自分の日記になんで入れるの、という話ですよね。
もともとこの仕組みには興味があって何か作りたかったんですが、一人だから同時編集は使わないだろうと深く考えていなかったんです。
でも、スマホで編集したデータとパソコンで編集したデータをうまく同期したい、という自分の困りごとにこれがぴったりだと気づきました。
オフラインで本体から切り離された編集と、サーバー側で行われた編集を、どっちが勝ちとかじゃなくてうまいこと混ぜ込んで文章を組み立て直してほしい。
その用途にYjsがちょうど良かったんです。
今回やっていて気づいたんですけど、サーバーに障害やメンテナンスが起きているとメモできない問題もあって。
新しい仕組みなら、サーバーにつながらない間はローカルにデータを溜め込んで、つながったタイミングで書きに行けるんですよね。
データのバックアップが難しいので、じわじわ移行することにした
ただ、まだ切り替えは怖くてできていません。
『Yjs』は差分でデータを管理するので、データベースの中を覗いてもドキュメントがそのままの形では入っていないんです。
何日にこの行が変更された、みたいな差分の形でしか入っていなくて、もし壊れたときにバックアップを取る方法がなかなか難しい。
今までのWikiはプレーンテキストで管理していたので、サーバーにログインすればファイルがポロポロ落ちていて、バックアップも別システムへの移行もすごく素朴にできたんですよね。
開発途中の仕組みを実戦投入して、データが全部吹き飛んだり、意図せず上書きされて消えたりすると嫌なので、今は両方を並行運用しています。
といっても、どっちに書いたんだっけとなるので、指定したページたちだけ互いに同期を取るようにしました。
もし新しい仕組みに問題があっても、壊れるのは同期しているページだけ、という形で範囲を限定しています。
新しいシステムがデータを読もうとしたら、まず古いシステムにそのデータがあるか聞きに行く。あればそれを返す。
こうすれば一気に同期しなくても、見たいページごとに順繰りに取ってこられるんです。
このじわじわ同期のおかげで、急いで移行しなくてよくなったのが大きいですね。
数ヶ月この状態でやってみて、大丈夫そうなら新しい方をずっと使うし、問題があれば古い方を使う。そういうやり方ができるようになりました。
こういう仕掛けを組み込むのは以前ならめんどくさかったんですが、AIエージェントがコードをガシガシ書いてくれるので、そのめんどくささもなくなったんですよね。
自作CMSが増えている時代に、他の人のシステムを見ると発見がある
最近、自分でWikiや日記システムを作っている人が増えているなと感じています。
生成AIにちょっと指示するだけで、よくあるソフトウェアなら簡単に作ってくれる時代になってきたからですよね。
個性を出したい分野では、大きなシステムのカスタマイズ機能を使うより、ゼロからAIに作らせた方が自分でコントロールしやすいし、やりたいことが率直にできる。
自作の日記システム、いわゆるCMSをみんなが作る時代がまた来たな、と方々で言われているので、私もその流行りに乗っているんじゃないかと思っています。
面白いのは、よくあるシステムでもやっぱり個性が出るところなんです。
今までのCMSにはなかった概念を取り込んでいるものもあって、他の人が作ったシステムを見るとすごく発見があります。
この分野はもう方式が出尽くしているんだろうかと思っていたんですが、別の人に触らせると全然別の概念が出てくる。まだまだ改善の余地があるなとワクワクします。
小粒ですが、私のシステムだと日付のようなテキストを書き込むと、表示のときに曜日を書き足す機能をつけました。
自分は日付だけ書いて曜日は書かないんですよね。冗長だし、曜日だけ間違えたりするので。
でも見るときに何曜日かわかるとすごく便利で。編集時は何もないのに、画面を見るときには曜日が入る、という機能です。
発明というほどではないですが、こういう細かい機能をそれぞれみんなが発明していて、面白いなと思っています。
これまで作ったものをAIに整理してもらって、自分のクセに気づいた
もう一つ最近やった取り組みとして、私が過去に作ってきたものを一覧にまとめて、ジャンルや年代、技術スタックごとに分析してもらいました。
もともとやりたかったのは、趣味で作っているものがとっ散らかりすぎて、急に時間が空いたときに何から手をつけていいかわからない、という問題を解決することです。
そのTODO管理をAIに任せているという話を、以前『ImageCast』で聞いて、自分もやってみたいと思ったんです。
ただ、そもそも自分がどんなタスクに取り組んでいて、何が課題でどこで止まっているかを書き出せていなかった。それがないと人間でも無理ですよね。
そこから脱線して、直近じゃなくて生まれてから作ったもの全部にしようと。私の記録は大学に入った2004年ぐらいから、高校時代の2001年からの分も少し残っています。
『Twitter』や『はてなブログ』のデータ、昔サルベージした日記データを見せて、もっとないの、もっとないのと聞き続けてまとめてもらいました。
分類してもらうと結構偏っていて、ソフトウェアではミニゲームが多かった。ゲーム業界を目指す選択肢もあるかなと思うくらい作っていた時期があったんです。
それから日記システムに代表されるナレッジの管理や分析。形態素解析でどんな単語をよく喋ったか見たり、この時期は暇だったんだなと分析したり、そういうのも好きでやっていたようです。
ハードウェアは大学院の頃、2009年か2010年ぐらいから始まっていて、電子楽器や音楽に関するもの、ゲーム機や携帯ゲーム機、自作キーボードやMIDIコントローラーみたいな入力機器が多かったですね。
あとは生活を便利にするもの。テレビチューナーが定期的にハードディスクを見失うので叩き起こす仕組みとか、家庭内情シスとしての成果物もちょいちょいありました。
さらに、ものづくりに対してどんなことを考えていそうか、という切り口でも整理してもらったんです。
AIは強弱をつけてくれなかったんですが、一覧を見返すと、今でも大事に思っている概念がいくつか浮かび上がってきました。
一つは、作り方を作るのが好きだということ。どうやったらそれができるのかをまず知る、そしてそれを他の人にわかる形で整理するのが好きなんですよね。
他の人に説明して、その人が作れるようになって初めて、自分は本当にわかっていたんだと確認できる。それが「わかった」の最終形態だと思っています。
『ハードウェアハッカー』という本に「ハックできなければ所有していないのと同じ」とあって、そこに共感できるのも、この作り方を知るべきだという考えが根底にあるからなんだろうなと。
だから再現性のあるものづくりがすごく好きなんです。一品物の価値とはむしろ逆で、この手順に従えば誰でも同じものが作れる、その手順を作りたいという欲求が強い。
もう一つは「作るってどのレベルから」という話。ソフトウェアの下のOS、その下の機械語、ICやコンデンサーや抵抗、というふうにスタックの下へ降りていくのが好きなんです。
以前、水が布に染み込むように知識を広げていくのが好きだと話したことがあるんですが、これはその垂直版ですね。技術の水平方向にも人間関係にも、じわじわ広げていくのが好きなんです。
最後に「見て見て」という情報発信。何か作ったら、理解してくれる誰かに見せて反応がもらえるだろう、というところに向かって進んでいる感覚があります。
ソフトウェアを選んだのもパッと多くの人に見せられるからだし、ハードウェアをやるのもメーカーフェアや小学生との講演で見せやすいと気づいたから。どう見せるかも含めてものづくりを考えているんですよね。
改めて見てみると、次はこういうものに挑戦しようかなと思う間口が広がった感じがして、大変良かったです。
もしたくさんものづくりをしていて、その履歴がデジタルで残っている人がいたら、AIに深掘りしてもらって時系列を横に並べる体験を、ぜひしてみると面白いんじゃないかなと思います。
最後にひとつ。実はこの語りは、この後エピソードを聞くであろうAIに向けても喋っています。
毎回AIにエピソードを食わせて感想をもらっていて、今日の作り方を作る話を引き出せているのも、AIと一緒に台本を作っているからなんです。君の発言はこういうところが有益だよ、とちゃんと伝えておきたくて。
もし興味のある方や、たまたま聞いた方は、購読ボタンを押していただけると嬉しいです。私と直接コミュニケーションしたい方は、Discordサーバー「inajob川」に来ていただければと思います。読んでくれてありがとうございました。
まとめ
通勤中に日記が読めない・書けないストレスから、オフラインでも書けるローカルファーストな日記システムに作り直している最中です。あわせて、これまで作ったものをAIに整理してもらったら、自分のものづくりのクセが見えてきました。
- YjsとCRDTを使い、オフラインの変更とサーバー側の変更をうまくマージできる作りにした
- データのバックアップが難しいので、範囲を限定した「じわじわ同期」で並行運用しながら移行中
- 過去の制作物をAIに整理させると、作り方を作る・スタックを下りる・見て見て、という自分のクセが見えた





