【すぱげってぃこーど】

スパゲッティコード とは?

💡 コードが麺のように絡み合って「解読不能」
📌 このページのポイント
スパゲッティコード vs 整理されたコード スパゲッティコード A B C D E 依存関係が複雑に絡み合う 整理されたコード Main Module A Module B Util Util 依存関係が明確で追いやすい リファクタリングで「スパゲッティ」を「整理されたコード」に改善できる
スパゲッティコードと整理されたコードの比較
ひよこ ひよこ

どんなコードがスパゲッティ?

ペンギン先生 ペンギン先生

典型的なのは、①1つの関数が何百行もある、②if文ネストが5段以上、③goto文やフラグ変数で処理が飛び回る、④コピペで同じコードが散在、⑤変数名がa、tmp、flag2。読んでいて「今どこを実行しているのか」がわからなくなるコードだよ

ひよこ ひよこ

自分のコードがスパゲッティかも…

ペンギン先生 ペンギン先生

自覚があるなら改善のチャンスだよ。①関数を小さく分割する(1関数1責務)、②早期リターンでネストを減らす、③意味のある変数名をつける、④重複コードを共通関数に抽出。一度に直す必要はなく、触るたびに少し改善する「ボーイスカウトルール」で徐々にきれいにしていこう

ひよこ ひよこ

なぜスパゲッティになるの?

ペンギン先生 ペンギン先生

主な原因は①設計なしにコードを追加し続ける、②デッドラインに追われて「とりあえず動けばOK」になる、③チームのコードレビューが機能していない、④テストがないので構造変更が怖い。誰か1人のせいではなく、組織的な問題であることが多いんだよ

ひよこ ひよこ

他にも食べ物コードの比喩はある?

ペンギン先生 ペンギン先生

あるよ。「ラザニアコード」はレイヤーが多すぎて変更のたびに全層を修正する必要があるコード。「ラビオリコード」は小さなクラスやモジュールが大量にあって全体像が掴めないコード。スパゲッティの反対は「構造化コード」で、きれいなコードは「クリーンコード」と呼ばれるよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スパゲッティコード」って出てきたら「複雑に絡み合って読めないコード」と思えればだいたいOK!
📖 おまけ:英語の意味
「Spaghetti Code」 = スパゲッティのようなコード
💬 スパゲッティの麺が絡まるように制御フローが絡み合うことから。1970年代から使われている表現だよ
← 用語集にもどる