はじめに — エージェント時代に書き直された古い格言
「人間が保守するつもりでコードを書け」は、ソフトウェアで最も古い助言の一つです。理屈はいつも単純でした。コードは一度書きますが何十回も読まれるので、書き手ではなく読み手に最適化せよ、というわけです。
気の利いた一行トリック、節約したキーストローク、機械に優しい小細工は、どれも次の人が一目で理解できる平凡で退屈で当たり前のコードに負けます。何十年ものあいだ、その「次の人」は間違いなく人間でした。
2026年7月10日、Scott Robinson がまさにそのタイトルで短い記事を公開し、この古い一文を新しい場所へ連れて行ったために話題になりました。彼の主張は、職人技へのよくある郷愁ではありません。
それは、その助言の「次の保守者」が大規模言語モデルであるとき何が起きるか、という話です。そしていま私たちの多くが、出荷するコードのほとんどをエージェントに書かせ、直させているからこそ、この問いは感傷的というより切実に感じられます。
この記事が実際に主張していること
Robinson はまず、もっともらしい自己正当化を皮肉として持ち出します。「LLM の最良の点の一つは、一日中あなたの代わりにコードを書いてくれることだ。DRY なんて誰が気にする?」
AI が四つのファイルにある同じ長い条件文を勝手に更新してくれるなら、わざわざ共通ヘルパーを抽出する必要があるでしょうか。彼の言葉では、「あとで何かを変える必要が出たら、私ではなく LLM が対処する」というわけです。
彼の具体例は、ルートハンドラ、バックグラウンドジョブ、API エンドポイント、Webhook の四か所すべてに置く必要のあるアクセスチェックです。一つの共通ヘルパーを書く代わりに、彼はモデルにほぼ同じコピーを各所へ貼り付けさせました。
if (user.isActive && user.hasPermission('read') &&
!user.isSuspended && account.status === 'open') {
// do a thing
}
そして、この記事を読む価値のあるものにする転回が来ます。LLM は単独では動きません。それはあなたの既存コードを読み、それをスタイルガイドとして扱います。Robinson の言葉では、「あなたがコードベースにマージするあらゆる近道は、ここでは物事をこう進めるという合図だ」というのです。
だから重複した条件文は、あとで返す技術的負債にとどまりません。それはいまこの瞬間、あなたがモデルに与えている学習データです。モデルはコピーを四つ見て、重複がこの場所の慣習だと結論し、律儀に五つ目と六つ目を作り出します。
匂いは積み重なり、パターンがいったん定着すると元に戻すのは難しくなります。モデルが周囲の例を見て、それを再生産し続けるからです。Robinson の締めの一文が核心を突きます。「LLM は、あなたのすることを何でも吸い込み、そのまま返してくるスポンジだ。だから、それが良いものであるようにせよ。」
機械がコードを保守しても、この原則は有効か
これは正直な問いで、私の答えは「はい」です。ただし「きれいなコードは美徳だ」よりも鋭い理由からです。
保守者が機械だけである、ということは決してない、という事実から始めましょう。誰かが依然として diff をレビューしなければならず、いまやレビューこそが本当のボトルネックです。エージェントは、人間が検証できる速度よりはるかに速くコードを生み出すからです。
読みやすいコードは、そのままレビューしやすいコードです。明確な名前と小さな関数は、レビュアーが深夜二時の障害対応で巧妙さの壁をリバースエンジニアリングする代わりに、数秒で意図を確認できるようにしてくれます。読み手に最適化せよという言葉は、そもそも書き手の快適さではなくレビュアーの快適さについてのものであり、そのレビュアーはどこへも消えていません。
続いて Robinson 自身の論点は、DRY よりもう一段深く切り込みます。AI は読んだものをそのまま映すので、あなたのリポジトリは、いつのまにかあなたが絶えず書き続けているプロンプトになっています。一貫してうまく分割されたコードベースは次の世代の出力を良い方へ導き、散らかったコードベースは自らの散らかりを機械の規模で返してきます。
この記事をめぐる議論で、実務者たちは関連する劣化を指摘しました。何度も反復するうちに、モデルのコード把握とコード自体の簡潔さがともに崩れ、それとともに出力品質も落ちる、というのです。失敗の形は一つの悪い関数ではなく、モデルがあなたの悪い癖を何百ものファイルにわたって増幅することです。
「人間のために書け」を怠惰に読むことには、反論を付けたいところです。それは、すべてを好みで手作業で磨けという免許ではありません。同じ議論では、否定形の指示や長大なスタイルチェックリストが、かえってエージェントの性能を下げうる、という指摘が明快でした。
リンター、フォーマッタ、型チェッカー、静的解析といった決定論的なガードレールは、プロンプト内の散文よりもはるかに確実に一貫性を強制します。「人間のために書け」と「ツールに強制させろ」は、競合ではなく同じプロジェクトです。
いまも元が取れる習慣
古典のどれ一つ廃止されていません。むしろエージェント時代は、それらの習慣の見返りを高めます。あなたが残すすべてのパターンが、この先コピーされるパターンだからです。
- 明確な命名: 何よりもレバレッジの高い習慣です。名前はコードブロックの圧縮された意図であり、人間のレビュアーもモデルも、何かが何をするのかを最初に推測するときに真っ先に見る手がかりです。
- 小さく単一目的の関数: 読みやすく、テストしやすく、エージェントが隣に少し違う変種を新造する代わりに再利用しやすいままです。
- 何ではなく、なぜを説明するコメント: コードはすでに何をするかを語っています。良いコメントは、当たり前の方法をなぜ退けたのかを捉えます。人間であれ機械であれ、構文だけからは復元できない文脈です。
- 本当の分岐の源を消すときだけ DRY: Robinson の例が教科書的な好例です。一つのアクセス規則を、一か所で変えれば、どこでも正しく。
- 退屈な一貫性は決定論的ツールに任せる: ツールは疲れず、言い返さず、エージェントに合わせるべき明確な標的を与えます。
正直な但し書きとして、DRY はタダではなく、「人間のために書け」は機会があるたびに抽象化せよという意味ではありません。早すぎる抽象化はそれ自体が保守の負担であり、無関係な二つのコードを無理に一つのヘルパーへ束ねることは、少しの正直な重複より悪いのです。
これが本当に同じ規則なのか、それとも今日たまたま似て見える二つの規則なのかを見極める仕事 — それこそ、モデルではなく私たちに残された意図の仕事です。その判断は、どんなスポンジも吸い込めない、人間のために書くことの一部です。
おわりに
人間が保守するつもりでコードを書け、という助言は AI エージェントの登場を生き延びますが、その重心は移ります。かつては、数か月後にあなたのコードを見て眉をひそめる未来の人間についての話でした。
いまでは、今日の午後にあなたのリポジトリを読み、「ここでの普通はこういう形だ」と判断するモデルについての話でもあります。二人の読者は同じものに報います。明快さ、一貫した構造、そしてデバッガなしでも復元できる意図です。
機械はこの格言を引退させませんでした。ただ、私たちがその言葉を本気で守っていたかどうかを、より速く、はるかに手厳しい方法で突きつけてくるようになっただけです。
参考資料
- Scott Robinson, "Write code like a human will maintain it" (2026-07-10): https://unstack.io/write-code-like-a-human-will-maintain-it
- Hacker News の議論: https://news.ycombinator.com/item?id=48859701
현재 단락 (1/34)
「人間が保守するつもりでコードを書け」は、ソフトウェアで最も古い助言の一つです。理屈はいつも単純でした。コードは一度書きますが何十回も読まれるので、書き手ではなく読み手に最適化せよ、というわけです。