ラザニアコードとは?スパゲッティコードとの違いで学ぶ過剰設計の落とし穴

システム開発・テクノロジー
ラザニアコードとは?ざっくりと3行で
  • プログラムの階層(レイヤー)が幾重にも積み重なりすぎて、中身がどうなっているのか一見して分からない複雑な状態のことだよ!
  • 整理整頓しようとして箱(クラスや関数)を分けすぎた結果、たらい回しにされるだけで実処理がどこにあるか見つからないんだ。
  • これだと、たった一行の修正をするために何十個ものファイルを開いて書き換える羽目になるよ。
複雑に入り組んだ「ラザニアコード」に直面したデプロイ太郎が、リファクタリングによる解決を学ぶ4コマ漫画。
①美味しそうなラザニアの画像を見て、食事だと思い込み喜ぶデプロイ太郎。 ②実際のコードは層が複雑に絡み合い、理解不能な状態に困惑する。 ③複雑すぎるコードのスパゲッティに飲み込まれ、悲鳴を上げる。 ④リファクタリングで層を整理し、構造を理解しやすくする方法を学ぶ。

【深掘り】これだけ知ってればOK!

「整理された綺麗なコード」を目指したはずなのに、過剰な設計(オーバーエンジニアリング)によって逆に変更が困難になったアンチパターンという側面があるんだよ。

スパゲッティコードがぐちゃぐちゃに絡まり合った状態なら、「ラザニアコード」は層と層が密着しすぎて分離できない状態です。

例えば、画面に文字を表示するだけの機能なのに、「表示係」→「仲介係A」→「仲介係B」→「データ取得係」…と無駄に役割分担をしすぎているケースです。これでは、文字の色を変えたいだけなのに、関わっている全ての係(レイヤー)に変更依頼を出さなければならず、修正コストが跳ね上がります

Javaなどの厳格な言語で、「Controller」「Service」「Repository」「Interface」と思考停止でフォルダ分けしてファイルを作った結果、中身がただの右から左への受け渡し(パススルー)にしかなっていないのが、典型的なラザニアコードの始まりです。

会話での使われ方

この機能追加、ロジックは簡単なのにラザニアコードのせいで修正ファイルが10個もあるよ。

綺麗に分離しようとするのは良いけど、これじゃラザニアになって追いにくいね。

スパゲッティよりはマシだけど、このラザニアの層、一枚抜いても動くよね?

【まとめ】3つのポイント

  • 過剰包装のプレゼント:小さな箱の中にさらに箱があり、いつまで経っても中身(処理)が出てこない状態。
  • 修正のドミノ倒し:一つの層を変更すると、上下の層すべてに影響が及び、修正作業が連鎖する
  • 行き過ぎた抽象化:将来の拡張性を気にしすぎて、現在の単純な処理を複雑にしてしまっている

よくある質問

Q
ラザニアコードはいつ発生しやすいですか?
A
大規模なフレームワークを導入した時や、初心者が設計パターン(MVCなど)を「形だけ」真似して、意味を考えずに実装した時によく発生します。
Q
ラザニアコードを直すコツはありますか?
A
何もしない層(パススルー)を見つけて削除することです。データをただ右から左へ渡すだけのクラスやメソッドは、あえて統合(インライン化)してシンプルにする勇気が必要です。
Q
ラザニアコードの具体例は何ですか?
A
データベースから値を取るだけの処理で、Interface、AbstractClass、BaseClass、ImplementationClassと継承関係が深すぎて、元の定義がどこにあるか分からないコードなどが挙げられます。
Q
ラザニアコードとスパゲッティコードとの違いは何ですか?
A
スパゲッティは構造がなく、絡まっている(無秩序)状態です。ラザニアは構造はあるが、層が多すぎて分離できない(過剰な秩序)状態です。どちらも修正しにくい点は同じです。

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
YouTubeも運営中。チャンネル登録はこちら!!
応援のワンクリックが大きな励みになります!
IT・通信業ランキング にほんブログ村 ベンチャーブログへ
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!
タイトルとURLをコピーしました