はじめに
「なぜこうなってるのか分からないけど……たぶん何か理由があるんだろう」
そんなコード、あなたのプロジェクトにも眠っていませんか?
今回は、あまりにも “あるある” すぎて誰もが見て見ぬふりをしてきた、開発現場に潜む “学びたくない地雷コード” 思いつく限りまとめてみました。
もし、見かけたら要注意です!!
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();
コードに刻まれた怨念のようなコメント。責任は常に “他の誰か”。
おわりに
どれも「笑い話」のようですが、実際には プロダクトの品質・保守性・開発者の幸福度(特にこれ大事!) に直結しています。
おすすめな記事