Skip to content

アプリ全体をモダンなAndroid構成へ全面リファクタリング#29

Open
Atsumi3 wants to merge 20 commits into
mainfrom
claude/android-modernization-refactor-h1ksy6
Open

アプリ全体をモダンなAndroid構成へ全面リファクタリング#29
Atsumi3 wants to merge 20 commits into
mainfrom
claude/android-modernization-refactor-h1ksy6

Conversation

@Atsumi3

@Atsumi3 Atsumi3 commented Jun 11, 2026

Copy link
Copy Markdown
Member

概要

レガシー構成のアプリ全体を、Google 推奨アーキテクチャに沿った最新構成へ全面移行しました。挙動は原則として従来どおり温存し、変更点・温存判断はすべて下記に明記しています。

主な変更

UI 層

  • XML レイアウト + 複数 Activity / Fragment / DataBinding 構成を、Jetpack Compose (Material3) による単一 Activity + 画面ナビゲーション構成へ全面移行
  • 起動画面は SplashScreen API で再現、edge-to-edge 対応
  • 画面アイコンは外部ライブラリ依存をやめ同梱のベクター画像に置き換え

アーキテクチャ

  • DI を Koin から Hilt (KSP) へ統一。フレーバー別のAPI実装差し替えはソースセット分割で維持
  • greenrobot EventBus を全廃。設定値の変更は永続化層の変更監視で、バーコード読取イベントは単一の共有フローで配信
  • 設定永続化を SharedPreferences から Preferences DataStore へ移行。既存端末の設定値は自動マイグレーションで引き継ぎ
  • データ層を Repository パターンへ再編し、入出力スレッドの切り替えは注入されたディスパッチャで制御
  • 画面状態は StateFlow の UiState として公開し、ライフサイクル対応の収集で観測

ビルド・CI

  • Groovy DSL + buildSrc の二重管理を Kotlin DSL + Version Catalog に一本化
  • compileSdk / targetSdk を 36 へ更新
  • リリースビルドの難読化とリソース圧縮を有効化し、難読化ルールを新構成に合わせて整備
  • ハードコードされていた署名情報を外部ファイル読み込みに変更(開発用キーストアへのフォールバックあり)
  • CI を JDK 17 へ更新し、アクションをコミットSHAで固定。ビルドに加えユニットテストと静的解析を実行するワークフローを追加
  • 手動配布ワークフローの署名鍵復元処理を堅牢化。シークレットが未設定または復元不能な場合は警告を出して同梱の開発用キーストアで署名を継続するよう変更(従来はここでジョブが失敗していた)

品質

  • ログ出力を Timber へ移行し、jetifier を撤廃
  • 非推奨API(ハンドラ遅延実行、旧 Activity 結果受け取り、旧チャネルAPI)を全廃
  • デモフレーバーが起動時に必ずクラッシュする初期化不具合を修正
  • cleartext 通信の許可をアプリ全体設定からネットワークセキュリティ設定へ移行(LAN内サーバーとのHTTP通信要件のため許可自体は維持)、バックアップ規則を新形式に更新
  • テストを新設: ロジックのユニットテスト(Fake + コルーチンテスト + turbine、モックライブラリ不使用)と、JVM 上で実行する画面スモークテスト(Robolectric)

スコープ外

挙動に関する注記(レビュー時に確認ください)

  • 動作検証は CI(両フレーバーのビルド + ユニットテスト + 静的解析 + リリースビルド)で実施。実機・エミュレータでの検証は未実施のため、特に難読化有効のリリースビルドは実機確認を推奨
  • 手動配布ワークフローは、リリースビルドまで成功することを確認済み。最終の配布ステップのみ配布サービスの認証用シークレットが無効なため失敗する。シークレットの再発行・更新(リポジトリ管理者の作業)が別途必要で、本PRの変更起因ではない
  • 会計送信時に商品IDをカンマ連結しバーコード項目としてサーバへ送る挙動は、従来実装のまま温存
  • 本番モードの接続先書き換え処理は従来と同一実装を温存。API定義のパスにも同じプレフィックスが含まれるためURLが二重プレフィックスになる可能性があり、サーバとの結合確認を推奨(本変更起因ではなく従来からの構成)
  • 接続ステータス確認APIはどこからも呼ばれていなかったため契約ごと削除(確認用トースト表示も存在しない)
  • 桁数が不正なバーコードは黙って無視される(従来のエラー通知は再現していない)
  • バーコード読取中のキーイベント消費判定に従来と細かな差異がある
  • サーバーアドレス入力は1文字ごとに永続化される(従来挙動の温存)
  • クラッシュレポート(Firebase)は現行構成のまま据え置き
  • DIフレームワークはビルドツールチェーンとの互換性を確認した安定版に固定

