📝

Bluenote: オフラインでもデータ同期ができるメモアプリをリリースしました

2024/11/06に公開2

アカウント登録なし・オフライン状態でもデータ同期ができるメモアプリを作りました。
Web アプリではなくてネイティブアプリです。

ダウンロードはこちらから👇

https://play.google.com/store/apps/details?id=io.github.tomork.bluenote
https://www.microsoft.com/store/productId/9N6SQZF1WTP5

現在は Windows、Android 版のみの公開です。

デスクトップ
Android

機能概要

ざっくりまとめると、次のような特徴のメモアプリです。

  • マークダウンが使用できる
  • メモの表示スタイルを切り替えられる(チャット型、カード型)
  • Bluetooth でデータを同期する(!)
  • ごみ箱
  • ライト/ダークモード

この中で、特に独特な機能について書いていきます。

メモの表示スタイルを切り替えられる(チャット型、カード型)

Bluenote では、メモの表示形式を以下の2種類から選ぶことができます。

Monologue

Monologue

チャット風の UI です。チャット風ですが、自分しか書き込めないので独り言(Monologue)モードです。

Card

Card

カードを並べる形のシンプルな UI です。新しいメモが上に来ます。

普段書くメモは Monologue がいいけど、TODO とかは Card で表示したい、というような場合も考えられるので、スレッド単位でこれらのスタイルを切り替えられるようになっています。見た目が変わるだけなので、スレッド作成後からでも何回でも変更できます。

Bluetooth でデータを同期する

オフラインでどうやって同期すんねん、という話ですが、Bluenote は Bluetooth を使用します(このあたりの技術的な話は後述)。

基本的に端末それぞれでデータを管理する形なので、メモアプリとしてはそもそも単体・オフラインで動きます。
アプリ上の同期実行ボタンを押したときに、近くの端末を探して同期を実行します。

Bluetooth を使用する関係上、デバイスが近くにあるときしか同期ができません。じゃあ近くにないデバイスとは同期ができないかというと、そうではありません。想定としては、ユーザ自身に媒介させます。(笑)

どういうことかというと、今近くにないデバイスを使用するときにもスマホは持ち歩いているはずなので、スマホにすべてのデータを同期させておいて、ユーザが持ち歩けばいいという考えです😁
データに質量はないので、持ち歩くコストは 0 です。(適当)

初期設定

他の端末とデータを同期するには、あらかじめペアリングなどの設定をしておく必要があります。
逆に言えば、この設定さえしておけばボタンを押すだけで同期が可能です。

設定方法としては、同期を設定したいデバイス2つを用意して、それぞれ初期設定の画面を開いておきます。

片方で設定受け付けを開始、

接続受付

もう片方でスキャンを実行してそのデバイスを探します。

スキャン

設定受け付け中のデバイスが見つかったらそれをクリックします。

完了の表示が出れば設定完了です。

なぜ「Bluetooth」なのか?

ハード的なめんどくささもありそうな Bluetooth をわざわざ使う理由についてつらつら書いていきます。他の競合技術との比較も。

サ終の心配がない、データをアップロードしない、ログインが要らない

一番のメリットはこれだと考えています。
上述の通り、端末自身でデータを管理しているので最悪私がアプリの更新をやめたとしても使い続けられます。また Bluetooth で通信するのでどこかのサーバにデータをアップロードすることもありません。
あと、アプリを使うのにログインする必要もありません。

まあ、サ終についてはアプリの更新が途切れたらどちらにせよいずれ使えなくなるというのはありますが...。

サーバはお金がかかる(自明)

実ははじめは某社の最安 VPS + SQLite(=月額600円ぐらい?)で普通に作ろうとしていたのですが、SQLite なのが不安なのと、サーバがかなりスペックが低いのでそこも不安なのと、そもそも自分のアプリなのになんで金かかんねん、と思ってしまったのでやめました。
最悪ユーザが増えなくて自分だけが使う状態になったときに、自分だけのためにサーバを用意するのは馬鹿らしいですし

使い勝手を損ないすぎずにサーバなしで完結する方法を模索した結果 Bluetooth を使うことになりました。

ちなみに、借りた VPS はめんどくさくて解約していないので今も月 600 円飛んで行っています。

Bluetooth にしたデメリットとしては、ユーザのデータを自分のサーバに人質にとってサブスクを結ばせるマネタイズができないことです。有料サブスク限定の機能をつける、などを想像していますが、オフラインでどうやって課金しているかどうかを確認するんだろうとか考えています。

Bluetooth 以外の選択肢

インターネットを介さないで端末間で直接通信する技術として(自分が調べた限りでは) Bluetooth の他に WiFi ダイレクトがあります。

WiFi ダイレクトのほうが通信速度的にとても有利なのですが、調べたところ Android では通信時に相手側のデバイスに通知が行き、「○○と通信しますか?」という確認ダイアログを OK しないと通信が始まらないっぽく、今回の用途には使いづらそうでした。

ということで残った Bluetooth なのですが、こちらはあらかじめ端末間でペアリングをしておけば、確認ダイアログなしで通信ができます。

Bluetooth といえばワイヤレスイヤホンなどの周辺機器とスマホ間の通信で使われるイメージが強いので、デバイス同士の通信に使えるというイメージはないかもしれませんが、TCP と似たような感じでストリーム型の通信を行うことができます。

