3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIに書かせる時代だからこそ、コード1行を読む

3
Last updated at Posted at 2026-11-10

はじめに

最近はAIを使ってアプリの修正をすることが増えました。指示を出せば、それなりに動くコードがすぐに出てきます。

その一方で、「動いたからOK」とソースの中身を理解しないまま作業を終えてしまうことが、自分にもありました。

だからこそ私は、AIにコードを書かせる時代だからこそ、人間が1行ずつコードを読むことが大事だと考えています。この記事では、なぜそう考えるのかを整理します。

私はコードレビューで鍛えられた

AIがなかった頃、私はコードレビューでたくさんの指摘を受けてきました。

そこで、コードレビューに臨む前にコードを1行ずつ読み、「なぜこう書いたのか」「このコードがどう動いているのか」を説明できるようになるまで読み込むようにしていました。

今振り返ると、この習慣がプログラマーとしての力の土台になっていたと感じています。

動く≠正しい

「動いた」は「正しい」ことを意味しません。
例えば下記のような「変数.equals() で比較する」コードです。

if (status.equals("0")) {
    // 処理
}

普段のテストでは status に必ず値が入っているので、問題なく動きます。しかし、DBの値が未設定だったりAPIから値が返ってこなかったりして status が null になると、NullPointerException で落ちます。

if ("0".equals(status)) {  // statusがnullでもfalseになるだけで落ちない
    // 処理
}

正しくは、このように定数側から equals を呼び出します。

動作確認ではOKになりますが、「この変数はnullになりうるか」という1行の意味を「理解」していれば、読んだ瞬間に気づくことができます。

「理解」とはどういう状態か

「理解するまで読む」と言っても、そもそも理解するとはどういうことなんだろうと感じました。
そこで、理解をできることで定義してみます。

  1. 知っている:読んで「なるほど」と思える(まだ理解ではない)
  2. 説明できる:何も見ずに、自分の言葉で「何をしているか・なぜか」を言える
  3. 予測できる:初めての入力(null、空、境界値など)が来たとき、どう動くか実行前に当てられる
  4. 変更できる:仕様が少し変わったとき、他を壊さずに直せる
  5. 判断できる:別の書き方と比べて、なぜこれがいいのかを言える

私は、少なくとも「3. 予測できる」まで行くことが、「理解した」の最低ラインだと考えています。
説明だけなら丸暗記でもできますが、予測は中身を理解していないとできないからです。

なぜ1行ずつ読むことが大事なのか

関数が何をしているかは、関数名や全体の雰囲気ではなく、1行1行の積み重ねで決まります。
どこか1行でも読み飛ばすと、「だいたいこういう関数」という思い込みが残り、実際の動きとズレてしまいます。次のコードで見てみます。

List<User> getUsers(List<User> users) {
    List<User> result = new ArrayList<>();
    for (User u : users) {
        if (u.isDeleted()) continue;
        if (u.getLastLogin().isBefore(LocalDate.now().minusYears(1))) continue;
        result.add(u);
    }
    result.sort(Comparator.comparing(User::getName));
    return result.subList(0, Math.min(10, result.size()));
}

ざっと読んだ場合

関数名とループの形から、「ユーザーの一覧を返す関数」に見えます。

1行ずつ読んだ場合

1行ずつ読むと、実際はこういう関数だと分かります。

  • if (u.isDeleted()) continue;:削除済みのユーザーは除く
  • if (u.getLastLogin()...) continue;:1年以上ログインしていないユーザーも除く
  • result.sort(...):名前順に並べ替える
  • result.subList(0, ...):先頭の10件だけ返す

どの1行を飛ばしても、この関数の説明が変わってしまいます。

1行読み飛ばすと何が起きるか

たとえば最後の1行を読み飛ばすと、「全件返す関数」だと思い込んでしまいます。
その結果、画面に11人目以降が表示されないことを不具合だと勘違いしたり、この関数を別の機能で使い回して「件数が足りない」というバグを生んだりします。
コード自体は正しく動いているのに、読む人の理解がズレているせいで問題が起きるわけです。

1行ずつ読むと「説明できる」ようになる

1行ずつ読んで初めて、「この関数は、削除済みと1年以上ログインしていないユーザーを除いて、名前順に並べた先頭10件を返す」と、自分の言葉で正確に説明できるようになります。
これは前に挙げた「理解」の5段階のうち、「2. 説明できる」にあたります。そしてこの説明ができて初めて、「この関数に0件のリストが来たら?」と「3. 予測できる」に進めます。

特にAIが書いたコードは見た目が整っているので、ざっと眺めただけで分かった気になりやすいです。だからこそ、1行ずつ読むことが大事だと考えています。

おわりに

AIのおかげで、動くコードを手に入れるコストは劇的に下がりました。
だからこそ、人間の価値は「動くコードを書くこと」から「コードを理解し、正しいと判断できること」だと感じます。

1行ずつ読むことは、地味で時間のかかる作業です。
でもそれが、関数が本当は何をしているのかを正しく把握し、AIが書いたコードを読む力を育ててくれます。

「動いたからOK」で終わらせず、1行ずつ読んで、自分の言葉で説明できるまで理解する。
AIにコードを書かせる時代だからこそ、この習慣を大事にしていきたいです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?