世界を動かす技術を、日本語で。

AIコーディングツールは生産性を低下させる可能性がある

概要

  • 2025年春のMETR実験が、AIコーディングツールの生産性への影響を検証
  • 経験豊富な開発者による成熟プロジェクトで、AIツール使用時に19%の生産性低下を観測
  • 参加者自身は生産性向上を感じていたが、実測値と大きく乖離
  • 研究は厳密な方法論で実施され、バイアスや代替要因も検証済み
  • AIツールの限界と課題を明確に示す結果

AIコーディングツールの生産性への影響:METR実験の概要

  • METR は2025年春、AIコーディングツールが 熟練開発者 の生産性に与える影響を調査
  • 対象は 大手オープンソースプロジェクト の開発者16名
  • 246の開発タスクを「 AI使用可」「 AI使用不可」にランダム割当
  • 参加者は各タスクの所要時間を事前予測し、実作業後に実際の所要時間を記録
  • AI使用時、予測より実際の所要時間が19%増加し、 生産性が低下

研究方法とバイアス検証

  • 実験は ランダム化比較試験 で実施、現実の開発現場を再現
  • 参加者・研究者ともにAI利用可否を把握していたが、 バイアス要因 を多角的に検証
    • John Henry効果 (AI不使用時の過剰な努力)は観測されず
    • AIツールの未使用チート も影響せず
    • 過度な楽観的見積もりタスク定義の偏り も排除
    • ツールの陳腐化時間報告の不正確さ も否定

生産性低下の要因

  • AIの過剰利用 :一部参加者がAI機能を過度に使用し、逆に効率悪化
  • AIツール経験の不足 :参加者の経験値に幅があったが、全体傾向に大きな影響なし
  • 開発環境の違い :一部が通常環境からCursorへ移行したが、作業効率に大きな影響なし
  • 作業範囲の拡大 :AI使用時にコード量が増加したが、有意なスコープ拡大の証拠は弱い
  • 作業負荷の質的変化 :AI利用で作業時間は増えても、エネルギー消費は減少の可能性

AIツールが生産性を下げた主な理由

  • AI生成コードの品質不足 :オープンソースプロジェクト基準を満たさず、レビューや修正に多大な時間を要する
  • AIとの反復作業 :プロンプト→生成→レビュー→再プロンプトの繰り返しで非効率
  • 生成コードの採用率低下 :Cursorによるコード生成のうち、採用はわずか39%
  • 開発者が最終的にAI生成コードを放棄するケースも多発

考察と今後の課題

  • 一部の 逸話的な生産性向上報告 は現実だが、全体的な効果は限定的
  • AIツールは現時点で 万能ではなく、特に熟練者の複雑な開発現場では限界
  • 生産性低下の一部は、 作業の丁寧さ向上やエネルギー消費の低減 というポジティブな側面も含む可能性
  • 今後は AIツールの品質向上 と、 開発者の適切な活用スキル が求められる

Hackerたちの意見

LLMのおかげでフロントエンドの仕事が10〜20倍効率的になったけど、あんまりやってないんだよね。でも、低レベルのこと(C/C++)に関しては、あんまり役に立たないと思う。スタックオーバーフローを検索する必要がなくなるだけ。追記:低レベルの作業は成熟したコードが多くて、結構新しいものもあるって言うのを言い忘れてた。

同じく。フロントエンドにはすごくいいよね。

面白いね、私は逆のことを感じてる。とはいえ、効果は少しだけど(多分50%くらい)。Ruby/Py/Javaのバックエンド開発に無理やり入れられたけど、日常の改善にはあまり役立ってないな。特にCに関しては、複雑だけど一般的なデータ構造をミスなく作り出せるから、自分なら一発でエラーを出しちゃうだろうな。趣味でCをやってるから、UIライブラリの仕様に基づいて動的なCディスパッチャーの配列を生成するような、もっと面白くて複雑な問題を解決することが多いんだ。Gemini Proは数回の試行/修正の後にYAML方言のパーサーを出力してくれたし。AIを使う問題の慣れ具合によるのかもしれないね。

