---
title: [HeatWavejpMeetup#14] EC-CUBEにクラウド検索を組み込んでみた [福本 誠氏(スマートスタイル)]
tags: 
author: [HeatWavejp](https://docswell.com/user/heatwavejp)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/L7L23GK3JR.jpg?width=480
description: 【講演内容】 ECプラットフォーム「EC-CUBE」のデータベースとしてHeatWave MySQLを利用し、一斉検索機能を使って、簡単に「意味ベースの商品検索」ができるのか―― 。  【発表者】スマート 株式会社スタイルデータテクノロジー本部 福本 誠氏  【イベント情報】 HeatWavejp Meetup #14 https://heatwavejp.connpass.com/event/360186/
published: July 23, 25
canonical: https://docswell.com/s/heatwavejp/K8M9JP-2025-07-23-100120
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/L7L23GK3JR.jpg)

EC-CUBE
×
EC-CUBEにベクトル検索を組み込んでみた


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4EM8DQ2MEW.jpg)

自己紹介
株式会社スマートスタイル
AI Platform Lab
福本 誠
趣味
フットサル
子供のサッカー観戦


# Page. 3

![Page Image](https://bcdn.docswell.com/page/PER548ML79.jpg)

EC-CUBEって何？
https://www.ec-cube.net/
35,000+
180万+
No.1
稼働店舗数
ダウンロード数
日本での市場シェア
EC-CUBEの信頼性を示す要因
オープンソースの強み
活発な開発コミュニティ
多数のインテグレートパートナー
日本市場への最適化


# Page. 4

![Page Image](https://bcdn.docswell.com/page/P7XK28K6EX.jpg)

EC-CUBEって何？
提供形態
ダウンロード版
クラウド版
無料でダウンロード・利用可能
サーバー環境の構築・管理が不要
サーバー環境の準備から設定まで自社で行う必要あり
カスタマイズの自由度はダウンロード版より制限あり
動作環境要件（最新のEC-CUBE4.3）
PHP要件
サポートバージョン：PHP 8.1 〜 8.3
データベース要件（MySQL以外も使える）
サポートバージョン：MySQL 8.0


# Page. 5

![Page Image](https://bcdn.docswell.com/page/37K5MK5GED.jpg)

サポートしてないバージョンで
あっても、普通に動くんじゃね？


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LJ3KYZK5J5.jpg)

検証環境
OCI Region（東京）
Availability Domain
VCN
Public Subnet
Private Subnet
EC-CUBE
Virtual
Machine
データベースのバージョン：9.3.1
Always Free


# Page. 7

![Page Image](https://bcdn.docswell.com/page/8JD35R3YEG.jpg)

やりたいこと
前提
「商品名」「商品説明」のテキストを結合してベクトル化
対象フィールド：
Name (商品名)
description_detail (商品詳細画面に表示する説明文)
description_list (商品一覧に表示する説明文)
1
商品一覧画面の並び替え機能強化
ユーザー体験の向上
2
商品詳細画面のレコメンデーション
クロスセル効果
テーブル定義 : https://ec4.umebius.com/tables/dtb_product


# Page. 8

![Page Image](https://bcdn.docswell.com/page/VEP4GW42J8.jpg)

実装概要
ベクトルデータの保存
管理者画面の商品情報登録時と更新時に、「商品名」「商品説明」のテキストを結合してベクトル化した情報を
dtb_product_vector に保持する
CREATE TABLE dtb_product_vector (
product_id INT UNSIGNED PRIMARY KEY,
description_vector VECTOR(1024),
略)
FOREIGN KEY (product_id) REFERENCES dtb_product(id) ON DELETE CASCADE
);
1
商品一覧画面の並び替え機能強化
フロント画面の商品一覧画面にある並び替えのリストボックスに「キーワード順」を追加する
並び替えのリストボックス下にキーワードを入力する為のテキストボックスを追加する
「キーワード順」で並べ替える際は、入力されたキーワードをベクトル化して、ベクトル距離が近い順に並び替えする
2
商品詳細画面のレコメンデーション
詳細画面を表示している商品とベクトル距離が近い商品のベクトル距離が近い商品の先頭3件を表示する


# Page. 9

![Page Image](https://bcdn.docswell.com/page/27VX68XXEQ.jpg)

実装概要
ベクトルデータの保存（SQL）
管理者画面の商品情報登録時は、こんなSQLを実行する
INSERT INTO
`dtb_product_vector` (`product_id`, `description_vector`)
VALUES(
?,
`sys`.`ML_EMBED_ROW` (
`CONCAT` (
COALESCE(?, &#039;&#039;), &#039; &#039;, COALESCE(?, &#039;&#039;), &#039; &#039;, COALESCE(?, &#039;&#039;)
),
`JSON_OBJECT` (&#039;model_id&#039;, &#039;multilingual-e5-small&#039;)
)
)
管理者画面の商品情報更新時は、こんなSQLを実行する
UPDATE
`dtb_product_vector`
SET
`description_vector` = `sys`.`ML_EMBED_ROW` (
`CONCAT` (
COALESCE(?, &#039;&#039;), &#039; &#039;, COALESCE(?, &#039;&#039;), &#039; &#039;, COALESCE(?, &#039;&#039;)
),
`JSON_OBJECT` (&#039;model_id&#039;, &#039;multilingual-e5-small&#039;)
)
WHERE
`product_id` = ?


# Page. 10

![Page Image](https://bcdn.docswell.com/page/5JGVN5VRJL.jpg)

実装概要
1
商品一覧画面の並び替え機能強化（SQL）
「キーワード順」で並べ替える際は、まずは入力されたキーワードをベクトル化して、、、
SELECT CAST(`sys`.`ML_EMBED_ROW` (?, `JSON_OBJECT` (&#039;model_id&#039;, &#039;multilingual-e5-small&#039;)) AS BINARY) AS `embedded_vector`
その後ベクトル距離計算をする
SELECT
(略・・・)
,`DISTANCE` (`d1_`.`description_vector`, ?, &#039;COSINE&#039;) AS `sclr_1`
FROM
`dtb_product` `d0_`
(略・・・)
INNER JOIN `dtb_product_vector` `d1_` ON (`d0_`.`id` = `d1_`.`product_id`)
WHERE
(略・・・)
ORDER BY
`sclr_1` ASC
LIMIT
?


# Page. 11

![Page Image](https://bcdn.docswell.com/page/47Q6QZ6Y7P.jpg)

実装概要
2
商品詳細画面のレコメンデーション（SQL）
詳細画面を表示している商品とベクトル距離が近い商品を抽出するには、こんなSQLを実行する
SELECT
(略・・・)
`DISTANCE` (
`pv`.`description_vector`,
(
SELECT
`description_vector`
FROM
`dtb_product_vector`
WHERE
`product_id` = ?
),
&#039;COSINE&#039;
) AS `similarity_score`
FROM
`dtb_product` `p`
INNER JOIN `dtb_product_vector` `pv` ON `p`.`id` = `pv`.`product_id`
(略・・・)
WHERE
`p`.`id` != ?
(略・・・)
ORDER BY
`similarity_score` ASC
LIMIT
3


# Page. 12

![Page Image](https://bcdn.docswell.com/page/KE44N34ZE1.jpg)

実装方法の調査
プラグイン形式で実装
EC-CUBEへの機能追加は、プラグイン形式にするとよいらしい
https://doc4.ec-cube.net/plugin_development
理由：
拡張性と保守性の確保
コミュニティでの再利用性
売れる！
現在時点で、2,000件以上のプラグインが存在している
https://www.ec-cube.net/products/list.php
今回の内容と近しいようなプラグインもあったけど、ベクトル検索ではない
商品詳細画面で表示商品の関連商品を表示するプラグイン
https://www.ec-cube.net/products/detail.php?product_id=2963
(ユーザの商品詳細画面の表示履歴を保存して、その情報を元に表示するらしい)
商品詳細画面で表示商品と同じカテゴリの商品を表示するプラグイン
https://www.ec-cube.net/products/detail.php?product_id=1858


# Page. 13

![Page Image](https://bcdn.docswell.com/page/L714514D7G.jpg)

実装方法の調査
プラグイン形式で実装
プラグインのスケルトンを作成
# bin/console eccube:plugin:generate
エラーの原因
超簡単なベクトルストアを使用するサンプルプログラムを実装
EC-CUBEではDB操作にDoctrineというORマッパーを使用
↑
プラグインのインストール
この子「vector」データ型を認識できない！
# bin/console eccube:plugin:install --code=ProductVector
In PluginService.php line 305:
Unknown database type vector requested, Doctrine¥DBAL¥Platforms¥MySQL80Platform may not support it.
In AbstractPlatform.php line 451:
Unknown database type vector requested, Doctrine¥DBAL¥Platforms¥MySQL80Platform may not support it.


# Page. 14

![Page Image](https://bcdn.docswell.com/page/G7WX58X8J2.jpg)

実際の実装
プラグイン形式での実装をやめる
Doctrine DBAL にカスタム型(Vector)を登録すれば、エラーは回避できるかも？
より簡単に実装する為にプラグイン形式での実装を断念
EC-CUBEを極める気もないので、実装はAI頼り（課金無し）
ここらへんを無料で使える範囲で
・Chat GPT
・Gemini
・Claude
(Claude Code使ってみたい)
試行錯誤したこと
思ったように動くコードを返してくれない
「EC-CUBE4.3で」と言っても、EC-CUBE3の実装形式でほぼ返される
何度も「こんなエラーがでました」→「正しくはこうでした」を繰り返す
もはや、どのファイルにどの更新をしたものが動いているのか分からない…


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4JZ6N869J3.jpg)

デモ


# Page. 16

![Page Image](https://bcdn.docswell.com/page/YE628P2DJV.jpg)

まとめ
ベクトル型の項目をそのまま値を取得するには、EC-CUBE側で取得する際は工夫が必要。
Doctrineが次のMySQLの次のLTSバージョンに対応すれば考慮不要になるはず
最新のEC-CUBEでは、HeatWaveの最新バージョン9.3.1でも使用できそう
Always Free を活用することもできる
https://www.oracle.com/jp/heatwave/free/
HeatWaveを使えば、AI機能を簡単に実装できる (EC-CUBEの実装をある程度知っていれば…)
商品説明をSEO対策として有効なキーワードを含めるような形式での提案
機械学習を用いた売り上げや在庫状況の予測
etc…


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GE529K28E4.jpg)

Database &amp; Cloud Technology Company


