Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
システムアーキテクチャ追記
  • Loading branch information
gn-t-k committed Jul 19, 2025
commit 009cf7311bcf1e0b096230e001c29ecb21e210b7
90 changes: 90 additions & 0 deletions docs/system-architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# Next Liftのシステムアーキテクチャについて

このドキュメントでは、システムアーキテクチャの概要と主要なコンポーネントについて説明します。

## 概要

Next Liftはウェイトトレーニングの計画と記録を管理できるシステムです。iOSアプリとWebアプリの2つのアプリケーションで構成されています。それぞれのアプリケーションは、次の機能を提供します。

- iOSアプリ
- Googleアカウント・Apple IDを使用した認証
- トレーニング記録のCRUD機能
- ローカルファースト設計よるオフライン対応・データ同期
- トレーニング中の疲労状態でも操作しやすいUX
- フリーテキストや音声による入力など、AIを活用した機能(有料機能)
- Webアプリ
- Googleアカウント・Apple IDを使用した認証
- トレーニング記録のCRUD機能
- トレーニング計画のCRUD機能
- ローカルファースト設計よるデータ同期
- 統計データ表示やフィルタリングなど、広い画面での操作を想定した機能
- フリーテキストや音声による入力など、AIを活用した機能(有料機能)

Next Liftは認証用データベースとPer-Userデータベースを使用します。

- 認証用データベース
- ユーザー情報やセッション情報を管理
- Googleアカウント・Apple IDを使用した認証に対応
- Per-Userデータベース
- トレーニング記録や計画などのユーザーごとのデータを保存
- 各ユーザーごとに独立したデータベースインスタンスを使用
- iOSアプリはローカルのインスタンスからデータを読み書きし、変更は自動的にリモートのインスタンスに同期される
- Webアプリはリモートのインスタンスからデータを読み書きする

アプリケーションとデータベースを連携させるために、認証APIサーバーを使用します。認証APIサーバーは次の機能を提供します。

- 各アプリケーションからの認証リクエストを処理
- ユーザー登録時にPer-Userデータベースの作成と接続情報の提供

## 各コンポーネントの詳細

### iOSアプリ

- **フレームワーク**: React Native
- **対象プラットフォーム**: iOSのみ(Android端末での検証環境なし)
- **認証**: Better Auth(認証APIサーバーと連携)
- **データベース**: Per-Userデータベース(Local Replica)
- **データアクセス**: Drizzle ORM + op-sqlite

### Webアプリ

- **フレームワーク**: React Router
- **対象デバイス**: PC(統計データ表示のため広画面想定)、スマートフォン(Androidユーザーにはこちらを使ってもらう)
- **認証**: Better Auth(認証APIサーバーと連携)
- **データベース**: Per-Userデータベース(Remote Database)
- **データアクセス**: Drizzle ORM
- **デプロイ先**: Cloudflare Workers

### 認証APIサーバー

- **フレームワーク**: Hono
- **ライブラリ**: Better Auth
- **認証方式**: Apple ID、Google認証
- **API**: REST API(Web・iOS向け認証エンドポイント)
- **データベース**: 認証用データベース
- **データアクセス**: Drizzle ORM
- **デプロイ先**: Cloudflare Workers

### 認証用データベース

- **データベース**: Turso

### Per-Userデータベース

- **データベース**: Turso Embedded Replicas

## パッケージ管理

Next Liftは、pnpmを使用してパッケージ管理を行います。モノレポ構成で、各アプリケーションやライブラリは以下のように配置されます。

```text
/apps
├── ios … iOSアプリ
├── web … Webアプリ
└── auth-api … 認証APIサーバー
/packages
├── react-components … 共通Reactコンポーネント
├── react-native-components … 共通React Nativeコンポーネント
├── per-user-database … Per-Userのデータベースのスキーマとクライアント
└── auth-database … 認証用データベースのスキーマとクライアント
```