8月2日、Ankur Sethiが「Prevent cognitive debt by manually retyping LLM-generated code」と題した記事を公開した。LLMが生成したコードをあえて手で打ち直すことで「認知的負債」を防ぐというワークフローを詳述した内容で、AIコーディングアシスタントが急速に普及する現在の開発現場に一石を投じる内容となっている。
LLMに「ファイルを直接触らせない」という逆張り
GitHub CopilotやCursorといったAIコーディングアシスタントの普及により、「コードレビューは人間が、実装はAIが」という分業が当たり前になりつつある。しかしAnkur Sethiは、そのモデルに疑問を呈する。
LLMが生成したコードをそのままプロジェクトに適用すると、大量の「認知的負債(cognitive debt)」が積み上がる。認知的負債とは、コードは動くが自分がその仕組みを理解していない状態のことで、技術的負債(technical debt)の概念を認知・理解の面に応用した言い方だ。かといってAI生成のPRを数百行レビューするのも苦痛である。Sethiは「過剰に防御的で、コメントも不十分で、微妙に間違っているコードを精査するのは楽しくない」と率直に述べている。
そこで彼が行き着いたのが、一見非効率な解決策だ。
LLMにはチャット上でコードを提示させるだけにして、実際のファイル編集はすべて自分の手で行う。
この方針を徹底するため、個人プロジェクトのエージェント設定ファイルには以下の指示を記載している(日本語要旨は後述)。
I want to understand every line of code that goes into this project. Never create, edit, move, rename, or delete project files unless I explicitly ask you to do so. Instead, show me every proposed edit in the chat so I can type it in manually.
Do not run commands that modify project files, install dependencies, or change repository state unless I explicitly request that action. Instead, show me those commands in the chat so I can run them manually.
I'm an experienced developer. Do not explain syntax, APIs, programming concepts, or implementation details unless explicitly asked.
【日本語要旨】 このプロジェクトに入るコードはすべて自分で理解したい。明示的に依頼しない限り、プロジェクトファイルの作成・編集・移動・削除は行わないこと。変更案はチャット上で提示し、自分が手で打ち込めるようにすること。依存パッケージのインストールやリポジトリ状態を変更するコマンドも同様に、自分が手動で実行できる形で提示すること。自分は経験豊富な開発者なので、明示的に求めない限り、文法・API・実装の詳細を説明しないこと。
LLMに直接ファイルを触らせず、コマンドも自分で実行する。AIはあくまで「提案を出す機械」として使い、判断と入力は人間が担う構成だ。
「10倍速」より「2倍速+理解」を選ぶ
このワークフローでは、LLMを使わない場合より速く作業できる。ただし、LLMに自由に動かせる場合と比べると遅い。Sethiの見積もりでは「10倍速ではなく、おそらく2倍速」だ。
それでもこのアプローチを続ける理由として、彼は三点を挙げている。
- コードの空間的マップが形成される。 どの機能がコードベースのどこにあるかを把握できるため、変更箇所の特定が速くなる。また、LLMへの指示の精度も上がる。
- ハルシネーションや設計ミスを検出しやすくなる。 手で打ち込むことで自然にペースが落ち、コードを流し読みせずに済む。不審な箇所に気づきやすい。
- コードを自分の流儀に整えられる。 打ち込みながら、コメントの追加・リファクタリング・構造の整理をその場で行える。
「コピペするな」という昔の教えの現代版
Sethiは、この手法を学習期の原体験と結びつけている。コードを覚えたての頃、先輩エンジニアたちから「書籍のサンプルコードはコピペせず自分で打て」「フォーラムの回答も写経して自分のコードベースに合わせろ」と言われ続けた。
LLM生成コードを手打ちする行為は、その写経の現代版だ、と彼は言う。最も効率的な方法ではないが、生産性より理解を優先する選択である。
ソフトウェア業界全体への懸念
記事の終盤でSethiは、個人的な実践を超えた問題提起をしている。
I fear the software industry is taking on a large amount of cognitive debt that we'll have to pay back very soon. There will come a time when we no longer understand how large parts of our digital infrastructure are put together.
【日本語訳】 「ソフトウェア業界全体が大量の認知的負債を抱え込んでおり、それを返済しなければならない日が近づいているのではないかと危惧している。デジタルインフラの大部分がどのように構成されているのか、誰も理解できなくなる時代が来るかもしれない。」
業界全体がAI生成コードを積み上げ続けた結果、誰も理解していないインフラが出来上がる——そのリスクを指摘する。個人としてできることは限られているが、「自分が世に出すソフトウェアは完全に理解した状態で出す」という姿勢を崩さないと宣言している。
このワークフローをSethiは数カ月間実践しており、今後も続ける予定だという。
詳細はPrevent cognitive debt by manually retyping LLM-generated codeを参照していただきたい。