Initial commit: Voice controlled device application, specs and Gitea Actions workflow
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
# 📱 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時からです」` |
|
||||
| **設定変更** | 「ダークモードにして」 | `画面をダークモードに変更しました。` |
|
||||
| **フォールバック** | 「こんにちは」 | `申し訳ありません。そのコマンドには対応していません。` |
|
||||
Reference in New Issue
Block a user