※Claude Codeを使用して記事を作成しています。
シリーズ:Claude Codeを使ったAndroidアプリ開発 失敗談
- #1〜6:指示・ライブラリ・APIまわりの失敗
- #7:レビューせずにマージしたらメインスレッドで重い処理が走っていた話 ← 今回
📎 関連記事:バックグラウンド処理の失敗についての一般的な話は Androidのバックグラウンド処理で電池を爆食いさせた話 でも書いています。今回はClaude Codeで実装したコードが引き起こした同系統の問題です。
はじめに
Claude Codeが生成するコードは、多くの場合きれいで読みやすいです。
だからこそ油断が生まれます。
「Claude Codeが書いたなら大丈夫だろう」と、コードをほとんど読まずにマージしたことで起きた失敗です。
やらかしたこと
メモ一覧をFirestoreから取得する機能を実装した後、スクロールするとアプリが時々カクつくようになりました。
特に画像付きメモが多い画面で顕著でした。
Android Profilerで確認すると、メインスレッドに処理が集中しているのが見えました。
コードを確認すると、Firestoreからデータを取得する処理が onClick の中に直書きされており、UIスレッドで同期的に動いていました。
画像のリサイズ処理もメインスレッドで実行されていました。
どちらもClaude Codeが生成したコードです。
でも確認しなかった私の責任です。
なぜClaude Codeはこうするのか
Claude Codeは「動くコード」を生成することを優先します。
非同期処理のボイラープレートを省いたシンプルなコードを書く場合があります。
「まず動くものを作って、後で最適化する」という方針は理にかなっていますが、「後で最適化」のタイミングで気づかないと問題が残ります。
どう直したか
Claude Codeに状況を正直に伝えて直してもらいました。
Android Profilerで確認したところ、メインスレッドに処理が集中しています。
以下の処理をバックグラウンドで実行するよう修正してください。
・Firestoreからのデータ取得処理
・画像のリサイズ処理
Coroutinesを使って非同期化してください。
予防策:生成コードのレビューポイント
Claude Codeが生成したコードをレビューする際に必ず確認するポイントをまとめました。
非同期処理の確認:
・APIやDBアクセスはsuspend関数またはFlowで書かれているか
・onClickなどのUIイベントから直接重い処理を呼んでいないか
・CoroutineのDispatcherは適切か(IO処理にはDispatchers.IOを使っているか)
このひと言を追加するだけでかなり変わります:
実装する際、重い処理(DB・通信・ファイル操作)はすべて
バックグラウンドスレッドで実行してください。
Coroutinesを使って非同期処理で書いてください。
まとめ
「Claude Codeが書いたから安心」は禁物です。
生成コードは動くかどうかの確認だけでなく、適切な実装かどうかの確認も必要です。
特にスレッド処理は動作確認だけでは気づきにくいため、コードを一読する習慣をつけましょう。
次回:【Claude Code 失敗談 #8】テストを書かずにClaude Code任せにしたら品質が崩壊した話

