ec cubeの基礎からcms連携まで
DESCRIPTION
EC-CUBE×concrete5合同勉強会のセッションスライドですTRANSCRIPT
EC-CUBEの基礎からCMS連携まで
お品書き
自己紹介
EC-CUBEとは
EC-CUBEとconcrete5を連携してみる
自己紹介
西村誠
EC-CUBE公式エヴェンジェリスト
自己紹介
Microsoft MVP
- Windows Platform Development
自己紹介
Twitter – coelacanth
Facebook –西村誠
EC-CUBEとは?
EC-CUBEとは?
国産のオープンソース
ECサイト構築フレームワーク
ちょっと脱線
ECサイトと言って色々あります
モール型
モール型
一つのシステムに複数のECサイトが存在
楽天市場、ヤフーショッピングモールなど
モール型
メリット
開店が楽、集客が期待できる
デメリット
土地代を払う、自由にカスタマイズできない
ASP型
ASP型
既存のシステムをレンタルして利用
Stores.jp、BASE、カラーミーショップなど
ASP型
メリット
初期費用が安い
デメリット
自由にカスタマイズできない
問題
自由にカスタマイズできない!!
EC-CUBEとは?
言語はPHP
テンプレートエンジンはSmarty
DBは主にPostgreSQL or MySQL
(SQLServer対応プラグインも)
EC-CUBEとは?
国産だからフォーラムは日本語で活発にやり取りされている
オープンソースだからカスタマイズ自由
EC-CUBEとは?
プラグイン対応(Ver 2.12以降)で
ノンプログラミングで機能追加
豊富な決済モジュール
バージョンについて
最新のバージョンは2.13
2.12 ← 2.11 ← ?
バージョンについて
最新のバージョンは2.13
2.12 ← 2.11 ← 2.4 ← 2.3
DEMO
EC-CUBE(デフォルト)を見てみましょう
http://59.106.184.173/~mac/ec/html/
DEMO
基本的なEC機能
プラグインやカスタマイズによる機能追加
デザインテンプレート
主な開発者のかかわり方
EC-CUBEの導入
プラグイン作成
間違ったとらえ方
EC-CUBEは無料だから安く導入できるんでしょ?
間違ったとらえ方
EC-CUBEは無料だから安く導入できるんでしょ?
カスタマイズで他にはないECサイトを自由に作れるのがEC-CUBE
とりあえず安く手軽に始めたいなら、モールとかASP型のサービスでOK
間違ったとらえ方
EC-CUBEが高いわけではない
同じことをオリジナルでやることに比べたら、圧倒的なコストパフォーマンス
例外
店舗主だけど自分でPHPとか勉強して全部やってやるぜ!! というのは確かに最少コスト
なんか色々勉強して、バージョン管理とかも使い始めた店舗主さんもいらっしゃいます
技術的なお話
導入
レンサバなどでは簡単にインストールできることも
技術的なお話
導入
Azureでも
カスタマイズの注意点
決済部分は慎重に
決済モジュールはモジュール会社提供の部分なので、
それぞれコードが異なる
カスタマイズが決済に影響を与える仕様変更か確認
カスタマイズの注意点
スマフォとモバイルへの影響範囲忘れないで
すべての修正をスマフォにも反映させる?
(UI/UXはどうなる?)
カスタマイズの注意点
管理ページ(帳票や自動返信メール)に影響でない?
表側の修正に気を取られがちだけど、この辺の見積もりおよび修正を忘れないで
カスタマイズの注意点
EC-CUBEじゃないECサイトからの移行
前のサイトにあった機能をどこまで移行する?
こういうお客様にはしっかり機能を説明して理解いただくのが大事。
カスタマイズの注意点
パフォーマンスについて
EC-CUBEはDBのスケールアウトは大変
Webサーバーはクラウドなどでスケールアウト可能
基本スケールアップを検討
カスタマイズの注意点
パフォーマンスについて
デフォルトではDBのインデックスは改善可能
理由=低スペックサーバーではインデックス張りすぎがパフォーマンスダウンになることがあるから
カスタマイズの注意点
DBのクエリについて
仕様とトレードオフできるなら、トレードオフが楽
カスタマイズの注意点
運用でカバーできることも
商品点数や商品規格が多い場合は運用(商品登録の仕方)をお客様と相談することも
カテゴリーページが重い
最初に遭遇する「EC-CUBEが重い」はこれ!!
重いクエリその1
SELECT alldtl.product_id FROM dtb_products AS alldtlWHEREalldtl.del_flg = 0 AND alldtl.status = 1 AND EXISTS (SELECT * FROM dtb_product_categories WHERE category_id IN (52,'53','57','54','55','56','58','59','60') AND product_id = alldtl.product_id) ORDER BY (SELECT T3.rank * 2147483648 + T2.rank FROM (SELECT * FROM dtb_product_categories WHERE category_id IN (52,'53','57','54','55','56','58','59','60')) T2 JOIN dtb_category T3 ON T2.category_id = T3.category_id WHERE T2.product_id = alldtl.product_id ORDER BY T3.rank DESC, T2.rank DESC LIMIT 1 OFFSET 0) DESC ,product_id DESC LIMIT 0, 15;
重いクエリその1
Explainするとこれ
重いクエリその1
SELECT alldtl.product_id FROM dtb_products AS alldtlWHEREalldtl.del_flg = 0 AND alldtl.status = 1 AND EXISTS (SELECT * FROM dtb_product_categories WHERE category_id IN (52,'53','57','54','55','56','58','59','60') AND product_id = alldtl.product_id) ORDER BY (SELECT T3.rank * 2147483648 + T2.rank FROM (SELECT * FROM dtb_product_categories WHERE category_id IN (52,'53','57','54','55','56','58','59','60')) T2 JOIN dtb_category T3 ON T2.category_id = T3.category_id WHERE T2.product_id = alldtl.product_id ORDER BY T3.rank DESC, T2.rank DESC LIMIT 1 OFFSET 0) DESC ,product_id DESC LIMIT 0, 15;
重いクエリその1
すげー難しそうなクエリだけど結果はこれ
+------------+
| product_id |
+------------+
| 5003 |
| 5002 |
・・略・・・商品IDが15個
+------------+
重いクエリその2
SELECT product_id ,product_code_min ,product_code_max ,name ,comment1 ,comment2 ,comment3 ,main_list_comment ,main_image ,main_list_image ,price01_min ,price01_max ,price02_min ,price02_max ,stock_min ,stock_max ,stock_unlimited_min ,stock_unlimited_max ,deliv_date_id ,status ,del_flg ,update_date FROM ( SELECT dtb_products.product_id ,dtb_products.name ,dtb_products.maker_id ,dtb_products.status,dtb_products.comment1 ,dtb_products.comment2 ,dtb_products.comment3 ,dtb_products.comment4 ,dtb_products.comment5 ,dtb_products.comment6 ,dtb_products.note,dtb_products.main_list_comment ,dtb_products.main_list_image ,dtb_products.main_comment,dtb_products.main_image ,dtb_products.main_large_image ,dtb_products.sub_title1 ,dtb_products.sub_comment1 ,dtb_products.sub_image1 ,dtb_products.sub_large_image1 ,dtb_products.sub_title2 ,dtb_products.sub_comment2 ,dtb_products.sub_image2 ,dtb_products.sub_large_image2 ,dtb_products.sub_title3 ,dtb_products.sub_comment3 ,dtb_products.sub_image3 ,dtb_products.sub_large_image3 ,dtb_products.sub_title4 ,dtb_products.sub_comment4 ,dtb_products.sub_image4 ,dtb_products.sub_large_image4 ,dtb_products.sub_title5 ,dtb_products.sub_comment5 ,dtb_products.sub_image5 ,dtb_products.sub_large_image5 ,dtb_products.sub_title6 ,dtb_products.sub_comment6 ,dtb_products.sub_image6 ,dtb_products.sub_large_image6 ,dtb_products.del_flg ,dtb_products.creator_id ,dtb_products.create_date ,dtb_products.update_date ,dtb_products.deliv_date_id ,T4.product_code_min ,T4.product_code_max ,T4.price01_min ,T4.price01_max ,T4.price02_min ,T4.price02_max ,T4.stock_min ,T4.stock_max ,T4.stock_unlimited_min ,T4.stock_unlimited_max ,T4.point_rate ,T4.deliv_fee ,T4.class_count ,dtb_maker.name AS maker_name FROM dtb_products JOIN ( SELECT product_id, MIN(product_code) AS product_code_min, MAX(product_code) AS product_code_max, MIN(price01) AS price01_min, MAX(price01) AS price01_max, MIN(price02) AS price02_min, MAX(price02) AS price02_max, MIN(stock) AS stock_min, MAX(stock) AS stock_max, MIN(stock_unlimited) AS stock_unlimited_min, MAX(stock_unlimited) AS stock_unlimited_max, MAX(point_rate) AS point_rate, MAX(deliv_fee) AS deliv_fee, COUNT(*) as class_countFROM dtb_products_class WHERE del_flg = 0 GROUP BY product_id ) AS T4 ON dtb_products.product_id = T4.product_id LEFT JOIN dtb_maker ON dtb_products.maker_id = dtb_maker.maker_id ) AS alldtl WHERE alldtl.product_id IN ('5003','5002','5001','5000','4999','4998','4997','4996','4995','4994','4993','4992','4991','4990','4989') AND alldtl.del_flg = 0;
重いクエリその2
これは一覧の商品の詳細データを取ってくるクエリ
重いクエリその2
こんなデザインだと先述クエリいらない!!
重いクエリその2
試してみる価値あるかも
http://svn.ec-cube.net/open_trac/ticket/2325
PostgreSQL向け?
重いクエリその2
重いクエリはどうやって見つけるの?
ダミー商品登録プログラムがあります
/test/createEcCubeData-v25.php
これで商品と規格をガンガン作成してみましょう
カスタマイズの注意点
いざとなったら
弊社のようなインテグレートパートナーに相談してください
CMS連携
EC-CUBEの苦手なところ
ランディングページ(LP)など
店舗主さんが触るにはHTMLの知識が必要
EC-CUBEの苦手なところ
ブログ機能は無い
運用開始後にお客様にページ追加や修正してもらう場合にCMSが便利
Concrete5の苦手なところ
EC機能は無い
EC機能をEC-CUBEで!!
連携案
ランディングページ、ブログはconcrete5で
管理ページのログイン連携
EC-CUBEのユーザーログインを利用して
concrete5でログイン限定ページを
連携案
商品詳細ページをconcrete5で
EC-CUBEにconcrete5のブロックを埋め込み
concrete5側にEC-CUBEのカートインボタンを表示
まとめ
EC-CUBEはオーダーメイドのECサイトを作れる
開発する場合は色々注意点があるよ
CMSと連携すると幅が広がる
ご静聴ありがとうございました