【Claude Code 失敗談 #7】レビューせずにマージしたらメインスレッドで重い処理が走っていた話

社員ブログ

※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任せにしたら品質が崩壊した話

タイトルとURLをコピーしました