Figaro Lab← Worksに戻る

PROJECT 01 / WEB APPLICATION

LEGO 3D Catalog EC

レゴの作例を3Dで閲覧し、構成パーツと販売情報を一元管理するカタログ型ECサイトです。

レゴ作例の詳細画面。作例の情報と3Dプレビューを表示
作例詳細画面

概要

作例(Kit)、パーツの形状(Part)、色別パーツ(PartVariant)を分けて管理し、作例に必要なパーツと数量をレシピとして登録しています。閲覧機能に加え、商品管理・カート・注文処理までをLaravelで実装しました。

主な機能

3Dモデルの閲覧

Three.jsとLDraw形式のデータを利用し、ブラウザ上で作例やパーツを回転・拡大して確認できます。

作例・パーツ管理

形状と色を分離して登録。作例ごとの必要パーツ・数量や、画像の取得状態を管理します。

販売機能

作例と単品パーツを共通の商品モデルで扱い、販売価格・在庫・カート・注文処理につなげています。

画像生成と価格管理

LDrawデータからのサムネイル生成と、市場価格取得を想定した模擬価格更新処理に取り組んでいます。

技術構成

PHP / Laravel / MySQL 8 / JavaScript / Three.js / LDraw / Docker / Nginx / Git

データベース設計とEloquentリレーション

作例・パーツ・色・商品情報を分離し、Eloquentのリレーションで関連付けています。外部キー、複合UNIQUE制約、CHECK制約によって、データベース側でも整合性を保つ構造にしています。

主要6テーブルのER図。kitsとpart_variantsをrecipe_itemsで結び、kitsまたはpart_variantsがproductsに対応する構造
主要6テーブルの概要ER図(クリックで拡大)。PK:主キー、FK:外部キー、UK:UNIQUE制約、?:NULL許可。

※ 図は主要テーブルと代表的なカラムに絞っています。カート・注文・撮影履歴などのテーブルは省略しています。

設計上の工夫

作例と単品パーツの共通商品モデル

作例(Kit)と色別パーツ(PartVariant)は異なるデータ構造ですが、販売に必要な価格・在庫・販売設定はProductに集約しています。Productはどちらか一方だけを参照するようCHECK制約を設け、各外部キーにUNIQUE制約を設定しています。

パーツ構成の重複防止

形状と色の組み合わせ、および作例と色別パーツの組み合わせには複合UNIQUE制約を設け、重複登録を防止しています。

市場価格取得の模擬実装

外部APIによる価格取得を想定し、疑似的な市場価格を扱う処理を実装しています。市場価格と更新日時を保持し、販売価格の設定につなげています。実際の外部市場APIから価格を取得しているわけではありません。