※Claude Codeを使用して記事を作成しています。
シリーズ:Claude Codeを使ったAndroidアプリ開発 失敗談
- #11:Claude Codeに任せすぎてコードの意味が全くわからなくなった話 ← 今回
はじめに
これは少し違う角度の失敗です。技術的なバグではなく、自分自身がブラックボックスを抱えてしまったという話です。
やらかしたこと
Claude Codeで順調に開発を進め、アプリがほぼ完成した頃。
同僚に「この処理どうなってるの?」と聞かれて、答えられませんでした。
fun observeMemos(): Flow<List<Memo>> = callbackFlow {
val subscription = memoCollection
.orderBy("createdAt", Query.Direction.DESCENDING)
.addSnapshotListener { snapshot, error ->
if (error != null) { close(error); return@addSnapshotListener }
val memos = snapshot?.documents?.mapNotNull { it.toObject(Memo::class.java) } ?: emptyList()
trySend(memos)
}
awaitClose { subscription.remove() }
}
「callbackFlow って何?」「awaitClose は何のため?」「trySend の戻り値は?」
全部Claude Codeが書いたコードで、意味を理解していませんでした。
何が問題なのか
自分で書いたコードでない場合、:
- バグが出たときに原因の見当がつかない
- 修正しようとして別のバグを生む
- コードレビューで指摘されても返答できない
- 同じ処理を別の場所で書けない
Claude Codeは優秀な実装者ですが、コードの理解は自分の責任です。
どう直したか
コードを生成してもらった後に、必ず説明を求める習慣をつけました。
今書いてもらったコードについて教えてください。
1. callbackFlow を使っている理由
2. awaitClose { subscription.remove() } の役割
3. trySend と send の違い
4. このコードを読む際に「ここが重要」というポイント
初心者にわかるように説明してください。
「説明付きでお願いする」を指示に含める
最初から説明を含めてもらう指示もできます。
Firestoreのリアルタイムリスナーを実装してください。
コードの各部分にコメントを日本語で書いてください。
特に「なぜこう書くのか」という理由も添えてほしいです。
「自分で書けるか?」テスト
自分の理解度を確認する方法として、Claude Codeなしで同じコードが書けるかを試すのが一番正直です。
書けなければ、まだ理解が足りていません。
完全に書けなくても、「大まかな流れ」を言葉で説明できるくらいの理解は持っておくべきです。
まとめ
Claude Codeは「書いてくれる」ツールですが、「理解してくれる」ツールではありません。
書いてもらったコードは、必ず自分で理解する。これがClaude Codeと長く付き合うための大原則です。
次回:【Claude Code 失敗談 #12】APIキーをそのまま書かせてGitHubに上げてしまった話

