【Claude Code 失敗談 #11】Claude Codeに任せすぎてコードの意味が全くわからなくなった話

Android

※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に上げてしまった話

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