現場SEが厳選!改修時に「もう!やめてよぉ!」と叫びたくなる読みにくいコード例8選と、具体的な改善方法を解説。チーム全体の生産性向上にも役立ちます。
🚨 現場でよく遭遇する「やめてほしいコード」8つのパターン
✅ 各問題の具体的な改善方法
🚀 チーム全体でコード品質を向上させる実践ステップ
💡 3年後の自分が感謝するコーディング習慣
- 🔥 開発現場の多くが経験する「コード改修地獄」
- ① 🔤 変数名が暗号レベル問題
- ② 💬 コメントが機能していない症候群
- ③ 📄 巨大ファイル症候群
- ④ 🌍 グローバル変数地獄
- ⑤ 🪆 ネスト地獄
- ⑥ 📋 コピペ増殖
- ⑦ 🔄 オーバーロード乱用
- ⑧✨ 魔法の数字:謎の定数「3」の正体は?
- 🔄 思考のスイッチ:「今だけ」から「チーム志向」へ
- ✅ 今日から始める実践チェックリスト
- まとめ:「感謝されるコード」を書こう
🔥 開発現場の多くが経験する「コード改修地獄」
こんにちは、「思考のスイッチ」を運営している現役SEのひろです。
システム改修で最も時間を奪われるのは、実は新機能の開発ではありません。「誰が書いたか分からない、読みにくいコードの解読」です。
実は私自身、JavaやVB.NETのようなオブジェクト指向言語は未経験です。それなのに「VB.NETツールの改修をお願いします」と言われて…C言語しか知らない私が、いきなりオーバーロードやら継承やらの世界に放り込まれました。
言語を知らない上に、読みにくいコードとの格闘。 これはもう、二重の地獄でした😱
🔻あなたはこんな経験ありませんか?
- 変数名がa、b、data1で意味不明
- 1つのファイルに1000行超えの巨大コード
- 「処理する」だけのコメントで何も分からない
この記事では、「もう!やめてよぉ!」とつい言いたくなる「やめてほしいコード」を8つピックアップし、チーム全体で取り組める改善策まで具体的に解説します。
① 🔤 変数名が暗号レベル問題
問題のコード例
Dim a As Integer = 10
Dim b As String = "test"
Dim data1 As New List(Of String)
変数名から内容を推測できないコードは、読み手の認知負荷を大幅に増加させます。
もう!やめてよぉ!中学生の数学じゃないんだから、意味のある名前つけてよぉ
【改善策】✅ 意味のある命名規則を導入
Dim userId As Integer = 10
Dim customerName As String = "test"
Dim pendingOrderList As New List(Of Order)
🎯 チーム導入のポイント
- 📝 命名規則書を作成(動詞+名詞の組み合わせなど)
- 👀 コードレビューで必ずチェック
- ⚙️ IDE設定で短すぎる変数名をワーニング表示
② 💬 コメントが機能していない症候群
問題のコード例
' 処理する
Call ProcessData()
' チェックする
If condition Then
良いコメントは「何を」ではなく「なぜ」を説明します。
もう!やめてよぉ!処理はするの分かってるよぉ…何の処理かを知りたいんだよぉ
【改善策】✅ 目的志向のコメント
' ログイン認証後に顧客の未払い情報を取得
Call GetUnpaidCustomerData()
' 管理者権限がない場合は処理を中断(セキュリティ要件)
If Not hasAdminRole Then Exit Sub
🎯 実践ステップ
- 💭 「なぜその処理が必要か」を1行で説明
- 📋 複雑な条件分岐には業務ルールを明記
- 🏷️ TODO、FIXME、HACKタグを活用
③ 📄 巨大ファイル症候群
問題の状況
MainForm.vb
にUI制御とビジネスロジックが混在- 単一ファイルで1000行超え
- 機能追加のたびにファイルサイズが増大
単一責任の原則を無視したコードは、バグ発生率が大幅に高くなります。
もう!やめてよぉ!この巨大ファイル、迷路すぎて目的の処理を探すだけで一苦労だよぉ
【改善策】✅ レイヤー分離とクラス設計
├── UI層(MainForm.vb)
├── ビジネスロジック層(CustomerService.vb)
└── データアクセス層(CustomerRepository.vb)
🎯 チーム導入のアクション
- 📏 行数が300行を越えたら分割を検討
- 🔍 静的解析ツール(SonarQube等)で自動チェック
- 🔄 リファクタリング定期実施日を設定
④ 🌍 グローバル変数地獄
問題のコード例
Public currentUser As String
Public isProcessing As Boolean
Public tempData As New List(Of String)
グローバル変数の過度な使用は、デバッグ時間を大幅に増加させます。
もう!やめてよぉ!この変数、一体どこから攻撃されてるの?犯人探しが大変すぎる!
【改善策】✅ 状態管理の明確化
' ユーザー情報を管理する専用クラス
Public Class UserSession
Private _currentUser As String
' 現在のユーザー名を取得(読み取り専用)
Public Function GetCurrentUser() As String
Return _currentUser
End Function
' ユーザー名を設定(ログイン時などに使用)
Public Sub SetCurrentUser(user As String)
_currentUser = user
End Sub
End Class
⑤ 🪆 ネスト地獄
問題のコード例
If userExists Then
If userActive Then
If hasPermission Then
If dataValid Then
' やっと処理
ProcessData()
End If
End If
End If
End If
もう!やめてよぉ!このコード、マトリョーシカ人形みたいに何重構造なの〜?
【改善策】✅ ガード節による早期リターン
If Not userExists Then
Return "ユーザーが存在しません"
End If
If Not userActive Then
Return "ユーザーが無効です"
End If
If Not hasPermission Then
Return "権限がありません"
End If
⑥ 📋 コピペ増殖
問題のコード例
' 顧客検索画面
Private Sub SearchCustomer()
Dim conn As New SqlConnection(connectionString)
conn.Open()
Dim cmd As New SqlCommand("SELECT * FROM Customer WHERE ...", conn)
' ... 同じDB処理
conn.Close()
End Sub
' 売上画面
Private Sub LoadSales()
Dim conn As New SqlConnection(connectionString)
conn.Open()
Dim cmd As New SqlCommand("SELECT * FROM Sales WHERE ...", conn)
' ... 全く同じDB処理
conn.Close()
End Sub
' 在庫画面(他3箇所でも同様)
Private Sub CheckInventory()
Dim conn As New SqlConnection(connectionString)
conn.Open()
' ... またまた同じ処理...
重複コードがあるプロジェクトでは、保守コストが大幅に増加します。 1箇所修正したら、他の4箇所も同じように修正する必要があり、必ず修正漏れが発生します。
もう!やめてよぉ!関数って知ってる?魔法みたいに1箇所で直せるんだよ〜
【改善策】✅ 共通化の徹底
' 共通処理をUtilクラスに集約
Public Class DatabaseUtil
Public Shared Function ExecuteQuery(sql As String) As DataTable
Dim conn As New SqlConnection(connectionString)
conn.Open()
Dim cmd As New SqlCommand(sql, conn)
Dim adapter As New SqlDataAdapter(cmd)
Dim dt As New DataTable()
adapter.Fill(dt)
conn.Close()
Return dt
End Function
End Class
' 各画面では共通関数を呼ぶだけ
Private Sub SearchCustomer()
Dim result = DatabaseUtil.ExecuteQuery("SELECT * FROM Customer WHERE ...")
End Sub
🎯 コピペ撲滅のポイント
- 🔍 3回以上出現したら関数化を検討
- 📝 微妙に違う部分は引数でカバー
- 🛠️ IDEの「重複コード検出」機能を活用
⑦ 🔄 オーバーロード乱用
問題のコード例
' 実際の現場でよくあるパターン
Sub ProcessData()
Sub ProcessData(data As String)
Sub ProcessData(data As String, flag As Integer)
Sub ProcessData(table As DataTable)
Sub ProcessData(table As DataTable, isValid As Boolean)
Sub ProcessData(table As DataTable, flag As Integer, mode As String)
特にVB.NETやJavaのツール開発でよく見る「オーバーロード乱用」パターンです。 同じ名前の関数が6つも7つもあって、どれがどの条件で呼ばれているのか全く分からない状態になります。
もう!やめてよぉ!デバッガで追っても「あれ?今どのProcessDataにいるんだっけ?」ってなる〜
現場でよくある状況
- 📄 設計書はあるけど3年前の情報で現在のコードと全然違う
- 👤 元担当者はもういない(聞きたくても聞けない)
- 🔍 Find All Referencesで検索すると呼び出し箇所が20個以上
- 🐛 バグ修正で1つのオーバーロードを変更したら、別の箇所で予期しない動作
【改善策】✅ 目的別の関数名に分離
' 目的が明確な関数名に変更
Sub LoadCustomerDataFromFile(filePath As String)
Sub ValidateCustomerData(table As DataTable)
Sub ExportCustomerDataToCsv(table As DataTable, outputPath As String)
Sub ProcessCustomerDataBatch(table As DataTable, batchSize As Integer)
🎯 実践的な対処法(改修現場向け)
- 🔍 各オーバーロードの冒頭にログ出力を追加
- 📋 実際に使われているパターンを特定(使われていないオーバーロードも結構ある)
- 🗂️ 呼び出し元ごとに処理内容をメモ化(後でリネーム時の参考に)
- ⚠️ 影響範囲を慎重に確認してから段階的にリファクタ
⑧✨ 魔法の数字:謎の定数「3」の正体は?
問題のコード例
If status = 3 Then
' 何かの処理
End If
もう!やめてよぉ!せめて定数にするか、コメント書いてよぉ
【改善策】✅ 定数による明確化
' 注文ステータスを定義
Public Enum OrderStatus
Pending = 1 ' 受注待ち
Processing = 2 ' 処理中
Completed = 3 ' 完了
Cancelled = 4 ' キャンセル
End Enum
If status = OrderStatus.Completed Then
' 完了処理
End If
🔄 思考のスイッチ:「今だけ」から「チーム志向」へ
ここで重要なのは、個人の意識から組織全体の文化に「思考のスイッチ」を切り替えることです。
🔙 従来の考え方
- ⏰ 「今動けばOK」
- 👤 「自分だけが分かればいい」
- 📅 「後で直せばいい」
🆕 新しい考え方
- 🎯 「3年後のチームメンバーが読んでも理解できるか?」
- 👥 「新人が入ってきても保守できるか?」
- 💎 「コードが会社の資産になっているか?」
この意識変化が、開発チーム全体の生産性を劇的に向上させます。
✅ 今日から始める実践チェックリスト
読みやすいコードは特別な技術ではなく、習慣の問題です。
👤 個人レベル(今日から実践)
- 🏷️ 変数名・関数名は業務用語を使う
- 💬 コメントは「なぜ」を説明する
- 📏 1つのファイル・関数は300行以内(可能であれば)
- 🔄 共通処理は必ず関数化する
- 🔢 魔法の数字は定数で置き換える
👥 チームレベル
- 📋 コーディング規約を文書化
- 🛠️ 静的解析ツールの導入
- 👀 コードレビューの必須化
- ⏰ リファクタリング時間の確保
🏢 組織レベル
- 📊 技術負債の可視化
- 📈 品質メトリクスの測定
- 🔄 継続的改善プロセスの確立
まとめ:「感謝されるコード」を書こう
読みやすいコードを書くことは、未来のチームメンバーへの最高の贈り物です。
現場でシステム開発に携わる中で、どうしても目先の納期に追われがちです。しかし、少しだけ立ち止まって「チーム全体の生産性」を考えることで、開発現場の文化そのものが変わります。
特に最近は、IDEなどのツール支援が充実していることもあり、「ツールがあるから複雑でもOK」という考えに陥りがちです。でも、ツール支援はあくまで補助。基本は人間が読みやすいコードを書くことが何より大切ですね。
「もう!やめてよぉ!」ではなく、「このコード、すごく読みやすいね!」と言われるエンジニアを目指して、一緒に成長していきましょう。
📚 次に読みたい記事
プログラミング学習を継続できたら、次はキャリアプランを考えてみましょう。 [未経験からSEになるための具体的なロードマップ]で、学習成果を活かした転職戦略を立てることができます。
この記事があなたのチームの開発効率向上に役立てば嬉しいです。同じような経験をお持ちの方は、ぜひSNSでシェアして、みんなで「読みやすいコード文化」を広めていきましょう!