React アプリケーションのソースコード
React Component
ボタンなどの最小単位のコンポーネント
ドロワーなどのatomsよりも大きなコンポーネント
カードなどのatomsやmoleculesよりも大きなコンポーネント
厨房画面で使用するコンポーネント
受付画面で使用するコンポーネント
登録画面で使用するコンポーネント
データベースを操作に関連する関数など
React Hooksのカスタムフック
ルーティングやサイドバー、ヘッダー
アプリケーションのスタイル管理
TypeScriptの型定義
prismaに関連する設定ファイルやスキーマ定義
静的ファイル(画像やアイコンなど)
このプロジェクトでは、SQLiteデータベースのバックアップと永続化にLitestreamを使用しています。
flowchart LR
subgraph CloudRun[Cloud Run]
direction TB
RemixApp[Remix App]
Litestream[Litestream]
end
subgraph CloudStorage[Cloud Storage]
DB[/prod.db/]
end
RemixApp --> Litestream
Litestream -->|replicate| DB
-
データベースの復元
- コンテナ起動時、Google Cloud Storageから最新のバックアップを復元
- 初回起動時やバックアップが存在しない場合は、空のデータベースを使用
-
リアルタイムレプリケーション
- アプリケーション実行中、データベースの変更をCloud Storageに自動的にレプリケート
- WALモードの無効化によりPrismaとの互換性を確保
-
インスタンス数の制限
- Cloud Runのインスタンス数は最大1に制限
- 複数インスタンスでの同時実行はデータ整合性の問題を引き起こす可能性あり
-
Prismaとの互換性
- PrismaはSQLiteのWALモードに非対応
- 起動時に
PRAGMA journal_mode=DELETE
を実行して対応
開発環境では通常のSQLiteデータベースとして動作し、Litestreamは使用しません。本番環境(Cloud Run)でのみLitestreamによるバックアップと永続化が有効になります。
-
必要な環境変数
LITESTREAM_BUCKET=<バックアップ先のバケット名>
-
必要な権限
- Cloud Run サービスアカウントに以下の権限が必要:
roles/storage.objectViewer
roles/storage.objectCreator
- Cloud Run サービスアカウントに以下の権限が必要:
-
データベースロックエラー
Error: SQLite database error database is locked
対処法:
- アプリケーションの再起動
- WALモードが正しく無効化されているか確認
-
バックアップの確認
# バックアップの存在確認 gcloud storage ls gs://<BUCKET_NAME>/prod.db/