- AI支援の開発環境で、経験の浅いエンジニアが検証されていない大規模なPRを提出する事例が増えている
- 開発者の中核的な任務は単なるコード記述ではなく、動作が実証されたコードを提供すること
- そのために、手動テストと自動テストの2段階を必ず実施しなければならない
- コーディングエージェントについても、自分が作成した変更を自ら検証するよう設定すべき
- 最終的に責任は人間の開発者にあり、検証の証拠を含むコードだけが本当の価値を持つ
検証されていないコード提出の問題
- LLMツールを活用するジュニアエンジニアが、巨大な未検証PRを提出してコードレビューに依存する事例が挙げられている
- これは無礼で非効率的であり、開発者としての責任放棄だと指摘されている
- ソフトウェアエンジニアの役割は単なるコード生産ではなく、動作が実証されたコードの提供である
- 検証されていないコードは、レビューアに負担を押し付ける行為と見なされる
コードが動作することを実証する2段階
- 第1段階は手動テストで、実際にコードが正しく動作することを自分で確認しなければならない
- システムを初期状態に設定し、変更を適用した後、結果を検証するプロセスが必要
- ターミナルコマンドと出力結果をコードレビューコメントに添付したり、画面録画で証明したりできる
- 正常動作の確認後は、エッジケースのテストを通じて問題点を探るべき
- 第2段階は自動テストで、LLMツールの進歩によって必須の手順として強調されている
- 変更内容とともに自動テストを含めるべきであり、実装を元に戻したらテストは失敗しなければならない
- テスト作成は手動テストと同じ手順に従い、テストハーネス統合能力が重要になる
- 自動テストだけで十分だと判断して手動テストを省略するのは、誤ったアプローチだと指摘されている
コーディングエージェントの役割と検証
- 2025年のLLM分野の主要な流れはコーディングエージェントの急成長で、Claude CodeやCodex CLIなどが代表例
- コーディングエージェントも自分の変更を証明しなければならず、手動テストと自動テストを実施すべき
- CLIツールでは、エージェントが直接実行するよう学習させたり、ClickのCLIRunnerのような仕組みで自動化したりできる
- CSS変更時には、スクリーンショットの取得で結果を確認するよう設定できる
- プロジェクトに既存のテストがあるなら、エージェントはそれを拡張したりパターンを再利用したりする
- テストコードの構成と品質は、エージェントのテスト生成品質に直接影響する
- テストコードに対する美意識は、シニアエンジニアを見分ける中核的な能力として言及されている
人間の責任とコードの価値
- コンピュータは責任を負えず、その役割は人間が担わなければならない
- LLMが大規模なパッチを生成することは、もはや価値ある行為ではない
- 本当の価値は、動作が実証されたコードを提供することにある
- PR提出時には、コードが正しく動作することを示す証拠を必ず含めるべき
4件のコメント
とても共感します。現在のPR方式では、コードの責任がメンテナーやレビュアーに転嫁される構造になっています。レビューしていないLLMコードを提出する人には不利益がありません。
Googleのコードベースに貢献してみると、コントリビューターのcreditのようなものを測定しているようですが、他のオープンソースや企業もこうした仕組みを導入することになりそうです。信頼がさらに重要な資産になるのではないかと思います。
ああ、そういう概念を使うんですね、Googleは
> 動作が検証されたコードを届けることがあなたの仕事だ
Hacker Newsの意見
最近よく見かける憂うつな話がある。LLMツールで力を得たジュニアエンジニアが、巨大でテストされていないPRを同僚やオープンソースのメンテナに投げ、コードレビューが残りを何とかしてくれると期待するケースだ。しかも悪いことに、こうした振る舞いはジュニアだけでなくシニア開発者にも見られる
良いPRの書き方は、AI生成コードに限らずあらゆる場合に当てはまる。私はPRの説明を書くとき、現在の動作、変更理由、変更内容の順に整理する。テスト方法やスクリーンショット、E2Eテストのコマンドまで含めて、レビュー担当者の負担を減らす。こうすると、非同期コラボレーションや時差のあるチームにも役立つ
エンジニアの本質は、要件を理解し、論理的な流れに変換し、トレードオフを調整し、結果に責任を持つことだ。コード生成や無作為なPR提出は、こうした基本が欠けている症状だ。コーディングエージェントは、むしろエンジニアリングの本質をあらためて思い出させるきっかけになっている
テストは必要だが、それだけで十分ではない。コードを論理的に検証する必要がある。テストは特定の入力と環境で正常に動作することを実証するにすぎない
私はテストを義務としてやっているわけではない。ただコードが実際に動くのを見たいからやっている。コードが動くのを見てワクワクしないなら、この仕事は向いていない
LLMのおかげでジュニアが巨大なPRを投げてくるという話は聞いたが、私たちの組織ではまだそういうことはない
「コードを証明済みの状態で引き渡すのが仕事だ」という言い方には同意しない。本当の仕事はビジネス上の問題を解決することだ。もちろん多くの場合、それはコードにつながるが、この区別は重要だ
以前の職場では、日本の高品質なハードウェアメーカーで働いていたが、QA部門がバグを見つけると製品のリリースが止まった。そこで各開発部門が独自のQCチームを作り、事前テストを強化した。その結果、ソフトウェアは非常に徹底して検証されていた
最近は仕事の本質がチケットを閉じることに変わってしまった。コード品質は統計に表れないので重要視されなくなる。私はそんなシステムには加わらない。今では職人技は消え、誰もが安い合板と接着剤を欲しがっている
「証明されたコード」の意味が問題だ。LLMが作ったテストを付けて巨大なPRを提出するケースもある。私も個人プロジェクトではvibe codingをするが、チーム単位でそうするのは悪い習慣だ。エンジニアを雇う理由は、彼らの専門性を買うためなのだから