はじめに
TODOアプリを自作するというのは多くのエンジニアが通る道だと思うのですが、多分に漏れず自分もその道を通りました。自分が作ったTODOアプリはデータ管理の部分が少し変わっていて、DBを使わずにローカル環境のファイルでデータを管理するという手法をとっています。あまり例のないパターンだと思うので、記事にして紹介します。
作ったもの
こんな感じのシンプルなTODOアプリを作りました。アプリ名はREMです。

ソースコードはこちらです。
データの持ち方
REM上で作成したTODOタスクは全てJSONファイルとしてローカルマシンに保存されます。例えば「議事録を書く」というタスクを作成したら、以下のようなJSONが内部で生成されます。
{
"id": "202509200628_de3ab00e863aaba0a19713a471f6d8efbcecc6a39510029bfd70b0a018306685",
"title": "議事録書く",
"status": "todo",
"description": ""
}

タスクの作成・更新が発生するたびにJSONファイルの読み書きが発生します。また、このJSONファイルはタスクのステータスによってtodo or doing or doneのディレクトリに振り分けられます。
rem
├── doing
│ └── 議事録を書く.json
├── done
│ └── 実装をする.json
└── todo
└── メール送る.json
つまり、JSONファイルの内容と保存場所だけでタスクのデータを管理することが可能です。
技術スタック
Backend
Rustを採用しました。REMはファイルの読み書きを頻繁に実施するので、ここのIOの処理が高速に行えることを期待してRustを選びました。
Rustでデスクトップアプリケーションを制作することができるTauriというフレームワークがあり、こちらを利用しています。npm create tauri-app@latestを実行することでTauri製のアプリケーションの雛形を簡単に作成することができ、FrontendはTypeScriptで、BackendはRustで書けるようになります。
Frontend
TypeScript(React.js)を採用しました。前述の通りTauriで雛形を作るとデフォルトではTSを利用することになります。TSで困ることは特にないと感じたので、そのままTSで書き進めました。
歯痒いところ
本当は完成したアプリケーションをdmgファイルにして配布したり、Homebrewで配信したりなどしたかったのですが、叶いませんでした。というのも、Mac向けのデスクトップアプリケーションを配布するにはApple Developer Programという開発者向けのプログラムに参加する必要があり、 参加には99ドル/年の支払いが必要でした。。(99ドル≒15万円)10万以上の支払いをする気にはなれなかったので、dmgファイルでの配布は諦めて、各自でソースコードをビルドして使ってもらう形をとりました。
もうちょっと料金を安くしてくれたらなあ・・・と個人的には思います。Androidアプリにも似た制度があって、こちらは25ドル/年だそうです。
まあ、今回は個人利用目的のアプリなのでいいんですけどね。
