6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

「なぜこうなってるのか分からないけど……たぶん何か理由があるんだろう」

そんなコード、あなたのプロジェクトにも眠っていませんか?

今回は、あまりにも “あるある” すぎて誰もが見て見ぬふりをしてきた、開発現場に潜む “学びたくない地雷コード” 思いつく限りまとめてみました。

もし、見かけたら要注意です!!

1. try { } catch {}(何もしない)

C#
try
{
    DoSomethingDangerous();
}
catch
{
    // 無音で例外を闇に葬る
}

囲っとけば動くでしょ」から始まる例外の黙殺文化。

2. 意味深な Utils.cs の肥大化

C#
public static class Utils
{
    public static string FixFormat(string input)
    {
        return input.Trim().Replace(" ", " ").Replace(" ", "").ToUpperInvariant();
    }

    public static bool RetryMagicLogic(int x)
    {
        return (x % 3 == 0) || (x.ToString().Contains("7"));
    }

    // …などが300関数
}

みんなの便利関数」が集まって、誰も触れられない聖域へと進化。

3. #TODO: あとで直す

C#
// TODO: 最適化しないとやばい
for (int i = 0; i < list.Count; i++)
{
    for (int j = 0; j < list.Count; j++)
    {
        if (list[i] == list[j]) Console.WriteLine("重複!");
    }
}

あとで” は、永遠に来ない。

4. 「動いてるから触らない」謎コード

C#
public void DoProcess()
{
    // 金曜だけ挙動が変わる理由は謎
    var flag = DateTime.Now.DayOfWeek != DayOfWeek.Friday;

    if (flag) DoSomething();
}

理由も分からず残された動作が、未来のバグになる。

5. if (isProd) だけ本気出す設計

C#
if (isProd)
{
    connection = new SqlConnection(ProdConnectionString);
}
else
{
    connection = new SqlConnection("localhost;User=sa;Password=1234");
}

開発環境と本番環境で人格が変わるアプリケーション。

6. Gitログの「最終修正」シリーズ

fix
fix2
fix_final
fix_final_final
really_final_ok

コミットログは、開発者の迷走の記録である。

7. DBカラム名が Flg01 など意味不明

sql
CREATE TABLE EmployeeStatus (
    EmpCode VARCHAR(10),
    Flg01 INT, -- たぶん在宅?
    Flg02 INT, -- よく分からないが重要
    Flg03 INT  -- 誰かが使っていたらしい
);

設計者以外、何のフラグか分からないまま運用される。

8. なぜか Thread.Sleep(0) を入れると直る

C#
public void DoSomething()
{
    Thread.Sleep(0); // なぜかこれで落ちなくなる

    CallUnstableAPI();
}

経験則でしか語られない「おまじない」が本番稼働中。

9. コメントで封印された if

C#
if (isSpecialMode)
{
    // 特殊モードの処理(現在未使用)
    // DoSomethingSpecial();
}

削除できない「将来使うかもしれない」コードは、誰も使わない。

10. 他責なコメントがコードに刻まれている

C#
// なぜかAさんの修正でこうなっている(詳細不明)
// Bチームの対応待ち
// ○○くんの確認必要(退職済み)

DoSomethingImportant();

コードに刻まれた怨念のようなコメント。責任は常に “他の誰か”

おわりに

どれも「笑い話」のようですが、実際には プロダクトの品質・保守性・開発者の幸福度(特にこれ大事!) に直結しています。

おすすめな記事

6
2
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?