スパゲッティコード 【spaghetti code】 スパゲッティプログラム / spaghetti program
概要
スパゲッティコード(spaghetti code)とは、コンピュータプログラムの状態を表す俗語の一つで、命令の実行順が複雑に入り組んでいたり、遠く離れた関連性の薄そうなコード間で共通の変数が使われるなど、処理の流れや構造が把握しにくい見通しの悪い状態になっているプログラムのこと。処理の流れが脈絡なくコード上のあちこちに飛んでしまっており、どこがどこに続いているのか極めて分かりにくくなっている様子を、皿に盛られて絡まりあうスパゲッティに例えた表現である。
スパゲッティコードが生じる典型的な要因はいくつかあり、goto文のような実行位置を任意に変更できる制御文を乱用したり、変数などのシンボルの通用範囲(スコープ)がむやみに広く、コード上のあちこちで定義・代入・参照などを行っていたり、繰り返し制御文やサブルーチンなどで処理をまとめず似たような処理を冗長に何度も記述していたり、何をするためのものなのか分からない変数名や関数名を付けてしまうといったプログラムの書き方(の悪い癖)がよく挙げられる。
スパゲッティコードであっても仕様や要件を満たしていたり動作に支障がない場合もあるが、可読性や保守性が低いため、トラブルが生じたときに実行順を追って問題個所や原因を特定したり修正するのが困難になってしまう。コードの部分的な修正や機能の追加なども困難で、修正によって他の個所に予期せぬ影響を与えてバグの原因になることも多い。
プログラムをスパゲッティ化させないためには、制御構文などを適切に用いて処理の流れを見通しやすくしたり(構造化プログラミング)、関数やサブルーチン、モジュール、クラスなどを用いて適切に機能を分割・整理するといったことを心がける必要がある。
また、すでにスパゲッティ化してしまったプログラムに対しては、機能や動作を保ったまま新たな別のプログラムに書き換えるリファクタリング(refactoring)を行うことで、その後の生産性が向上する場合がある。
(2018.9.21更新)