記事

TinyDebt:バックエンド不要のシンプルな借金管理アプリ

TinyDebtの技術的な選択を紹介します。ローカル優先の保存、バックエンドなし、邪魔にならない落ち着いたUIが特徴です。

TinyDebt:バックエンド不要のシンプルな借金管理アプリ

ここ数週間、借金や貸し借り、返済を記録する小さなアプリTinyDebtを開発してきました。小さく目的を絞ったアプリを作る方の参考になればと思い、技術的な選択をいくつか紹介します。

🧩 開発した理由

友人との小さな貸し借りをよく忘れてしまい、既存のアプリは登録や大量の広告、複雑な金融機能があり、重く感じていました。

欲しかったのは、次のようなアプリです。

  • すぐに起動する
  • 3〜5秒で借金を追加できる
  • オフラインで使える
  • ずっとシンプルなまま

こうしてTinyDebtが生まれました。

⚙️ 技術スタック

TinyDebtは意図的に軽量にしています。

  • モバイルアプリにReact Native(Expo)を使用
  • AsyncStorageによるローカル優先の設計
  • バックエンドなし。データは端末内に保存(バックアップのみFirebaseを使用)
  • 全体でTypeScriptを使用
  • UIライブラリではなく独自コンポーネントによるミニマルなUI
  • EAS BuildでApp StoreとGoogle Play向けにパッケージ

ユーザーアカウントも分析機能もなく、必要最低限以外の外部依存関係もありません。

🗂️ データモデル

借金の記録は次のような形です。

type Debt = {
  id: string;
  name: string;
  amount: number;
  type: "owed" | "borrowed";
  createdAt: number;
  history: Repayment[];
};

type Repayment = {
  amount: number;
  date: number;
};

すべてをシリアライズ可能にしておくと、保存や移行が簡単になります。

🧠 ローカル優先のUX

TinyDebtはサーバーに依存しないため、次のような特徴があります。

  • 操作がすぐに反映される
  • 読み込み中や同期中の状態がない
  • 古い端末でも快適に動く

個人向けの小さなツールにぴったりです。

🎨 UIの考え方

アプリには落ち着いた印象を持たせたかったので、次のようにしました。

  • シンプルで落ち着いた色
  • グラフやダッシュボードなし
  • 余計な要素を省き、1画面で作業の90%を完結
  • すばやく入力できる押しやすいタップ領域

小さなアプリは、役立つために複雑な見た目である必要はありません。

📦 公開

ただし、規模は小さく保ちたいと思っています。それが開発の目的だからです。

🙌 フィードバック歓迎

モバイルアプリを開発している方や、ローカル優先のユーティリティについて意見がある方は、ぜひ感想をお聞かせください。継続的に改善しています。