今はアプリ上ではテキストのみしか扱えないので Bluetooth の通信速度(数Mbps)でも問題ないですが、将来的には画像などのファイルもメモに貼り付けられるようにしたいので、このあたりは再考が必要かもです。

使用フレームワーク・ライブラリ

デスクトップ

  • Electron
    • React, Vite, Tailwind CSS
    • napi-rs, windows-rs, SQLx

デファクトっぽいのを選んでいます。Bluetooth 周りは Rust で実装していて、windows-rs というMicrosoft 謹製のクレートから Windows の Bluetooth 周りの API を使用しています。

Rust を使っていますが Tauri ではなく Electron です。理由としては、まだ出たてのフレームワークは痒いところに手が届かないことがありそう(過去に別の某フレームワークで痛い目を見ています)だからです。熟れてきたら移行を考えます。

Android

Jetpack Compose を使っています。Kotlin 結構好きです。

おわりに

自分のユースケースに合うメモアプリがなかったため作りはじめたアプリなのですが、運用コストなどを考えつつ具現化させていったところキワモノができました。

万人向けではないと思いますが、興味がある方はぜひ使用してみてください。

感想、改善点、バグ報告など歓迎していますので気楽にコメントお願いします。

DL リンク(再掲)

https://play.google.com/store/apps/details?id=io.github.tomork.bluenote
https://www.microsoft.com/store/productId/9N6SQZF1WTP5

Discussion

masa5714masa5714

Zennのスクラップ機能をメモとして愛用しているのですが、非公開で書けずGoogle検索汚しになってしまうため気軽に書けず困っていたところ、一人チャットのような感覚で使えるマークダウン対応のエディタとUI、0円運用の思想に共感できる Bluenote はまさに求めているアプリそのものでした!スマホを同期中継に利用するのも面白い試みだと思いました。最高のアプリを無料リリースして頂き感謝です!

今日からガチでかなりヘビーに使っていきそうな感触があります。
僕の用途としては、とにかく雑に情報収集をしてメモを蓄えるために重宝しそうです。Bluenoteで雑に蓄えた情報をObsidianやZenn記事で清書する流れになりそうです。Zennのスクラップがまさにこの使い方でした。

とても期待しているため、いくつか改善要望させて頂きたいです。量が多く恐縮ですが何卒ご容赦ください。見出しの高・中・低は要望レベルを示します。

1. 見出しに対応してほしい(高)

### による大文字のマークダウンに対応して頂けると嬉しいです。(h3まであると助かります。)メモとして強弱を付けるためには必要なスタイルだと感じています。

2. コードを書くときに破線が出ないで欲しい(低)

恐らくスペルチェックによるものだと思いますが、コード部分はスペルチェックが回避されるようになるとメモに集中できると思いました。

※IMEによる問題かと考えましたがGoogle日本語入力、Microsoft IMEどちらも同じ動きになりました。

3. プレビュー機能が欲しい(中)

追加するまでどんな表示になるか分からないのは少し不安です。(追加してから再編集すればいいのですが...。)ZennのようにPreviewタブがあるとかなり快適になりそうです。

4. スレッドのグループ化がしたい(高)

調べ物をする際には1つのものを細分化したいことがよくあります。
その際に乱立したスレッドを一つのグループにまとめられると見返しやすかったり、格段にメモしやすくなったりしそうです。(Obsidianのフォルダ機能のようなイメージです。)

5. アイコンhoverでツールチップがあると使いやすい(低)

アイコンからイメージできなくもないのですが、実際にクリックするまで何が起きるか分からないのは少し不安に感じます。何が起きそうかのイメージとして「元に戻す」や「削除」などツールチップが出てくれるだけでかなり安心できそうです。

6. Shift + Win + Sでスクリーンショットしたものを Ctrl + Vで貼り付けできるようになってほしい(高)

スクリーンショットを気軽に貼り付けしたいので、Shift + Win + Sでキャプチャした画像(クリップボードに一時保存された画像)をCtrl + Vで貼り付けできるようになって欲しいです。個人的によく使うため、ぜひ取り入れて頂けると嬉しいです。

7. サブスレッド(?)のある投稿にコメントアイコン等の印が欲しい

名称が分かりませんがサブスレッドのようなもので付けた "メモに対する補足メモ" をどこに付けたか迷子にならないようにコメントアイコン等で示して頂けると良くなりそうです。現状は各投稿のアイコンをクリックしてサブスレッドを探す必要があり。メモを紛失してしまいそうだと感じています。


以上です。
今後の発展をガチで期待しています!(1日1回、起動時に15秒ぐらいの動画広告とか相性良さそうですね!)

tomori-ktomori-k

熱心なコメントありがとうございます!笑
改善案たくさんいただき嬉しいです。参考にさせていただきます。
ぼちぼち開発していくので気長に待っていただけるとありがたいです。

  1. サブスレッド(?)のある投稿にコメントアイコン等の印が欲しい

これに関してなんですが、ツリー(サブスレッドと言及されてるもの)があるメモには、数字のマーク(返信数)が付くようになってます。
↓こんな感じです

(現状は追加した直後は表示が更新されないので、スレッドを読み込み直すと表示されるかと思います。)