個人用アプリ開発の課題とローカルファーストアーキテクチャの選択

個人で利用するモバイルアプリの開発は、一般的な SaaS アプリケーションとは異なる独自の課題を抱えています。記事の筆者は、レストランの推奨リスト管理、顔認識が苦手な人のための記憶補助、Spotify のアルバム整理といったパーソナルなニーズを満たすためのアプリを求めていました。既存サービスではデータのロックインや機能の不足が問題となり、自作を決意したとのことです。

「データは主に各デバイスに存在し、標準化された同期サーバーを介してデバイス間でデータを取得する」というローカルファーストの考え方は、現代の個人データ管理において非常に重要なアプローチです。

従来のモバイルアプリとウェブアプリの連携では、独自のウェブサーバーとデータベースを持つ SaaS 型のアーキテクチャが一般的ですが、筆者はこれを「扱いにくい、過剰で、スケーラブルではない」と感じたそうです。特に、顔写真などのプライベートなデータを扱うため、データの主権を自身が持つ「ローカルファースト」の概念に注目し、自身のサーバーでデータを同期する選択をしました。これは、プライバシーを重視する開発者にとって、非常に共感できる方針ではないでしょうか。私自身も、個人プロダクトのデータ管理には常に頭を悩ませており、この選択は非常に参考になります。(出典 )

項目 従来の SaaS 型 ローカルファースト型
データ所在地 中央サーバー 各デバイス(同期はバックグラウンド)
操作速度 ネットワーク依存 高速(ローカル処理)
プライバシー サービスプロバイダ依存 ユーザー管理(自己ホスト可能)
開発負担 サーバー・クライアント両方 クライアント中心+シンプル同期

LLMを活用した「バイブコーディング」プロセス

筆者は、開発プロセスの大部分を月額18ポンドの Claude Opus プランを利用し、「バイブコーディング」で進めたと述べています。初期の計画段階では人間の協力も得たものの、最終的には多くの決定が変更されたとのことです。LLM を活用した現在のコーディングプロセスは、以下のようなステップで進められています。

  • 計画: 大きな設計は plans/ ディレクトリに記述し、編集・決定後にコンテキストウィンドウをクリアし、LLM に実装を指示。
  • デザイン: UX やデザイン変更の際は、Claude に複数のデザインオプションを生成させ、それを反復して洗練。
  • タスク管理: to-do ファイルでバグやタスクを管理し、LLM が完了したらチェック、自身で QA 後に削除。
  • 磨き上げ (Polish): 多くのタスクがこのカテゴリに属し、製品や UX に関する詳細なフィードバックを LLM に与えて改善。

私自身も Claude Code を利用したバイブコーディングを実践していますが、やはり初期の設計やデザインの方向性決定、そして最終的な「磨き上げ」の部分で人間の介入が不可欠だと感じています。LLM は強力なツールですが、最終的なユーザー体験や製品の品質を保証するのは開発者の役割です。

特に UX やデザインの微調整は、LLMだけでは難しい領域だと感じます。このプロセスは、私が普段 TypeScript と Python を書く上でも、AI を効果的に使うための参考になります。

YjsとHocuspocusによるPWA実装

データ同期プロトコルとして、筆者は最も人気のあるローカルファーストプロトコルである Yjs を選択しました。そして、SQLite データベースに書き込むシンプルなサーバーとして Hocuspocus を採用しています。

Hocuspocus はデータベース内の形式が不透明でバイナリであるという課題があったものの、目的は達成できたとのことです。クライアント側の UI については、当初 Rust での実装も検討されたものの、最終的にはシンプルさを優先し、JavaScript の PWA (Progressive Web App) で開発されました。

Android スマートフォンに Chrome 経由でインストールすると、ネイティブアプリと遜色ない品質で動作し、ウェブ版とモバイル版で同じコードベースが利用できるメリットは非常に大きいと感じます。LLM コーディングエージェントを使っても、単一コードベースで済むのは開発の手間を大幅に削減できるでしょう。GCP を普段使いしている私からすると、こうした軽量なアプリケーションを Cloud Run のようなサービスで動かせば、非常に低コストで運用できるのではないかと感じます。

今後の個人開発におけるLLMとローカルファーストの可能性

この記事が示すように、LLM の進化とローカルファースト・ソフトウェアの潮流は、個人開発の風景を大きく変えつつあります。特に Claude Opus のような高度な LLM は、開発者の強力なアシスタントとなり、アイデアから実装までの道のりを短縮します。一方で、データのプライバシーとコントロールを重視する開発者にとって、ローカルファーストのアーキテクチャは必須の選択肢となっていくでしょう。

今後は Yjs や Hocuspocus のようなツールがさらに成熟し、より簡単に自己ホスト型の同期サーバーを構築できるようになることを期待しています。開発者が自身のデータ主権を保ちつつ、高速でパーソナライズされたアプリケーションを効率的に作成できる未来は、もうすぐそこまで来ていると感じます。

編集者コメント

Python バインディングがあれば Yjs を試してみたいです。ドキュメントが充実してるのが好感持てます。自分のアプリに組み込んでみたいです。うちのスクリプトに使えそうな予感がします。Claude Code に投げてみたら案外すぐ動きそうです。