技術的なトラブルシューティング & FAQ
このドキュメントでは、scripture-habit の開発時に発生する一般的な環境およびプラットフォームの問題、特に Firebase エミュレータに関する問題の解決方法について説明します。
App Check & Google 認証
1. ローカル API での "Invalid App Check Token"
- 症状: バックエンドの Express API ルートが、Vite またはエミュレータからのローカルリクエストに対して
403 Forbidden: Invalid App Checkを返して拒否する。 - 原因: App Check にはデバイスの整合性プロバイダー(Play Integrity や DeviceCheck など)が必要ですが、これらは標準的な Web ブラウザやエミュレータでは利用できません。
- 解決方法:
- 開発環境でのバイパス: ローカルの環境変数で
SKIP_APP_CHECK=trueを設定します。このフラグが有効な場合、middleware.tsのverifyAppCheckミドルウェアは検証をスキップします。 - デバッグトークンの使用: App Check をテストするには、Firebase コンソールでデバッグトークンを登録し、クライアント SDK を設定します。typescript
// firebase.ts の初期化 self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
- 開発環境でのバイパス: ローカルの環境変数で
Firebase エミュレータ環境のセットアップ
1. Firestore 認証コンテキストの不一致
- 症状: ユニットテストが失敗する、またはエミュレータデータベースのコンテキストが認証済み状態と一致しないため Firestore ルールが操作を拒否する。
- 解決方法: テスト内で
@firebase/rules-unit-testingを使用して、認証済みのコンテキストを作成します。typescriptimport { initializeTestEnvironment } from '@firebase/rules-unit-testing'; const testEnv = await initializeTestEnvironment({ projectId: 'scripture-habit-auth', firestore: { rules: readFileSync('firestore.rules', 'utf8') } }); // 認証済みの Firestore コンテキストを作成 const aliceDb = testEnv.authenticatedContext('alice').firestore();