0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ダミーデータを消そうとしてメニューがおかしくなった。【高校生のバグ解決録002】

0
Posted at

アドバイスなど,コメント頂けると嬉しいです。

食堂の予約システムの開発中,ユーザ画面の商品一覧を作っていたときのお話です。

バグの詳細

ダミーの属性を持つ,画像のない謎の四角が表示されるようになった。
Screenshot 2026-07-05 19.31.04.png

原因を確認したところ、日替わりのメニューの価格を管理するために登録していたダミーデータが表示されているようです。

Elements
<a href="goods.php?code=1020000">
  <div class="menu-card">
    <img src="" class="menu-image">
    <span class="menu-name"></span>
  </div>
</a>

ダミーデータが存在する理由

私が導入を目指している食堂には,日替わり丼・日替わり定食という制度があります。
内容は毎日変わりますが,価格などの詳細は共通です。
そのため,価格管理のテーブルに共通要素をまとめたダミーデータを用意しました。

code name image price
1010000 ["basic":450,"big":550]
1020000 ["basic":550,"big":650]
1030001 恒常メニュー1 3-1.png ["basic":400,"big":450]
1030002 恒常メニュー2 3-2.png ["basic":400,"big":450]

試行錯誤の内訳

foreachの中でのunset()

一覧からダミーデータを除外するために,foreachの中でunset()を試しました。

しかし,ページ内で共通利用していた配列まで変更してしまい,日替わりメニューの価格取得にも影響が出てしまいました。

foreach($b as $a=>&$c){
  if($c["code"]%10000==0){
    unset($b[$a]);
    continue;
  }
}

バグの原因と解決

価格取得で利用する元の配列は変更せず,表示用のデータだけを新しい配列へコピーするようにしたことで,正常に動作しました。

$t=[];
foreach($n as $o){
  if($o["code"]%10000==0) continue;
  $o["image"]=ImgCheck("items/".$o["image"]);
  $t[]=$o;
}
$item=ToJS($t);

これなら

  • ダミーデータは除外される
  • 元の配列は壊れない
  • 処理の意図も分かりやすい

というメリットがあります。

最後に

ダミーデータは必要であり,この設計が悪かったわけではありません。
今回の件で、「内部処理で利用するデータ」と「画面へ表示するデータ」は必ずしも同じである必要はないと学びました。

さらに,バグに気が付かないままに作業を進めてしまったことも,解決に時間がかかった理由であったと思います。

ここまでお読み頂き,ありがとうございました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?