Kentaro Imai

April 2023

ノートアプリのおおまかな設計段階ですでに悩んでいる

先月部屋を片付けた後、Riverpodをさらっと勉強したりしたが、取り立てて面白い話もない。

その後、サーバサイドの勉強をしていた。

作ろうとしているアプリはノートアプリなのでクライアントだけで完結するアプリにしても良いのだが、マルチデバイス対応をするつもりなのでやはりサーバベースで作りたい。この辺りは意見が分かれるところなのかもしれないが……。

もしかすると例えばRealmなどを使って作るのが正解なのかもしれないが、Realmのことはよく分かっていないし、こういうコア部分をプロプライエタリなもので賄うのは怖い。

そういう訳で、サーバサイドを書かねばならない。

問題は、僕がサーバサイドのコードを書いていたのはもう10年以上前ってことで、さすがに勉強をしなおさないといけないだろう。

そこで、当時はRuby on Railsをさわっていたが、もう随分前のことでもあるし、まっさらな気持ちでサーバサイドの技術を選ぶことにした。

とは言っても中々難しい。

  • MVCやその亜種をベースにしたサーバサイドのフレームワークがいろんな言語で出ているが、その中から選ぶなら以前使っていたRailsを選ぶのが一番楽な気がする。

  • 最近はJavaScriptをちょっと書いていたので、そういう意味ではJavaScript/TypeScriptのサーバサイドフレームワークのいずれかを使うのも良いかもしれない。

  • 一方で、実は僕には将来作りたいサービスがあって、それにはElixirPhoenixがフィットする気がしていて、そこに繋げる意味ではElixirPhoenixで作りたい。

で、とりあえず、やって損はないだろうということで、Elixirの勉強をしていたのが最近の話だ。

ただ、今悩んでいることは、ノートの整合性保持で、ここの部分の設計をどうすべきなのか、決めきれないでいる。

例えばウェブアプリであれば、ユーザはおそらくオンラインだし、オフライン編集ができなくてもユーザは納得してくれるだろう。オンラインであれば、おひとり様用ウェブアプリの場合、編集後即サーバにPOST/PUT/PATCH/DELETEすれば整合性の問題はほぼ起こらないだろう。

逆に、スマホアプリの場合、ユーザはオフラインでノート編集できることを期待する。ということは何らかのデータの競合解消ロジックが必要になる。

複数人で編集する場合はもちろん整合性の問題が起きるが、そうでなくても、ひとりが複数のデバイスから編集する場合、コンフリクトが起こる可能性は高い。

この整合性問題を解決するための技術がOT(Operational Transformation:操作変換)とかCRDT(Conflict-free Replicated Data Type)とか呼ばれるもので、この辺の知識が全く足りていない。

この辺の実装はJavaScriptで書かれているものが多い気がするので、もしかするとサーバサイドはそういうライブラリを利用してJavaScriptで書くべきなのかもしれない(折角Elixirの勉強をしていたところではあるが)。

ということで、サーバサイドを何で書くかということすら未だ確定できていないのである。

とりあえず、泥縄ではあるが、今からOTCRDTの勉強をしようと思う。ただ、例えばCRDTと言ってもいろんなやり方が提案されているらしいので、それらの中から自分のアプリに合ったものを選ぶ必要がある。

もし詳しい人がいたら、何らか情報をもらえると嬉しいです。

あと、あんまり大変なようなら、とりあえずは個人使用を想定したノートアプリなのだから、競合解消ロジックなしで一旦リリースしてから考えるということも考えてはいる。

部屋を片付けた話

先月、Flutterの本を読んだ後、部屋を片付けた。

僕はやっぱり生活が苦手な気がする。

大学生だった頃に薄々気付いてはいたのだが、おっさんとなった今も何にも変わっていない。

片付けは苦手だし、そもそもきっちりと間違いなく何かをすることが苦手である。書き間違えずに文字を紙に書くことが苦手だし、数を数えることも苦手だ。出掛ける前に何度も忘れ物に気づいて行ったり来たりするし、出掛けてもしばしば戻って鍵が閉まっているか確認するし、結局忘れ物があったりする。日常生活のほとんどが苦手な気がしている。

本やPCに囲まれて過ごすのが好きな僕は、断捨離やミニマリストが話題になった頃、全く自分に関係ないものと思っていたし、正直なところ今も断捨離という言葉は好きな言葉ではない(僕は物欲肯定派である)が、今回片付けをしているうちに、少しそういうものから学ぶべきなのかもしれないと初めて思った。

自分の大切に思っていることに物もお金も時間も最大限投入するために、その他をできるだけ切り捨てるのだ。生活というものを極限まで自分から取り除くと、生活が苦手であるということの悪影響を最小限に抑えられるかもしれない。

そんなことが頭に浮かんだりした。

でもとりあえずは何もしない。部屋は片付いたのだ。苦手な生活のことは当分考えたくない。

それに、部屋は片付いたがアプリは全くできていない。

今月からはアプリ開発に集中したい。