306 lines
11 KiB
Markdown
306 lines
11 KiB
Markdown
|
|
# Removed Features Documentation
|
|||
|
|
|
|||
|
|
このドキュメントは、v1.0.5までの開発過程で削除・変更された機能を記録し、将来のPro版開発やAI協調作業のための参考資料として残します。
|
|||
|
|
|
|||
|
|
## 📋 目次
|
|||
|
|
1. [オフライン「保存して後で解析」機能](#1-オフライン保存して後で解析機能)
|
|||
|
|
2. [OCRベースのオフライン解析](#2-ocrベースのオフライン解析)
|
|||
|
|
3. [32ビットデバイスサポート](#3-32ビットデバイスサポート)
|
|||
|
|
4. [総評:アプリコンセプトへの影響](#総評アプリコンセプトへの影響)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. オフライン「保存して後で解析」機能
|
|||
|
|
|
|||
|
|
### 削除された機能
|
|||
|
|
**機能概要**: インターネット接続がない環境で撮影した酒の写真を一時保存し、オンライン復帰後に解析・登録できる機能
|
|||
|
|
|
|||
|
|
**元の動作フロー**:
|
|||
|
|
1. カメラで酒ラベルを撮影
|
|||
|
|
2. オフライン時: 写真をギャラリーと内部ストレージに保存 → 「後で解析」キューに追加
|
|||
|
|
3. オンライン復帰時: ホーム画面で「未解析の写真」バナー表示 → タップで一括解析
|
|||
|
|
4. 解析完了後: 自動的にSakeItemとして登録
|
|||
|
|
|
|||
|
|
**削除された時期**: Gemini Vision API移行時(正確なコミットは不明、v1.0.0以前)
|
|||
|
|
|
|||
|
|
**削除理由**:
|
|||
|
|
- Gemini Vision APIが必須のオンライン接続を要求
|
|||
|
|
- OCRライブラリ削除に伴い、オフライン解析のバックエンドが消失
|
|||
|
|
- 「後で解析」キュー管理の複雑性(状態管理、リトライロジック、エラーハンドリング)
|
|||
|
|
|
|||
|
|
### 現在の代替手段
|
|||
|
|
**現状の動作**:
|
|||
|
|
- カメラ撮影 → 写真はギャラリーに保存される
|
|||
|
|
- Gemini Vision API呼び出し失敗時: エラーダイアログ表示
|
|||
|
|
- ユーザーは後で手動でギャラリーから写真を選び直して再解析が必要
|
|||
|
|
|
|||
|
|
**ユーザー体験の劣化**:
|
|||
|
|
- ❌ オフライン時の撮影が無意味化(解析できないため登録不可)
|
|||
|
|
- ❌ 一時保存された写真の存在を忘れやすい
|
|||
|
|
- ❌ 再解析のために同じ写真を探す手間
|
|||
|
|
|
|||
|
|
### アプリコンセプトへの影響度
|
|||
|
|
**🔴 高(Critical)**
|
|||
|
|
|
|||
|
|
**理由**:
|
|||
|
|
- Ponshu Roomのコアバリュー: 「居酒屋や試飲会で気軽に記録」
|
|||
|
|
- 居酒屋・地方の酒蔵など、電波が弱い環境での利用が想定される
|
|||
|
|
- オフライン対応なしでは、メインユースケースが阻害される
|
|||
|
|
|
|||
|
|
### 将来のPro版への推奨実装
|
|||
|
|
**優先度**: 🔥 最高優先(Must Have)
|
|||
|
|
|
|||
|
|
**実装案**:
|
|||
|
|
1. **Draft Mode実装**:
|
|||
|
|
```dart
|
|||
|
|
class SakeItem {
|
|||
|
|
final bool isPendingAnalysis; // 新規フィールド
|
|||
|
|
final String? draftPhotoPath; // 解析待ち写真パス
|
|||
|
|
// ...
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **Pending Analysis Queue**:
|
|||
|
|
- Hiveに`draft_items`ボックス追加
|
|||
|
|
- ホーム画面に「未解析: 3件」バナー表示
|
|||
|
|
- タップでバッチ解析開始
|
|||
|
|
|
|||
|
|
3. **Background Sync**:
|
|||
|
|
- `connectivity_plus`でオンライン復帰検知
|
|||
|
|
- 自動的にバックグラウンドで解析開始(通知で進捗表示)
|
|||
|
|
|
|||
|
|
4. **Fallback to Manual Entry**:
|
|||
|
|
- 解析失敗時: 「手動で入力しますか?」オプション
|
|||
|
|
- 写真は保持したまま、ユーザーが銘柄名などを入力
|
|||
|
|
|
|||
|
|
**実装複雑度**: 中(3-5日)
|
|||
|
|
|
|||
|
|
**必要な技術**:
|
|||
|
|
- State management拡張(pending状態の追加)
|
|||
|
|
- Background task処理(`workmanager`パッケージ)
|
|||
|
|
- Error handling強化(リトライロジック)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. OCRベースのオフライン解析
|
|||
|
|
|
|||
|
|
### 削除された機能
|
|||
|
|
**機能概要**: デバイス上でOCR処理を実行し、インターネット接続なしでラベルテキストを抽出する機能
|
|||
|
|
|
|||
|
|
**元の技術スタック**:
|
|||
|
|
- `google_ml_kit`(Text Recognition V2)
|
|||
|
|
- または`tesseract_ocr`(推測、コミット履歴未確認)
|
|||
|
|
|
|||
|
|
**削除された時期**: Gemini Vision API移行時(v1.0.0以前)
|
|||
|
|
|
|||
|
|
**削除理由**:
|
|||
|
|
- OCR精度の限界(日本語手書き文字、装飾フォントの誤認識)
|
|||
|
|
- Gemini Vision APIの圧倒的な解析精度(ラベルデザイン理解、文脈推論)
|
|||
|
|
- ライブラリサイズ削減(google_ml_kit約15MB削減)
|
|||
|
|
|
|||
|
|
### 現在の代替手段
|
|||
|
|
**現状**:
|
|||
|
|
- Gemini Vision API一本化
|
|||
|
|
- オフライン時は機能しない
|
|||
|
|
|
|||
|
|
### アプリコンセプトへの影響度
|
|||
|
|
**🟡 中(Moderate)**
|
|||
|
|
|
|||
|
|
**理由**:
|
|||
|
|
- OCR単体では精度不足だったため、元々Gemini補完前提だった
|
|||
|
|
- 完全オフラインより「圏外→後で解析」の方が実用的
|
|||
|
|
- しかし、Draft Mode(機能1)がないと意味がない
|
|||
|
|
|
|||
|
|
### 将来のPro版への推奨実装
|
|||
|
|
**優先度**: 🔶 中優先(Nice to Have)
|
|||
|
|
|
|||
|
|
**実装案**:
|
|||
|
|
1. **Hybrid Approach**:
|
|||
|
|
- オフライン時: OCRでテキスト抽出 → Draft保存
|
|||
|
|
- オンライン復帰時: Gemini Vision APIで完全解析 → OCR結果を補正
|
|||
|
|
|
|||
|
|
2. **Use Case**:
|
|||
|
|
- 電波が完全にない環境(山間部の酒蔵、地下貯蔵庫見学)
|
|||
|
|
- 低速回線でGemini APIタイムアウトする場合のフォールバック
|
|||
|
|
|
|||
|
|
3. **実装詳細**:
|
|||
|
|
```dart
|
|||
|
|
// camera_screen.dartのフロー変更
|
|||
|
|
if (isOnline) {
|
|||
|
|
result = await GeminiVisionAPI.analyze(photo);
|
|||
|
|
} else {
|
|||
|
|
ocrText = await MLKitOCR.extractText(photo);
|
|||
|
|
saveDraft(photo, ocrText); // Draft保存
|
|||
|
|
showSnackBar('オフライン: 後で解析します');
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**実装複雑度**: 低(1-2日)
|
|||
|
|
|
|||
|
|
**必要な技術**:
|
|||
|
|
- `google_mlkit_text_recognition: ^0.13.0`再導入
|
|||
|
|
- Connectivity check (`connectivity_plus`)
|
|||
|
|
- Draft Mode(機能1)と統合
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 32ビットデバイスサポート
|
|||
|
|
|
|||
|
|
### 削除された機能
|
|||
|
|
**機能概要**: 32ビットARM(armeabi-v7a)および32ビットx86デバイスでの動作サポート
|
|||
|
|
|
|||
|
|
**削除された設定**:
|
|||
|
|
```kotlin
|
|||
|
|
// android/app/build.gradle.kts
|
|||
|
|
// 削除前:
|
|||
|
|
ndk {
|
|||
|
|
abiFilters.addAll(listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64"))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 現在(v1.0.5):
|
|||
|
|
ndk {
|
|||
|
|
abiFilters.add("arm64-v8a") // 64ビットのみ
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**削除された時期**: v1.0.5(リリースビルド最適化時)
|
|||
|
|
|
|||
|
|
**削除理由**:
|
|||
|
|
- APKサイズ削減(182MB → 48MB、約74%削減)
|
|||
|
|
- 2015年以降の端末はほぼ全て64ビット
|
|||
|
|
- Google Play要件: 2019年8月以降、64ビット必須
|
|||
|
|
|
|||
|
|
### 現在の影響
|
|||
|
|
**動作不可デバイス**:
|
|||
|
|
- 2014年以前のAndroid端末(32ビットCPU)
|
|||
|
|
- 一部のx86エミュレータ(32ビット設定)
|
|||
|
|
- 例: Galaxy S4, Nexus 5, 初代Moto G
|
|||
|
|
|
|||
|
|
**動作可能デバイス**:
|
|||
|
|
- 2015年以降のほぼ全てのAndroid端末
|
|||
|
|
- iOS: iPhone 5s(2013年)以降全て(元々64ビット)
|
|||
|
|
|
|||
|
|
### アプリコンセプトへの影響度
|
|||
|
|
**🟢 低(Minor)**
|
|||
|
|
|
|||
|
|
**理由**:
|
|||
|
|
- ターゲットユーザー: 酒愛好家(比較的新しいスマホ所有率高い)
|
|||
|
|
- 2025年現在、32ビット端末のシェアは1%未満(推定)
|
|||
|
|
- カメラ・AI機能を考えると、古い端末では元々動作が重い
|
|||
|
|
|
|||
|
|
### 将来のPro版への推奨実装
|
|||
|
|
**優先度**: 🔵 低優先(Optional)
|
|||
|
|
|
|||
|
|
**実装案**:
|
|||
|
|
1. **Split APK配信**:
|
|||
|
|
- Google Play Console: 自動的に端末に応じたAPKを配信
|
|||
|
|
- 64ビット版(48MB)と32ビット版(42MB)を両方ビルド
|
|||
|
|
- ユーザーは意識せず最適版をダウンロード
|
|||
|
|
|
|||
|
|
2. **実装方法**:
|
|||
|
|
```kotlin
|
|||
|
|
// build.gradle.kts
|
|||
|
|
android {
|
|||
|
|
splits {
|
|||
|
|
abi {
|
|||
|
|
isEnable = true
|
|||
|
|
reset()
|
|||
|
|
include("armeabi-v7a", "arm64-v8a")
|
|||
|
|
isUniversalApk = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **トレードオフ**:
|
|||
|
|
- メリット: 古い端末でも動作
|
|||
|
|
- デメリット: ビルド時間増加、メンテナンス負荷増加
|
|||
|
|
|
|||
|
|
**実装複雑度**: 極低(30分)
|
|||
|
|
|
|||
|
|
**推奨判断基準**:
|
|||
|
|
- 実際に32ビット端末ユーザーからの要望があれば実装
|
|||
|
|
- なければ現状維持(64ビットのみ)で問題なし
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 総評:アプリコンセプトへの影響
|
|||
|
|
|
|||
|
|
### Ponshu Roomのコアコンセプト
|
|||
|
|
> 「居酒屋や酒蔵で出会った日本酒を、その場で写真を撮るだけで記録・管理できる個人用酒手帳アプリ」
|
|||
|
|
|
|||
|
|
### 削除機能の致命度分析
|
|||
|
|
|
|||
|
|
| 機能 | コンセプト一致度 | 削除による影響 | 復活優先度 |
|
|||
|
|
|------|------------------|----------------|------------|
|
|||
|
|
| オフライン保存→後で解析 | 🔴 **最重要** | 居酒屋での記録体験を直撃 | 🔥 最高 |
|
|||
|
|
| OCRオフライン解析 | 🟡 補助的 | Draft Modeなしでは無意味 | 🔶 中 |
|
|||
|
|
| 32ビットサポート | 🟢 周辺的 | 現代端末には影響なし | 🔵 低 |
|
|||
|
|
|
|||
|
|
### 致命的な欠陥の有無
|
|||
|
|
**結論**: ⚠️ **1つの致命的欠陥あり**
|
|||
|
|
|
|||
|
|
**致命的欠陥**:
|
|||
|
|
- **オフライン対応の完全喪失**
|
|||
|
|
- 電波の弱い居酒屋・地下店舗でアプリが機能しない
|
|||
|
|
- メインユースケース「その場で記録」が成立しない
|
|||
|
|
- 競合アプリ(Sakenomy等)との差別化要素を失う
|
|||
|
|
|
|||
|
|
**許容可能な変更**:
|
|||
|
|
- OCR削除: Gemini Vision精度で十分カバー
|
|||
|
|
- 32ビット削除: 現代のユーザー層には無影響
|
|||
|
|
|
|||
|
|
### 今後の開発方針
|
|||
|
|
|
|||
|
|
#### Phase 1: 緊急対応(次期アップデート)
|
|||
|
|
1. **Draft Mode実装**(3-5日)
|
|||
|
|
- オフライン時に写真を一時保存
|
|||
|
|
- オンライン復帰で自動解析
|
|||
|
|
- ホーム画面にペンディング通知
|
|||
|
|
|
|||
|
|
#### Phase 2: Pro版差別化機能
|
|||
|
|
1. **Advanced Offline Support**(Pro限定)
|
|||
|
|
- OCR Fallback(完全圏外でもテキスト抽出)
|
|||
|
|
- Background Sync(バックグラウンド自動解析)
|
|||
|
|
- Conflict Resolution(同一酒の重複検知)
|
|||
|
|
|
|||
|
|
2. **その他Pro機能強化**
|
|||
|
|
- Instagram自動投稿(現在ロック中)
|
|||
|
|
- ビジネスアナリティクス(現在ロック中)
|
|||
|
|
- Multi-device Sync(新規)
|
|||
|
|
|
|||
|
|
#### Phase 3: 長期戦略
|
|||
|
|
1. **エンタープライズ版検討**
|
|||
|
|
- 酒販店向けPOSシステム連携
|
|||
|
|
- 飲食店メニュー管理機能
|
|||
|
|
- 在庫管理・発注支援
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 開発メモ(AI協調用)
|
|||
|
|
|
|||
|
|
### 重要な技術的決定事項
|
|||
|
|
- **AI解析**: Gemini Vision API 1.5 Flash(google_generative_ai ^0.4.6)
|
|||
|
|
- **ローカルDB**: Hive 2.2.3(NoSQL、暗号化対応)
|
|||
|
|
- **状態管理**: Riverpod 2.6.1(Provider pattern)
|
|||
|
|
- **ビルドフレーバー**: `--dart-define=IS_PRO_VERSION=true/false`
|
|||
|
|
|
|||
|
|
### 削除されたパッケージ(推測)
|
|||
|
|
以下は過去に存在した可能性があるが、現在のpubspec.yamlにはない:
|
|||
|
|
- `google_mlkit_text_recognition` - OCR機能
|
|||
|
|
- `connectivity_plus` - オフライン検知(必要なのに未導入)
|
|||
|
|
- `workmanager` - バックグラウンドタスク
|
|||
|
|
|
|||
|
|
### 今後導入すべきパッケージ
|
|||
|
|
```yaml
|
|||
|
|
dependencies:
|
|||
|
|
connectivity_plus: ^6.1.2 # オフライン検知
|
|||
|
|
# workmanager: ^0.5.2 # Background sync(Phase 2)
|
|||
|
|
# google_mlkit_text_recognition: ^0.13.1 # OCR Fallback(Phase 2)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 変更履歴
|
|||
|
|
- 2026-01-31: 初版作成(v1.0.5時点での削除機能分析)
|