関連 Issue

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd


Generated by Claude Code

claude added 20 commits June 10, 2026 14:14
- AGP 8.x はJDK 17必須のため、JDK 11のままでは配信ワークフローが失敗する状態だった
- 全アクションをコミットSHAで固定(タグ書き換え攻撃対策)
- 成果物パスを実際の出力先(app/build/outputs/apk/...)に修正
- push/PR時にビルド・テスト・lintを実行する検証用CIを新設

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- buildSrc を廃止しバージョンの二重管理を解消
- compileSdk/targetSdk を最新安定版へ更新
- Compose / Hilt / DataStore 等のモダンスタック依存を追加
- アノテーション処理を KSP へ移行する基盤を整備
- 署名情報をプロパティファイル経由の外部読み込みへ変更

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- API クライアントを抽象化しフレーバー実装を差し替え可能に
- demo フレーバーが起動時に必ずクラッシュする問題を修正
- ドメイン別の Repository を新設し IO ディスパッチャ制御を集約
- 設定値を Flow で観測できる Repository を新設(既存設定からの移行付き、配線は後続)

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- ネットワーク・ディスパッチャ・API 実装をモジュールとして提供
- Repository をコンストラクタ注入に対応
- 既存のランタイム DI とは共存させ、旧 UI の動作は変更しない

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
新系列のDI用Gradleプラグインが新しいメジャーバージョンのビルドツールを
要求しCIが失敗していたため、現行ビルドツールと互換のある最新安定版へ変更。

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
コルーチンライブラリ更新により旧ブロードキャスト型チャネルが
エラーレベル非推奨となりコンパイル不能になったため、
単一消費者で等価な動作のチャネルに置き換えた。

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- 全画面とダイアログを宣言的UIで再実装し、画面遷移をアプリ内ナビゲーションへ統一
- 旧画面・フラグメント・アダプタ・XMLレイアウトと関連リソースを削除
- DIを単一フレームワークへ統合し、イベントバスを型付きフローでの配信に置き換え
- 起動画面を公式のスプラッシュ機構で再現し、エッジツーエッジ表示に対応
- 設定値の反映をリアクティブな購読方式へ変更
- 画面上の固定文言を文字列リソースへ集約

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- 外部のアイコン集への依存を避け、必要な2点のみをリソースとして同梱
- アイコンに読み上げ用の説明文を付与

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- キー入力の横取り処理に対する誤検知の警告を抑制
- CIの静的解析が失敗した際、全指摘の一覧をジョブログに出力するよう変更

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- ログ出力をメンテナンスされている軽量ライブラリへ移行し、旧ライブラリ起因の互換変換設定を削除
- リリースビルドでコード縮小とリソース縮小を有効化し、不要になった難読化ルールを整理
- 平文通信の許可をネットワークセキュリティ構成へ移行し、バックアップ規則を最新の宣言形式で明示

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- README にアーキテクチャ概要・ビルド/テストコマンド・プロジェクト構成を追記
- 開発ガイドのアーキテクチャ説明・ログ規約・テスト規約を現行構成へ刷新
- 旧構成(XMLレイアウト/旧DI/旧イベント通知)の記述を削除

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- ユニットテストから画面リソースを参照できるようテスト基盤を配線
- メイン画面の会計ボタン活性とバーコード読取による商品反映を検証
- 設定画面のアドレス入力反映・モード切替・戻る操作を検証

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- どこからも呼ばれていない疎通確認用のAPI契約を実装・Fakeごと削除
- モード切替の分岐ロジックを列挙型側の単一メソッドに集約
- 預かり金の桁削除計算を整数除算に簡約し、店舗一覧取得の
  ローディング表示を通信が発生する分岐のみに限定
- 設定値3種の監視を単一の合成購読に統合
- デモ用API実装を本来のパッケージへ移動
- テストの依存構築の重複を共通ファクトリに集約
- 画面実装の完全修飾参照をimportに整理

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- 別スレッドから更新される接続先アドレスの書き込み可視性を保証
- 練習モードの店舗選択テストに失敗フラグの検証を追加

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- 機密値をコマンド展開から環境変数渡しに変更
- デコード時に改行や空白の混入を許容
- 機密値が未設定の場合は同梱の開発用キーストアで続行
- デコード失敗時に同梱ファイルを上書きしないよう一時ファイル経由に変更

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
- 機密値が base64 として解釈できない場合は警告を出して続行
- 署名は同梱の開発用キーストアを使用

https://claude.ai/code/session_01TbRomX8cQTi7d8w5hEBMQd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GithubActions 整備 Compose に置き換えたい バーコード読み取り機構部分のテスト強化 ViewModelのテスト強化

2 participants