【ITニュース解説】Implemented User Auth, OTP verification, Audio Recording w BG, SMS, Cloud Integration.
2025年09月16日に「Dev.to」が公開したITニュース「Implemented User Auth, OTP verification, Audio Recording w BG, SMS, Cloud Integration.」について初心者にもわかりやすく解説しています。
ITニュース概要
FlutterとFirebaseで、緊急時にサイレントSOSを発信する「NeedU」アプリを開発。SOSボタン長押しで背景音声録音と位置情報を緊急連絡先に共有する。ユーザー認証、OTP、クラウド連携機能を実装し、開発ではAIアシスタントを活用した。
ITニュース解説
このニュース記事は、「NeedU」というサイレントSOSアプリの開発と、その中心となる機能の実装について詳述している。NeedUは、ユーザーが話すことや電話を操作することが困難な状況、例えば強制的な拉致や暴力的な状況に遭遇した際に、静かに助けを求めることを目的として設計された軽量なモバイルアプリケーションである。このアプリは、Googleが提供するUI開発フレームワークであるFlutterを主要なツールとして、バックエンドサービスには同じくGoogleのクラウドプラットフォームであるFirebaseを全面的に利用して構築された。
アプリの主要な機能として、SOSボタンの長押しによるトリガーが挙げられる。ユーザーがSOSボタンを3秒間長押しすると、画面上でのアニメーション表示と触覚フィードバックを伴いながらSOSが発動する。この際、アプリは自動的に30秒間のバックグラウンド音声録音を開始し、同時にユーザーの現在位置情報を、事前に登録された最大3人の緊急連絡先に共有する仕組みである。音声録音機能は、iOSとAndroidの両方のプラットフォームで、アプリがアクティブな状態でないバックグラウンドでも動作するように設計されている。録音された音声データは、もしアプリが予期せず停止した場合でもデータが失われるリスクを最小限にするため、5秒間の短いチャンク(区切り)に分割され、各チャンクは録音完了後すぐにFirebase Storageというクラウドストレージサービスへアップロードされる。各チャンクのアップロードの成功または失敗は、ユーザーにスナックバーと呼ばれる画面下部に一時的に表示される通知で伝えられる。
ユーザー認証には、セキュリティと信頼性を重視したシステムが導入されている。アプリへの新規サインアップ時には、電話番号によるワンタイムパスワード(OTP)検証が必須である。これは、緊急時に発動されるSOSアラートが実在する有効な電話番号に確実に届けられるようにするための重要なステップである。電話番号認証に加えて、ユーザーはEmail/Password、Googleアカウント、またはAppleアカウントを使ってサインインすることも可能であり、自身の利用状況に合わせて認証方法を選択できる柔軟性を提供している。ユーザーの情報は、FirebaseのNoSQLデータベースであるFirestoreにクラウド上で安全に保存されると同時に、shared_preferencesというローカルストレージの仕組みを用いてデバイスのローカルにも永続的に保存される。これにより、アプリの起動時やオフライン時でもユーザーデータを素早く読み込み、利用できる状態を維持している。
開発プロセスにおいては、デザインシステムがアプリケーションのUI(ユーザーインターフェース)の一貫性を保つ上で中心的な役割を果たした。AppColors(色)、AppTypography(テキストスタイル)、AppTheme(テーマ)、SizeConfig(サイズや間隔)といった共通のコンポーネントやルールセットを定義し、それらを厳格に適用することで、アプリケーション全体で統一された見た目と操作感を実現し、開発の効率化に貢献している。また、このプロジェクトではAIアシスタントも活用されており、sos_page.dartやaudio_services.dartといった特定のファイルの基本的なコード構造(足場組み)の生成や、事前に定義された厳格なデザイン制約の適用に利用された。これは、現代のソフトウェア開発においてAIツールがどのように生産性向上に役立てられているかを示す一例である。
ニュース記事には、SOS機能と認証機能の実装に関する詳細な計画が記されている。SOS機能の実装は、AudioServicesというシングルトンクラスを中心に構築された。シングルトンクラスとは、アプリケーション内でそのクラスのインスタンス(実体)が常に一つしか存在しないことを保証する設計パターンである。このAudioServicesクラスは、マイクへのアクセス許可の確認、録音の開始と停止、5秒ごとの音声チャンクの録音とFirebase Storageへのアップロード、一時ファイルの管理、そしてiOSデバイスでのバックグラウンド録音セッションの設定など、音声録音に関連する全ての処理を担う。SOSボタンのUI(ユーザーインターフェース)には、アニメーション、カウントダウンタイマー、パーティクルエフェクト、背景のグロー効果など、ユーザーに視覚的なフィードバックを与えるための要素が多数組み込まれている。これらはFlutterのアニメーション機能を活用し、滑らかで魅力的なインタラクションを提供している。
認証フローの具体的な実装では、ユーザーが初回サインアップする際に名前と電話番号を収集し、Firebase Phone OTPサービスを利用して電話番号の有効性を検証する。検証が成功した後、そのユーザーの固有のID(UID)、名前、プロフィール写真のURL(任意)、緊急連絡先リスト(任意)、電話番号、そしてアカウント作成日時を含む情報がFirestoreのusersコレクションに新規ドキュメントとして保存される。この情報は、認証後にアプリのローカル状態やグローバルなユーザー情報として保持され、その後のアプリ操作で利用される。既存ユーザーがサインインする場合も同様に、Firestoreからユーザー情報を取得し、ローカルに保存される。アプリケーションの異なる画面間での遷移(例:サインアップ画面からOTP検証画面、SOSページなど)は、go_routerというルーティングライブラリを用いて効率的に管理されている。
堅牢なアプリケーションを構築するためには、エラーハンドリングとエッジケースへの対応が極めて重要である。NeedUアプリの開発では、マイク許可の拒否、ネットワーク障害によるFirebaseへのアップロード失敗、バックグラウンド録音中の外部からの割り込み(電話着信など)といった様々な異常事態が考慮されている。これらのケースに対して、ユーザーに適切なエラーメッセージを表示したり、処理を継続したり、利用されたリソースを適切にクリーンアップしたりする措置が講じられることで、アプリケーションの安定性とユーザー体験の信頼性が確保されている。また、OTP検証のタイムアウト時における再送機能や、ユーザーがOTP検証をキャンセルした場合の適切な画面遷移など、ユーザーの行動に基づいた細やかなUX(ユーザーエクスペリエンス)設計も盛り込まれている。
プロフィールページや緊急連絡先の設定、権限管理といった追加機能のUI仕様も明確に定義されている。これには、プロフィール写真の変更機能、名前や電話番号の編集、緊急連絡先の追加・更新、アプリのバージョン情報表示、そしてサインアウト機能などが含まれる。サインアウト時には、現在のセッション情報がクリアされ、ローカルに保存されていたユーザーデータも削除され、ユーザーはログイン画面へと遷移する。
このように、NeedUアプリは、緊急時という特定のニーズに対応した機能性と、安定したユーザー体験を提供するために、FlutterとFirebaseを活用した現代的なモバイルアプリケーション開発のベストプラティクスを取り入れている。詳細な実装計画、AIアシスタントの活用、厳格なデザインシステムの適用、そして多岐にわたるエラーハンドリングの考慮は、システムエンジニアを目指す初心者が実際のプロジェクトで直面するであろう課題と、それらを解決するための実践的なアプローチの好例となるものである。