2009/03/11 カテゴリ : Tech  Smarty  PHP 

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サイトとして利用する場合には大きな改修をして使用することになりそうです。
オープンソースで利用できることからあまり贅沢はいえませんが、商品数が多くても利用できるようになっているとさらに大きなニーズに答えられるシステムとしてもおすすめできるものだと感じました。

他にもいろいろなオープンソースで提供されているアプリがあると思いますが、「これは使える!」というものを私にも教えていただけたらとてもうれしいです^^

コメント

    • ぐる
    • 2009年03月12日 13:31
    • こんにちは。EU-CUBE私も使っておりましたが重かったり不具合があったりと問題がありソースを見たところ改善するにも知識不足で結構な苦労がありそうだったので1から自分で作る方向で進めております。

      >オープンソースで利用できることからあまり贅沢はいえませんが
      確かにその通りですねw

      >「これは使える!」
      の意図とはずれますがECサイトを作るのも初めてなものでデータベースの構造から悩んでしまったりどのタイミングでどのような処理をすればいいものかと日々葛藤しておりますw

      書籍などを見ても実際に「これは使える!」という要素がなく有力な情報があるサイトや書籍などがあれば教えて頂きたいものです^^;
    • 笹亀弘
    • 2009年03月12日 21:30
    • >ぐるさん
      コメントありがとうございます。

      >書籍などを見ても実際に「これは使える!」という要素がなく有力な
      >情報があるサイトや書籍などがあれば教えて頂きたいものです^^;
      いい情報はあまりないのですが、ECサイトは大規模なものをお望みでないのであれば、シンプルな構成で十分だと思います。
      一例ですが、商品系のデータベースは1つのテーブルに情報を格納して、カテゴリテーブル程度しか商品とのリレーションはしないでおく。
      受注系の情報は、受注テーブルと受注テーブルとリレーションして受注商品テーブルがあれば十分です。
      基本はこの4テーブルがあればECサイトとして構築は可能です。

      ECサイト構築用の書籍は購入したことがないので、申し訳ございませんが、おすすめなどはちょととわかりません><;
      お力になれずに申し訳ございません。
    • FUTTY
    • 2009年03月12日 23:37
    • はじめまして、笹亀さん。

      一概には言えませんが、私の環境では、MySQLからPostgreSQLへRDBMSを変更することで体感的に速度アップを感じられました。

      コミュニティのBBSでも話題が挙げられているようです。
      http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=2262&forum=3&post_id=13513
    • 笹亀弘
    • 2009年03月13日 11:13
    • >FUTTYさん

      コメントありがとうござます。

      私も同じ記事を閲覧させていただき、PostgreSQLに変更することも検討したのですが、諸事情により断念することになりました。
      そのため、今回のブログのようにカスタマイズという選択をとることになってしまいました。。。

      ご丁寧にお教えいただきまして、誠にありがとうございました^^
    • FUTTY
    • 2009年03月14日 08:38
    • 笹亀さん

      リプライ頂きましてありがとうございます。

      諸事情がおありだったのですね。(^^;
      大変失礼しました。

      また、こちらへ寄せて頂きます。(^^)
    • がる
    • 2009年03月15日 21:58
    • がるです。
      私も以前、EC-CUBEを使っていたのですが…カスタマイズ性を含めて…微妙ですねぇ(苦笑
      MySQLで、1万アイテム、数千人の後半、程度の数量だったかと思うのですが…Webサーバ1台DBサーバ一台の別立て構成で、DBサーバが何度かパンクした経験があります orz
      あと、不必要情報のセキュリティホールが存在しているのも個人的には気になるところですね( http://d.hatena.ne.jp/gallu/20080802/p1 )。

      ただ。対応はよい感じだったので…今後の改善が期待される、といったところでしょうか。
    • 笹亀弘
    • 2009年03月16日 20:38
    • >がるさん
      コメントありがとうございます。

      セキュリティーホールのブログ確認させていただきました。

      私もこの記事を書いているときに、正直どこまで書いていいのか、記事の内容のバランスに私も困りました。
      一番伝えたかったのは、やっぱりSQLの部分でした。。

      1000件のデータで大中のカテゴリ数で30程度で、一覧表示するのに11秒程かかり、SQLを確認したときに「orz」なったのが印象が強かったもので^^;

      機能的には満足できるので、私も今後の改善に期待したい一人です。
    • EC-CUBE利用者
    • 2010年09月08日 17:23
    • ネットショップを運営して5年になる者です。ECサイトの変更を試みましたが、結論から言いますとEC-CUBEを使って実際にネットショップを運営するのはやめた方がいいと思います。次から次にバグや仕様ミスが出てきて、無料以上にコストと労力がかかります。そして最終的にEC-CUBEは使えないという結論に至りました。こんなに質の低いものをオープンソースとか謳って世の中に広めるのはやめて欲しいです。本当に迷惑です。おとなしく有料のサービスを使った方がいいと思います。安くてよいものもたくさんある中で、自由度の高さや無料という言葉に踊らされてはいけません。本当にひどいソフトです。
    • EC-CUBEを使ってますが
    • 2010年09月30日 13:48
    • 同じくEC-CUBEでネットショップを運営して数年になる者です。ウチでは商品点数が数千点になってるんですが、非常にレスポンスが悪くてユーザー離れがひどいです。さらにバグ取りやらメンテやらで非常に手間がかかり販売への意欲を削がれます。担当には「売らせたい」のであって「不具合を修正させたい」訳ではありません。このような状態では無駄な人件費がかかると判断するしかないのです。
      実際にソースを見ましたが非常に分かりにくく汚く、そして間違いもある。あまり全体の構造も見てもレスポンス良く動かそうという組み方ではないと思います。
      ハッキリ言って公表に値しないレベルですね。オープンソースと言えばいい加減な出来栄えでも許されるのでしょうか?
      EC-CUBEをベースにしたASPなどを利用してメンテナンスは業者に任せるのは良いとしても、自前で運営する事は相当な知識と経験が無い限りは絶対にオススメできません。
    • 笹亀弘
    • 2010年10月01日 16:39
    • >EC-CUBE利用者 さん
      >EC-CUBEを使ってますが さん
      EC-CUBEを利用する前にレスポンス部分などがわかっていたらもうちょっと対応方法が変わってきたのではないかと思います。

      自分が対応した例でいうと、データベース設計部分の見直し、情報取得のSQLを見直し&修正、なるべくリレーションをせずに情報を取得するシンプルな方法に改修をしました。

      現在のECシステムを求める方々で最低でも1万点の程の商品で動くECシステムのスペックとして求められるものだと思います。

      便利なものを使う前にしっかりとした検証をすることと、新しく作成する方が望ましいんだとEC-CUBEのシステムで学ばさせていただきました。
    • tao
    • 2011年02月24日 17:54
    • MySQLならviewを作ると速くなりますよ。サーバのスペックにもよりますが、多分数万なら平気かと
    • 笹亀弘
    • 2011年02月28日 15:09
    • >taoさん
      コメントありがとうございます。

      たしかにViewを使用することでも問題を解決できるかと思います。
      Viewを作成するクエリーなどを考えて作成しないと作成時に重くて動かなくなるという点も出てくる可能性もあります。
      オープンソースのものでViewのクエリなど考えてまで使ってまで改修をかけないといけないというのは使用する側にはとても大変です^^;

コメントフォーム

認証
captcha_key
 
 

トラックバックURI

最近の記事

アシアルPHP書籍情報