0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DBを使わずローカルで完結するTODO管理アプリ

Posted at

はじめに

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

作ったもの

こんな感じのシンプルなTODOアプリを作りました。アプリ名はREMです。
app.png
ソースコードはこちらです。

データの持ち方

REM上で作成したTODOタスクは全てJSONファイルとしてローカルマシンに保存されます。例えば「議事録を書く」というタスクを作成したら、以下のようなJSONが内部で生成されます。

{
  "id": "202509200628_de3ab00e863aaba0a19713a471f6d8efbcecc6a39510029bfd70b0a018306685",
  "title": "議事録書く",
  "status": "todo",
  "description": ""
}

スクリーンショット 2025-11-25 6.58.42.png
タスクの作成・更新が発生するたびにJSONファイルの読み書きが発生します。また、このJSONファイルはタスクのステータスによってtodo or doing or doneのディレクトリに振り分けられます。

rem
├── doing
│   └── 議事録を書く.json
├── done
│   └── 実装をする.json
└── todo
    └── メール送る.json

図にすると以下のような感じです。
スクリーンショット 2025-11-25 6.51.27.png

つまり、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ドル/年だそうです。
まあ、今回は個人利用目的のアプリなのでいいんですけどね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?