最近はもっぱらAntigravity IDEで個人開発を楽しんでおります。SkillsとRulesを整備したことで、エージェントの挙動が安定し、使い始めた当初よりは安心して開発ができるようになりました。
日々使っていると、聞き馴染みのない用語をエージェントが使ってきて、それが一般用語なのか英語からの直訳なのか気になったので調べてみました。
本日紹介するのは
- ゾンビコード
- 死蔵コード
- デッドコード
いずれも、使われていないコードのことですが、厳密には意味が違うようですね。
私は今まで特に区別せずに、全部デッドコードと呼んでました。
では、Gemini 3.8 Flashに比較表を作ってもらったうえで、人間が裏取りした結果をまとめます。
ゾンビコード (Zombie Code)
- 由来:英語圏の開発スラングの直訳のようです
- ニュアンス: 死んだ(使われなくなった)はずなのに、コードベースに残り続けているコード」を指します。具体的には、「コメントアウトされたまま残っている古いコード」や、「どこからも呼ばれていないのに削除するのが怖くて残されたまま、リファクタリングの邪魔をするコード」を皮肉を込めて呼びます
- 具体例
-
/* 一旦コメントアウト (2023/04) */と書かれた数百行の旧実装 - 呼び出し元はすべて削除されたが、「消すのがなんとなく怖い」という理由で残されたプライベートメソッド
- ルーティング、DBテーブル、ビュー、サーバーサイドロジック全部存在しているが、ビューでその機能へのリンクがコメントアウトされていて、事実上使われていない機能
-
- 参考記事
実体験として、ゾンビコードに出会うと時間をめちゃくちゃ奪われるので、見つけたら即座に◯したくなります。
会話例
この巨大なコメントアウトの塊、典型的なゾンビコードだね。Gitの履歴からいつでも引っ張ってこれるから、容赦なく消しちゃって
死蔵コード
- 由来:エージェントが時々使うが由来不明。AI曰く日本の業務システム開発などで使われてきた言い回しとのこと
- ニュアンス:「コードとしては動く状態だが、ビジネス上の役割を終えて倉庫で埃をかぶっているコード」。構文的には正常であり、呼べば正しく動くものの、ユーザーや業務プロセスから完全に切り離されて誰にも使われなくなっている状態を指す
- 具体例
- 2年前に終了した単発キャンペーン専用のエンドポイント
- 画面上のボタンやリンク(導線)は削除されたが、バックエンド側には生き残っているAPI
- すでに解約した取引先向けに組まれていた深夜のバッチ処理
実体験として、データ移行など一時的に作られたバッチで見かける。見つけても「あ〜、死んでるな」ってわかることが多いので、ゾンビほど怖くない。
現場で「死蔵コード」って言う人がいたらコメントで教えてください。
デッドコード (Dead Code)
- 由来:どうやら辞書にも載っているらしく、歴史が古い技術用語
- ニュアンス:「論理的・構造的に絶対に実行されないコード」。プログラムの構造上、制御フローが決して到達しない。リンターやコンパイラによって機械的に検出可能
- 具体例
-
returnやthrowの直後に書かれた処理 -
if (false) { ... }や、常に真/偽になる条件分岐のelse側 - 値を代入・計算しているが、その後一度も参照されない変数
-
- 参考記事
実体験として、IDEで薄グレーになってることが多いのですぐに気づくし、リンターで検出できるので「消しとけよ!」と突っ込みたくなる。
会話例
PR見たけど、この
returnの後ろにある処理、到達不能でデッドコードになってるからリンターの警告に従って消しておいて
まとめ
AI使っていると普段関わりのない文化圏の技術用語も知れて面白いなと思いました。
海外のブログも読んでみたのですが、「デッドコードまたはゾンビコード」と解説している記事もあり、厳密な違いはないようです。死蔵コードについてはかなり怪しいと思いました。同様の言い方に「ゴミコード」「不要コード」「アンデッドコード」などと呼ぶこともあるようです。
みなさんも、コーディングエージェントがしれっと使ってくる技術用語に、興味を持って調べてみると新しい発見が出来るかも知れませんよ。