これはGell-Mannの忘却効果に似てる気がする。最近、私の会社はコーディングのためのAIツールを調査してるんだ。遅れてるって思うかもしれないけど、私たちはDoDのコンサルタントで、ソフトウェア開発とはあまり関係ないところなんだ。だから、会社のほとんどの人はAIの出力にすごく感心してる。私は最近入ったばかりで、特に「ワイルドカード」として雇われたんだ。つまり、3000人の会社の中でソフトウェアに関して何をしているか知ってるのは10人くらい(それも多めに見積もってるけど、会社の半分も見えてないし)。だから、99.7%の人は良いソフトウェア開発がどういうものか分からないんだ。AIを使ってる人たちが出してるものは、ミルオプスのアナリストが書いてたPythonスクリプトよりはマシだけど、品質のあるソフトウェアとは言えない。バックエンドとフロントエンドの両方でかなりの経験があるけど、「生涯にわたって維持される必要があるソフトウェアを書くことに全く経験がない賢い人たちが書いたコード」よりは一歩上だけど、「生涯にわたって成功裏に維持できるソフトウェア」には程遠い。

最近、ちょっとシステム寄りのRustコードをいじってて、約1年前の初期のコーパイロットを使ってC++のシステムコードにも使ったことがあるんだ。この場合、スマートなオートコンプリートが大幅な時間節約になることが分かった。実際、インタラクティブな機能やエージェント機能よりも私には価値がある。最近のバッファにあるコードの一部を紹介するね: // すべての名前付き出力が統合されている場合、命令はスキップされるべきです。 if ! self.should_keep_instr(instr) { return; } // 非ドロップは選択肢を持つべきです。 let instr_choice = choices.maybe_instr_choice(instr_ref) .expect("命令に対する選択肢がありません"); self.pick_map.set_instr_choice( instr_ref, instr_choice.clone(), ); // PIR選択肢に対してすべての名前付き定義入力をインクリメントします。 instr_choice.visit_input_defs(|input_def| { self.def_incref(input_def); }); // SIR命令に対してすべての名前付き定義入力をデクリメントします。 instr.visit_inputs( |input_def| self.def_decref(input_def, sir_graph) ); 実際に私が書いたのはコメントだけなんだ。構文を打ち込む必要がないのはかなり大きな節約だよ。手動コーディングの80%はそれに費やされてたと思う。ちょっとしたタイプミスやフォーマットを整えるための微調整が多いからね。もう一つの良い点は、LLMを信頼する必要がないこと。各スニペットをその場で評価できるし、通常は機械が他のコードベースやファイルから構文スタイルやセマンティクスをうまく拾って適用してくれる。スニペットは明らかでない場合、私が作業しているコンパイラのバックエンドコードの一部からのものだよ。この支援がなければ、余暇にコンパイラのバックエンドを書くことなんて絶対に試みなかったと思う。経験豊富な開発者にとって、オートコンプリートは開発スピードの大幅な効率向上に十分だね。エージェントインターフェースにはまだ慣れてないけど、LLMが正しいコードを信頼性高く生成するとは思えないから、いつもレビューしちゃうし、グリーンフィールドコードのレビューは書くよりも多くの作業になることが多い(特に今はオートコンプリートが書くのを速くするのに役立ってるから)。

まさに私の経験と同じだね。エージェントにバックエンドコードの一部を書かせたことがあるけど、いつも小さな部分だけ。自分が書いてないコードでもすぐにデバッグできるくらいの経験があるから、失敗したときもすぐに対応できる(最初の実行から必ず失敗するけど)。AIを使ってレポートを書くのと同じで、アウトラインにはいいけど、詳細はいつも品質的にランダムな感じ。フロントエンドに関しては?私があまり専門じゃないところ(1997年にFrontPageで始めたHTMLの一部があるけど)、本当に助かってる。プロンプトには気をつけないといけないけど、今や多くのフロントエンドフレームワークは基本的にバックエンドコードだからね。

フロントエンドがただ通過するだけのものであればいいけど、仕事がフロントエンドに移行するなら最悪だね。自分でスキルを身につけることはできなくなるから。

低レベルのC/C++では、関連する定義をしっかり含めて、非明示的なコンテキスト(いろんなオブジェクトのライフサイクルとか)を提供して、プロンプトを集中させれば問題なく動くよ。「この既知のアルゴリズムをそのプロジェクト特有のデータ構造に適用する」みたいなことはすごくうまくいくし、時間も節約できる。メモリの組織に対する直感が必要なことは、モデルを見守る覚悟がないと上手くいかないね。

