技術

デッドコードについて思うところ

現在お世話になっているプロジェクトで、デッドコードやインフラ周りの不要な設定について思うところがあるので、そのことについて書こうと思います。

デッドコードとは

デッドコードとは、プログラミングで実行されることのないコードのことをいいます。

IDEやlinterで検出される単純なものをさすことが多いように思いますが、それ以外にも結合テスト段階では実行されることのないコードもあります。これも広義のデッドコードと呼んでいいかと思います。

インフラ周りのユースケースはないけど、何となく一応入れてある設定とかも同じものと見なしていいでしょう。

デッドコードの扱い

デッドコードをどう扱うかは、そのプロジェクトの思想・文化に寄るところが大きいです。大別するとデッドコードの扱いは以下の2つ、どちらかになります。

  • 不要物、バグの温床のなりかねないと見なし、できるだけ排除する
  • 新設設計、品質担保と見なして消さないで残しておく

どちらが正解なのかはわかりませんが、私個人として前者にするべきだと思います。

デッドコードがあると、途中からjoinした人はコードを見て、このコードはどういったユースケースで呼ばれているのかわかりません。不要と思っても、何か影響あってはいけないので削除できません。そうして年月を重ねていき、誰もメンテナンスできない領域がどんどん拡張されていき、めちゃくちゃなシステムができあります。

デッドコードは思想・文化

とはいえ、デッドコードをどう扱うかは思想、文化です。宗教論争的な要素もあります。

このことがメンバー全体に共有されていて、プロジェクトマネージャーからトップダウンでどちらの方針で行くか決定して周知されていれば、混乱は避けられます。

問題なのは、マネージャーはデッドコードを入れないのは当たり前でしょと考えているけど、メンバーの数名はそのことが分かっていないケースです。そのメンバーはそもそもデッドコードという概念を知らないので、品質担保のために良かれと思ってデッドコードをわざわざ生成するタスクをせっせとこなしていきます。もちろん、メンバーの何人かはデッドコードなんて書かないと当たり前だよねと考えているので、その人の担当の所はシンプルな作りになっています。

こうしてシステム全体で場所によってプログラムの書き方、クオリティが違う統一感のない、思想がちぐはぐなシステムができあがります。

インフラにもデッドコードの概念を

インフラにはデッドコードという言葉にはありませんが、インフラエンジニアにもこの概念は知っておいてほしいものです。

大半のインフラ技術者はこのことがわからず、ユースケースのない不要な設定をもりもりセットアップして、無駄にマッチョなインフラができあがります。こういう人はインフラをコード管理しても、値が不変なものを変数化したりしてパラメータファイルが無駄に大きい傾向があります。


以上、デッドコードについて思うところでした。

デッドコードという言葉を知らなくても、ある程度のセンスがある人なら直感的にデッドコードや不要設定を排除したシステム構築をしていることでだと思います。でも概念は知っておき、どういうふうに扱っているのか認識できているに超したことはありません。