ECオープンソースのEC CUBEを調査してみました
こんばんは、笹亀です。
最近、非常にECサイトの構築する機会が多くなり、
導入コストの節減や便利なフリーなものがないかと調査をしていました。
そこで発見したのが、今回の調査対象となった「EC CUBE」です。
http://www.ec-cube.net/
まずはEC CUBEとはどうゆう機能があるのかを解説したいと思います。
EC CUBEは機能の豊富さにおどろきました。
当たり前ですが、ECサイトの機能は一通りあります。
商品管理についても、カテゴリ管理、並び替え機能、レビュー機能、トラックバック機能などがあります。
その他にも受注管理、売上集計など基本的なECサイトを運営するにあたって必要なものはそろっております。
コンテンツの管理としても、メルマガを送信する機能やおすすめ商品機能やキャンペーン機能なども用意されています。
ユーザ側の機能としてもPC版だけでなく、モバイル版も準備してある部分はすばらしいと思いました。
ページデザインを管理する機能も用意されており、配置だけであればある程度自由に変更できるのも魅力です。
ただ、新しいページの追加や商品一覧、詳細などのページを修正するには、PHPのテンプレート(Smarty)をそのまま編集するので、編集にはそれなりのSmartyの知識がないと大きな編集は難しいと思います。
EC CUBEでは、PC側のデザインテンプレートの販売がされており、下記URLよりサイトのデザインを選び、購入して管理画面で簡単にデザインの差し替えができることもできます。
http://store.ec-cube.net/products/list.php?category_id=12
EC CUBEはECサイトを運営するには十分な機能がそろっています。
次にエンジニア視点で調査してみたいと思います。
やはりエンジニアならばオープンソースの利点である、スクリプトを自由に変更ができる点を生かさないといけません。さっそくPHPスクリプトでどのように作成されているかを調査してみたいと思います。
プログラムを解凍して、スクリプトの構造を確認してみると「data」フォルダと「web」フォルダで構成されております。webフォルダはブラウザから実行されるPHPスクリプトや画像ファイルなどが格納されていました。dataフォルダにはページを構成するクラスファイルやSmarty,PDFなどのライブラリが格納されています。
※Eclipseでスミマセン
次にスクリプトの編集方法を解説したいとおもいます。
スクリプトは1つの実行ファイルと2つクラスファイルとテンプレートで構成されています。
商品一覧の処理を例に解説します。
Webから実行されるファイルは「/web/products/list.php」に格納されています。
アクション部分(処理)は、「/data/class/pages/products/LC_Page_Products_List.php」に格納されています。
Smartyのテンプレートファイルは、「/data/Smarty/templates/products/list.tpl」に格納されています。
アクション部分のカスタマイズを行うときは、アクションファイルと継承関係にあるファイル(/data/class_extends/pages_extends/products/LC_Page_Products_List_Ex.php)にメソッドをコピーして処理を変更することができます。処理のカスタマイズを行うときには継承関係にあるファイルにコピーして変更するのが好ましいです。他のファイルについても同じような構成になっており、比較的簡単にカスタマイズが可能だと思います。
最後にパフォーマンスについて調査しました。
高機能なところが原因でパフォーマンスは非常に悪いです。
商品数で言うと約500件くらいで処理が重くなるのではないでしょうか。
私の場合は、2000件程のデータを投稿して試しましたが、
PCのスペックがあまりよくはないですが、商品一覧を表示するのに約11秒かかりました。
EC CUBEのコミュニティサイトなどを見ていても同じようなことが記述されていました。
「/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php」内に記述されている、「viewToSubQuery」メソッドのSQLを修正することで、ある程度は改善されます。
しかし、多重のテーブル間のJOINとサブクエリーを使って商品を取得しており、テーブルのindexなどを設定しても、問題解決しませんでした。テーブルの設計を見ると、JOINでデータを持ってこないと取得できず、設計時点の問題ではないかと感じました。
解決策としては、1つの商品に規格という概念で同じ商品での規格を作成することができるこの機能を廃止することです。
規格の機能を廃止し、1商品を1つしか表すことができないようにしてしまうことです。
それにはdtb_productsテーブルに規格取得時に必要なフィールドを持たすことにより解決は可能です。規格以外にもカテゴリやdtb_products_classの情報もdtb_productsテーブルに1つにまとめるとさらに効果が高まります。
言葉では記述するのは簡単ですが、スクリプトの修正はものすごく手間がかかりました。
私はトリガーの機能を利用してそれらの対象となるテーブルが更新されるとdtb_productsテーブルに追加したフィールドを更新するように設定しました。あとはSQL文を発行している箇所などを修正することにより、パフォーマンスが出るようになりました。
個人の感想としては、小規模のECサイトとして使用する場合には非常に満足して使用ができるものだと思います。しかし商品数が多いECサイトとして利用する場合には大きな改修をして使用することになりそうです。
オープンソースで利用できることからあまり贅沢はいえませんが、商品数が多くても利用できるようになっているとさらに大きなニーズに答えられるシステムとしてもおすすめできるものだと感じました。
他にもいろいろなオープンソースで提供されているアプリがあると思いますが、「これは使える!」というものを私にも教えていただけたらとてもうれしいです^^
最近、非常にECサイトの構築する機会が多くなり、
導入コストの節減や便利なフリーなものがないかと調査をしていました。
そこで発見したのが、今回の調査対象となった「EC CUBE」です。
http://www.ec-cube.net/
まずはEC CUBEとはどうゆう機能があるのかを解説したいと思います。
EC CUBEは機能の豊富さにおどろきました。
当たり前ですが、ECサイトの機能は一通りあります。
商品管理についても、カテゴリ管理、並び替え機能、レビュー機能、トラックバック機能などがあります。
その他にも受注管理、売上集計など基本的なECサイトを運営するにあたって必要なものはそろっております。
コンテンツの管理としても、メルマガを送信する機能やおすすめ商品機能やキャンペーン機能なども用意されています。
ユーザ側の機能としてもPC版だけでなく、モバイル版も準備してある部分はすばらしいと思いました。
ページデザインを管理する機能も用意されており、配置だけであればある程度自由に変更できるのも魅力です。
ただ、新しいページの追加や商品一覧、詳細などのページを修正するには、PHPのテンプレート(Smarty)をそのまま編集するので、編集にはそれなりのSmartyの知識がないと大きな編集は難しいと思います。
EC CUBEでは、PC側のデザインテンプレートの販売がされており、下記URLよりサイトのデザインを選び、購入して管理画面で簡単にデザインの差し替えができることもできます。
http://store.ec-cube.net/products/list.php?category_id=12
EC CUBEはECサイトを運営するには十分な機能がそろっています。
次にエンジニア視点で調査してみたいと思います。
やはりエンジニアならばオープンソースの利点である、スクリプトを自由に変更ができる点を生かさないといけません。さっそくPHPスクリプトでどのように作成されているかを調査してみたいと思います。
プログラムを解凍して、スクリプトの構造を確認してみると「data」フォルダと「web」フォルダで構成されております。webフォルダはブラウザから実行されるPHPスクリプトや画像ファイルなどが格納されていました。dataフォルダにはページを構成するクラスファイルやSmarty,PDFなどのライブラリが格納されています。
※Eclipseでスミマセン
次にスクリプトの編集方法を解説したいとおもいます。
スクリプトは1つの実行ファイルと2つクラスファイルとテンプレートで構成されています。
商品一覧の処理を例に解説します。
Webから実行されるファイルは「/web/products/list.php」に格納されています。
アクション部分(処理)は、「/data/class/pages/products/LC_Page_Products_List.php」に格納されています。
Smartyのテンプレートファイルは、「/data/Smarty/templates/products/list.tpl」に格納されています。
アクション部分のカスタマイズを行うときは、アクションファイルと継承関係にあるファイル(/data/class_extends/pages_extends/products/LC_Page_Products_List_Ex.php)にメソッドをコピーして処理を変更することができます。処理のカスタマイズを行うときには継承関係にあるファイルにコピーして変更するのが好ましいです。他のファイルについても同じような構成になっており、比較的簡単にカスタマイズが可能だと思います。
最後にパフォーマンスについて調査しました。
高機能なところが原因でパフォーマンスは非常に悪いです。
商品数で言うと約500件くらいで処理が重くなるのではないでしょうか。
私の場合は、2000件程のデータを投稿して試しましたが、
PCのスペックがあまりよくはないですが、商品一覧を表示するのに約11秒かかりました。
EC CUBEのコミュニティサイトなどを見ていても同じようなことが記述されていました。
「/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php」内に記述されている、「viewToSubQuery」メソッドのSQLを修正することで、ある程度は改善されます。
しかし、多重のテーブル間のJOINとサブクエリーを使って商品を取得しており、テーブルのindexなどを設定しても、問題解決しませんでした。テーブルの設計を見ると、JOINでデータを持ってこないと取得できず、設計時点の問題ではないかと感じました。
解決策としては、1つの商品に規格という概念で同じ商品での規格を作成することができるこの機能を廃止することです。
規格の機能を廃止し、1商品を1つしか表すことができないようにしてしまうことです。
それにはdtb_productsテーブルに規格取得時に必要なフィールドを持たすことにより解決は可能です。規格以外にもカテゴリやdtb_products_classの情報もdtb_productsテーブルに1つにまとめるとさらに効果が高まります。
言葉では記述するのは簡単ですが、スクリプトの修正はものすごく手間がかかりました。
私はトリガーの機能を利用してそれらの対象となるテーブルが更新されるとdtb_productsテーブルに追加したフィールドを更新するように設定しました。あとはSQL文を発行している箇所などを修正することにより、パフォーマンスが出るようになりました。
個人の感想としては、小規模のECサイトとして使用する場合には非常に満足して使用ができるものだと思います。しかし商品数が多いECサイトとして利用する場合には大きな改修をして使用することになりそうです。
オープンソースで利用できることからあまり贅沢はいえませんが、商品数が多くても利用できるようになっているとさらに大きなニーズに答えられるシステムとしてもおすすめできるものだと感じました。
他にもいろいろなオープンソースで提供されているアプリがあると思いますが、「これは使える!」というものを私にも教えていただけたらとてもうれしいです^^
コメント
コメントフォーム
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













