# 📱 Android 音声操作端末アプリ & Docker動作環境 本リポジトリは、Android向け音声操作アプリケーションのドメインロジック、コマンド解析エンジン、音声合成(TTS)・音声認識(SpeechRecognizer)のアーキテクチャ実装、および**どのようなPC環境(Windows / macOS / Linux)でも一発でビルド・テスト・シミュレーションが実行できるDocker環境**を提供します。 --- ## 🌟 主な特徴 - **環境構築不要のDockerフル対応**: Java/Android SDK/Gradleが未インストールのPCでも、Dockerさえあれば数秒でシミュレーションや単体テストが実行可能。 - **アーキテクチャ設計**: Clean Architecture + MVVM (StateFlow / Kotlin Coroutines)。 - **日本語音声コマンド解析**: 漢数字→アラビア数字変換 (`KanjiToNumberConverter`)、正規表現パターンマッチング (`CommandParser`)。 - **動作シミュレーター (`RunAppSimulation.kt`)**: 実際のAndroid実機がなくても、ターミナル上で音声入力・解析・実行・TTS応答のフローを完全再現。 --- ## 🚀 動作確認手順 (Docker環境) DockerおよびDocker Composeがインストールされている環境であれば、以下のコマンド一発で全機能の動作確認が可能です。 ### 1. デモシミュレーションの実行 (推薦) 定義済みの各種音声コマンド(時刻確認、タイマー設定、アラーム、メッセージ読み上げ、設定変更等)が正常にパース・実行される様子を確認します。 ```bash # docker-compose を使用 docker compose run --rm simulation # または付属のスクリプトを使用 (Mac/Linux) ./run.sh simulation # Windows (Command Prompt / PowerShell) run.bat simulation ``` ### 2. 対話型シミュレーションモード (CLI) 任意の日本語テキストキーボード入力し、リアルタイムにコマンド判定とTTS応答シミュレーションを行います。 ```bash docker compose run --rm interactive ``` *(終了したい場合は `exit` または `quit` と入力)* ### 3. 単体テスト (JUnit / MockK) の実行 `CommandParser`, `ExecuteCommandUseCase`, `KanjiToNumberConverter`, `MainViewModel` のユニットテストを全て実行します。 ```bash docker compose run --rm test ``` ### 4. Debug APKのビルド Android用Debug APKファイルをビルドし、`app/build/outputs/apk/debug/` に生成します。 ```bash docker compose run --rm build ``` --- ## 💻 ローカル環境 (Dockerなし) での実行 ローカルPCに JDK 17 以上がインストールされている場合は、Gradle Wrapperを使用して直接実行することも可能です。 ```bash # デモシミュレータの実行 ./gradlew :app:runSimulation # 対話型シミュレータの実行 ./gradlew :app:runSimulation --args="--interactive" # 単体テストの実行 ./gradlew test ``` --- ## 📁 ディレクトリ構成 ``` voice_controlled_device/ ├── Dockerfile # Multi-stage Docker構成 (JDK 17 + Android SDK) ├── docker-compose.yml # simulation / interactive / test / build サービス定義 ├── run.sh # Mac/Linux用 実行ランチャー ├── run.bat # Windows用 実行ランチャー ├── Makefile # makeコマンド用定義 ├── gradlew / gradlew.bat # Gradle Wrapper ├── gradle/ # Gradle Wrapper Jar / Properties ├── docs/ # プロジェクト仕様書・設計書群 │ ├── 00_project_config.md # 構成定義書 │ ├── 02_specifications.md # 機能仕様書 │ ├── 03_hardware_design.md # システム・ハードウェア設計書 │ └── 04_review_report.md # レビュー報告書 └── app/ ├── build.gradle.kts # アプリレベルGradle設定 (runSimulationタスク追加済み) ├── src/ │ ├── main/java/com/example/voiceapp/ │ │ ├── data/ # リポジトリ・データソース │ │ ├── domain/ # コマンド解析・コンバータ・ユースケース │ │ ├── ui/ # Jetpack Compose UI & ViewModel │ │ ├── voice/ # SpeechRecognizer & TTSマネージャ │ │ └── MainActivity.kt │ └── test/ # 単体テストコード群 └── RunAppSimulation.kt # CLIシミュレーションエントリポイント ``` --- ## 🛠 対応している音声コマンド例 | コマンド分類 | 入力例 | 実行結果 / TTS応答例 | | :--- | :--- | :--- | | **時刻・日付** | 「今何時?」 / 「今日の日付を教えて」 | `現在時刻は 07:20 です。` | | **タイマー設定** | 「三分タイマーかけて」 / 「5分タイマー」 | `3分間のタイマーをセットしました。` | | **アラーム設定** | 「7時にアラーム」 | `07:00にアラームを設定しました。` | | **メッセージ読上** | 「未読メッセージ読んで」 | `未読メッセージが1件あります: 「次回の打ち合わせは15時からです」` | | **設定変更** | 「ダークモードにして」 | `画面をダークモードに変更しました。` | | **フォールバック** | 「こんにちは」 | `申し訳ありません。そのコマンドには対応していません。` |