フルスタックエンジニアとして、チーム内で大体65/35の割合でバックエンドとフロントエンドを担当してるけど、毎日こういうのをレビューするのが本当に嫌だ。バックエンドの人がフロントエンドのチケットを書くのも、その逆も。先週も、バックエンドの人が書いたフロントエンドのチケットのレビューをしなきゃいけなかったんだけど、「90%はできてるから、引き継いでも大丈夫だよ」ってコメントがついてた。ほとんど全部捨てて、ゼロから書き直さなきゃいけなかった。俺の解決策は150行くらい修正したけど、AIの出力は機能しないし、見た目も悪いし、パフォーマンスも最悪で800行くらいあった。コミットメッセージも「素晴らしいものにした!!1!1!!」みたいな、全然役に立たない一般的なものだった。彼らを責めることもできないけど、Cレベルの人たちがAIに夢中になってるから、こういうことをやらないと scrutinized されて PIP されるんだよね。少なくともフロントエンドの人たちは、良い解決策かどうかわからないって謙虚に言ってくれるけど、バックエンドの人たちはなぜかフロントエンドの仕事をいつも軽視してる(このスレッドでも見えるし)。本当に不思議だわ。

こちらが研究の方法論です:>「AIツールがソフトウェア開発に与える実際の影響を直接測定するために、数年間貢献してきた大規模なオープンソースリポジトリから16人の経験豊富な開発者を募集しました(平均22k以上のスターと100万行以上のコード)。開発者は、リポジトリにとって価値のある実際の問題(合計246件)をリストアップします—バグ修正、機能、リファクタリングなど、通常の作業の一部となるものです。その後、各問題にAIの使用を許可するかどうかをランダムに割り当てます。AIが許可されている場合、開発者は好きなツールを使用できます(主にCursor ProとClaude 3.5/3.7 Sonnet—研究時点での最前線モデル)。許可されていない場合は、生成AIの支援なしで作業します。開発者はこれらのタスク(平均2時間)を画面録画しながら完了し、必要な実装時間を自己報告します。研究への参加に対して開発者には時給150ドルの報酬を支払います。サンプルサイズは16人の開発者と小さいですが、異なるタスクが(ランダムに)AIなしとAIありのグループに割り当てられたようなので、対照群は実験群と同じタスクではありません。これがかなりノイズの多いデータにつながるかもしれません。興味深いことに、小さいサンプルサイズは著者が「あなたが考えたすべての異議に対処する」として挙げた異議のリストには含まれていません。面白い研究だと思うけど、あまり深く考える前に結果が再現できるかを見てみたいな。

サンプルサイズは16人の開発者じゃなくて、246件の問題だよ。

多くの人が絶賛する生産性の向上って、経験があればライブラリYを使ってXをやるのは簡単で、しかもそのライブラリYは結構人気で、LLMが一発で完璧にやってくれるって感じだと思う。そこで10〜20倍の効果が出るんだよね。でも、ニッチなことをやってると、うまくいかないか、うまくいっても効果が薄い。例えば、今ffmpegのフィルターがXのことをスムーズにやらない理由を考えなきゃいけないんだけど、そのフィルターのCコードは小さいし、自己完結してるのに…Geminiはコードにコメントを追加することを拒否するんだ。150行のコードにコメントを追加できないことを謝るだけで笑っちゃう。でも、Pythonでffmpegのパイプラインを構築する時は、プロトタイピングがめちゃくちゃ早くて、結構複雑なフィルターのチェーンを作るのが楽しかった。もし手作業でドキュメントを読みながらやってたら、もっと時間と労力、イライラがかかったと思うけど、Geminiと一緒にやるのは楽しかった。だから、研究に戻るけど、個人的には欠陥があると思う。オープンソースプロジェクトの新機能に取り組むことは、LLMの主な仕事じゃないから、ほとんどの人はそんなことしてないし、10000人が書いた同じコードを自分のちょっとしたアレンジで書き直してるだけなんだよね。

Hacker Newsで議論の続きを見る