>オープンソースで利用できることからあまり贅沢はいえませんが
確かにその通りですねw
>「これは使える!」
の意図とはずれますがECサイトを作るのも初めてなものでデータベースの構造から悩んでしまったりどのタイミングでどのような処理をすればいいものかと日々葛藤しておりますw
書籍などを見ても実際に「これは使える!」という要素がなく有力な情報があるサイトや書籍などがあれば教えて頂きたいものです^^;
コメントありがとうございます。
>書籍などを見ても実際に「これは使える!」という要素がなく有力な
>情報があるサイトや書籍などがあれば教えて頂きたいものです^^;
いい情報はあまりないのですが、ECサイトは大規模なものをお望みでないのであれば、シンプルな構成で十分だと思います。
一例ですが、商品系のデータベースは1つのテーブルに情報を格納して、カテゴリテーブル程度しか商品とのリレーションはしないでおく。
受注系の情報は、受注テーブルと受注テーブルとリレーションして受注商品テーブルがあれば十分です。
基本はこの4テーブルがあればECサイトとして構築は可能です。
ECサイト構築用の書籍は購入したことがないので、申し訳ございませんが、おすすめなどはちょととわかりません><;
お力になれずに申し訳ございません。
一概には言えませんが、私の環境では、MySQLからPostgreSQLへRDBMSを変更することで体感的に速度アップを感じられました。
コミュニティのBBSでも話題が挙げられているようです。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=2262&forum=3&post_id=13513
コメントありがとうござます。
私も同じ記事を閲覧させていただき、PostgreSQLに変更することも検討したのですが、諸事情により断念することになりました。
そのため、今回のブログのようにカスタマイズという選択をとることになってしまいました。。。
ご丁寧にお教えいただきまして、誠にありがとうございました^^
リプライ頂きましてありがとうございます。
諸事情がおありだったのですね。(^^;
大変失礼しました。
また、こちらへ寄せて頂きます。(^^)
私も以前、EC-CUBEを使っていたのですが…カスタマイズ性を含めて…微妙ですねぇ(苦笑
MySQLで、1万アイテム、数千人の後半、程度の数量だったかと思うのですが…Webサーバ1台DBサーバ一台の別立て構成で、DBサーバが何度かパンクした経験があります orz
あと、不必要情報のセキュリティホールが存在しているのも個人的には気になるところですね( http://d.hatena.ne.jp/gallu/20080802/p1 )。
ただ。対応はよい感じだったので…今後の改善が期待される、といったところでしょうか。
コメントありがとうございます。
セキュリティーホールのブログ確認させていただきました。
私もこの記事を書いているときに、正直どこまで書いていいのか、記事の内容のバランスに私も困りました。
一番伝えたかったのは、やっぱりSQLの部分でした。。
1000件のデータで大中のカテゴリ数で30程度で、一覧表示するのに11秒程かかり、SQLを確認したときに「orz」なったのが印象が強かったもので^^;
機能的には満足できるので、私も今後の改善に期待したい一人です。
実際にソースを見ましたが非常に分かりにくく汚く、そして間違いもある。あまり全体の構造も見てもレスポンス良く動かそうという組み方ではないと思います。
ハッキリ言って公表に値しないレベルですね。オープンソースと言えばいい加減な出来栄えでも許されるのでしょうか?
EC-CUBEをベースにしたASPなどを利用してメンテナンスは業者に任せるのは良いとしても、自前で運営する事は相当な知識と経験が無い限りは絶対にオススメできません。
>EC-CUBEを使ってますが さん
EC-CUBEを利用する前にレスポンス部分などがわかっていたらもうちょっと対応方法が変わってきたのではないかと思います。
自分が対応した例でいうと、データベース設計部分の見直し、情報取得のSQLを見直し&修正、なるべくリレーションをせずに情報を取得するシンプルな方法に改修をしました。
現在のECシステムを求める方々で最低でも1万点の程の商品で動くECシステムのスペックとして求められるものだと思います。
便利なものを使う前にしっかりとした検証をすることと、新しく作成する方が望ましいんだとEC-CUBEのシステムで学ばさせていただきました。
コメントありがとうございます。
たしかにViewを使用することでも問題を解決できるかと思います。
Viewを作成するクエリーなどを考えて作成しないと作成時に重くて動かなくなるという点も出てくる可能性もあります。
オープンソースのものでViewのクエリなど考えてまで使ってまで改修をかけないといけないというのは使用する側にはとても大変です^^;