プログラミング
人間が保守することを想定してコードを書く
Write code like a human will maintain it (unstack.io)
要約
LLM(大規模言語モデル)の普及により、開発者はコードの保守性を犠牲にしがちですが、AIは既存のコードベースから学習するため、悪いパターンを再帰的に強化してしまいます。著者は、AIを利用する場合でも、人間が保守しやすいコードを書くことの重要性を説き、将来的なコードの品質維持のために、AIに悪い習慣を学習させないよう注意を促しています。
全文翻訳
人間が保守することを想定してコードを書く
スコット・ロビンソン著・2026年7月10日
LLMの最も素晴らしい点の1つは、一日中コードを書いてくれることです。DRY(Don't Repeat Yourself)原則を誰が気にするでしょうか?同じ長い条件分岐を4つの異なるファイルで更新するのは、あなた自身ではなくAIがやってくれるのですから、ね?最近、AIを使って構築しているプロジェクトで、この点を緩めていることに気づきました。ルートハンドラ、バックグラウンドジョブ、APIエンドポイント、Webhookなど、いくつかの場所で同じアクセスチェックが必要でした。そのたびに、必要なことを説明し、モデルが何か動作するものを作成し、それをマージしました。各バージョンは、おおよそ次のようなものでした。
if (user.isActive && user.hasPermission('read') && !user.isSuspended && account.status === 'open') {
// do a thing
}
本質的に毎回同じ条件分岐でした。4つの条件、おそらく変数名が少し違うだけで、単語を1つか2つ変えただけのコピー&ペーストされたロジックです。これには、共有ヘルパー関数のような、もっとクリーンな方法があります。もし自分で書いていれば、おそらく抽出したでしょう。しかし、私はそうしませんでした。コードは動きました!テストはパスし、それを再び触る必要があったのは私ではなかったのです。ここに怠惰があります。ベストプラクティスに従わない場合や、保守が面倒になることがわかっているコードの場合、それは何の違いがあるのでしょうか?後で何かを変更する必要があるとき、私ではなくLLMがそれを処理してくれるのです。
しかし、LLMは真空の中でコードを書くわけではありません。それはあなたのコードベースを読み込みます。開いているファイル、既存のパターン、最近の変更などを参照します。コードベースにマージするすべてのショートカットは、ここでは物事がどのように行われるかについてのシグナルとなります。次に、同じアクセスルールを持つ別のエンドポイントをLLMに依頼したとき、モデルはゼロから始めるわけではありません。リポジトリにすでに存在する他の4つのコピーから始めるのです。そのため、5番目のエンドポイントを要求すると、同じコピーされたコードを持つ5番目の条件分岐が得られます。リファクタリングを依頼すると、モデルはそれら5つすべてを保持します。なぜなら、それがあなたのコードの外観だからです。悪いパターンはもはや一度きりのものではなく、あなたのスタイルと見なされるのです。このまま放置した場合、後で修正しようとしたときに、LLMがすべてのインスタンスをキャッチできると本当に信頼できますか?確かに、これらのうちのいくつかは壊滅的ではありません。物事はいつもこのように始まりますが、コードの不快な臭いは積み重なります。重複した条件分岐、すべての「ゴッド」関数、すべての「後でクリーンアップしよう」というマージは、次のプロンプトに対してシグナルのレイヤーをさらに追加します。最終的には、簡単にプロンプトで抜け出すことができなくなります。少なくとも、手を汚して袖をまくり上げることなしには。最もフラストレーションがたまる部分:私は保守をLLMにアウトソースしていると思っていましたが、私が陥った滑りやすい坂道は、実際にはLLMにますます悪化する習慣を学習させていたのです。人間が保守することを想定してコードを書きましょう。LLMは、あなたがすることすべてを吸収し、それをあなたに返すスポンジです。だから、それが良いものであることを確認してください。エンジニアリングと好奇心の重なりを最適化する投稿を月に1〜2回受け取るには、フォローしてください。
メールアドレス
登録
スパムや広告はありません。いつでも解除できます。プライバシーポリシー