Files
voice_controlled_device/README.md
T

116 lines
5.5 KiB
Markdown

# 📱 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時からです」` |
| **設定変更** | 「ダークモードにして」 | `画面をダークモードに変更しました。` |
| **フォールバック** | 「こんにちは」 | `申し訳ありません。そのコマンドには対応していません。` |