個人用アプリ開発の課題とローカルファーストアーキテクチャの選択
個人で利用するモバイルアプリの開発は、一般的な 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 に投げてみたら案外すぐ動きそうです。