※Claude Codeを使用して記事を作成しています。
シリーズ:Claude Codeで実務Androidアプリ開発
- 第1〜6回:ログイン・認証・Firestore・Push通知・地図・カメラ
- 第7回:アプリのパフォーマンスを改善しよう ← 今回
はじめに
機能が増えてきたので、ここで一度立ち止まってアプリの品質を高めましょう。
今回は「動くけど遅い・重い・使いにくい」を改善するパフォーマンスチューニングに取り組みます。
実務では「動く」だけでなく「快適に動く」ことが求められます。
Claude Codeと一緒に、ユーザーが気持ちよく使えるアプリに磨き上げましょう。
今回取り組む改善内容
| 課題 | 改善内容 |
|---|---|
| 画像の読み込みが遅い | キャッシュと圧縮の最適化 |
| スクロールがカクつく | 一覧表示の処理を効率化 |
| 起動が遅い | 起動時の処理を整理する |
| 通信エラーへの対応が弱い | オフライン時の挙動を改善する |
| メモリ使用量が多い | 不要なデータを適切に解放する |
Step 1:画像の読み込みを最適化す
画像の多いアプリで最もよく起きる問題が「画像の読み込みが遅い・スクロールするとカクつく」です。
✍️ Claude Codeへの指示例:
メモ一覧のサムネイル画像の読み込みを最適化してください。
以下の改善をお願いします。
・Coilライブラリを使って画像の非同期読み込みとキャッシュを実装する
・画像が読み込まれるまでの間はグレーのプレースホルダーを表示する
・読み込みに失敗した場合はエラー用のアイコンを表示する
・一覧画面のスクロール時にカクつきが出ないようにする
Step 2:Firebase Storageにアップロードする画像を圧縮する
✍️ Claude Codeへの指示例:
画像をアップロードする前に圧縮処理を追加してください。
・アップロード前に画像を最大1280×1280ピクセルにリサイズする
・JPEG品質を80%に圧縮する
・圧縮後のファイルサイズが元のファイルより小さくなっていることを確認するログを出す
Step 3:一覧画面のデータ取得を効率化する
メモが増えてきたとき、全件を一度に取得すると時間がかかります。
✍️ Claude Codeへの指示例:
メモ一覧のデータ取得を効率化してください。
・最初は20件だけ取得して表示する
・リストの一番下までスクロールしたら次の20件を追加で取得する(無限スクロール)
・追加読み込み中はリストの下にローディングインジケーターを表示する
Step 4:オフライン時の挙動を改善する
Firestoreはオフライン時でも動作するキャッシュ機能を持っています。これを活用してオフラインでも使えるようにします。
✍️ Claude Codeへの指示例:
インターネット未接続時の挙動を改善してください。
・Firestoreのオフラインキャッシュを有効化して、
オフライン時でも保存済みのメモを閲覧できるようにする
・オフライン時は画面の上部に「オフラインモード:接続が回復したら同期します」
というバナーを表示する
・オフライン時にメモを作成・編集した場合、接続回復後に自動で同期されるようにする
Step 5:起動時間を短縮する
アプリの起動が遅い場合、スプラッシュ画面の処理を見直します。
✍️ Claude Codeへの指示例:
アプリの起動を速くしてください。
・スプラッシュ画面での処理を見直して、必須でない初期化処理を遅延させる
・ログイン状態の確認は非同期で行い、完了次第すぐに次の画面に遷移する
・起動時に全メモを先読みするのをやめて、一覧画面が表示されてから取得する
Step 6:メモリリークを防ぐ
✍️ Claude Codeへの指示例:
メモリリークが起きていないか確認して、問題があれば修正してください。
特に以下の点を確認してほしいです。
・画面を閉じたときにFirestoreのリアルタイムリスナーが解除されているか
・ViewModelのスコープが適切か
・大きな画像データが不要になったタイミングで解放されているか
動作確認チェックリスト
- [ ] 一覧画面のスクロールがスムーズになっている
- [ ] 画像が読み込まれるまでプレースホルダーが表示される
- [ ] 画像アップロード時のファイルサイズが元より小さい(ログで確認)
- [ ] 一覧の下までスクロールすると追加データが読み込まれる
- [ ] 機内モードにしてもすでに読み込んだメモが表示される
- [ ] 機内モードで作成したメモが、オンラインに戻ると同期される
- [ ] アプリの起動時間が改善されている
まとめ
| 学んだこと | ポイント |
|---|---|
| 画像の最適化 | Coilでキャッシュ・アップロード前に圧縮 |
| 無限スクロール | 全件取得をやめて20件ずつ読み込む |
| オフライン対応 | Firestoreのキャッシュを有効化するだけで基本対応できる |
| メモリリーク対策 | リスナーの解除タイミングをClaude Codeに確認してもらう |

