EC-CUBEのカスタマイズ、ネットショップ制作メモ

主にEC-CUBEを利用したネットショップの制作、カスタマイズや独自機能の開発について

concrete5が重くなってきたら古いバージョンを消そう。

concrete5のちょっとしたTips。
concrete5はページを更新する度にその履歴が「バージョン」として残っていきます。
間違えちゃったり、以前の状況を確認したい時なんかに便利なのですが、この履歴データのせいで、しばらく運用しているとデータベースが肥大化していきます。
特にCollectionVersionBlocksとかすごいレコード数になったりします。


なので、
「あれ?最近なんか重くなってきたなー」
と思ったら古いバージョンを消しましょう。データベースからもレコードが消えてデータベースが軽くなります。
消し方は、

  1. ページを編集モードにして
  2. 履歴」をクリック
    古いバージョン」をクリックすると最新のバージョン以外が選択されるので便利です。




  3. 削除」をクリック


  4. 編集モードを終了。

これで古い履歴が全部消えます。ついでにデータベースを最適化しておいた方が良いでしょう。

!注意!戻せませんので必ずバックアップを取ってから作業しましょう。

管理画面からデータベースのバックアップが取れます。必ずバックアップを取ってから作業しましょう。

大量のページがあるサイトではかなり面倒

このやり方では1ページづつしか古いバージョンを消せません。
なので大量にページがあると厄介です。
自分でも欲しいので、近い内に全ページの古いバージョンを消すアドオンでも作ろうと思ってます。

もし、「待てないー!」という方はご自分でチャレンジされても良いかもしれません。
/concrete/models/collection_version.phpのCollectionVersion::delete()に実際の処理が書いてあります。

EC-CUBEをチューニング - MySQL:MySQLでもviewを使って8倍速にするカスタマイズ!!

こちらは2.4系の記事になります。3系でのチューニングの記事はコチラ

さて、だいぶ間が開いてしまいましたが、前回の続きで、EC-CUBEMySQLで動かす際のチューニングの続きです。
僕がやった施策の中ではこれが劇的に効果がありました。
今回は、MySQLでもviewを使うという物です。

データベースのviewとは、簡単い言うとSELECT文の結果をテーブルの様に扱える機能という事です。

EC-CUBEは、PostgreSQLで動かす場合は、商品情報のカテゴリや規格の情報をまとめた物をviewにして、商品一覧画面や商品詳細画面等で利用しています。
ところが、EC-CUBEMySQLで動かす場合、MySQLのバージョンが4.1でも利用出来る様に作られているため、viewの部分をサブクエリにして動かしています。
この、ネストしたサブクエリからSELECTする場合、インデックスが使えないので、こんなに遅くなっていて、インデックス張っても意味が無い訳です。

バージョン5.0からはMySQLでもviewが使える様になっています。最近のレンタルサーバであれば5.0以上を導入しているところも多いので、バージョン5.0以上なら導入可能です。

8.25倍速くなった!

結果から言うと、/products/list.php*1 が8.25倍速くなりました!
実はちょこちょこ問題もあるので、微修正は必要ですが、そんな事も苦にならないくらいの激速っぷりです!!
体感的にも劇的な改善です。
一応ちょっと負荷を上げた状態でのabテストの結果も貼っておきます。

Document Path:          /eccube244/html/products/list.php
Document Length: 90587 bytes

Concurrency Level: 5
Time taken for tests: 13.157 seconds
Complete requests: 10
Failed requests: 0
Write errors: 0
Total transferred: 909540 bytes
HTML transferred: 905870 bytes
Requests per second: 0.76 [#/sec] (mean)
Time per request: 6578.478 [ms] (mean)
Time per request: 1315.696 [ms] (mean, across all concurrent requests)
Transfer rate: 67.51 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.9 2 2
Processing: 1728 5980 3188.8 5578 13155
Waiting: 1323 4816 3472.3 4640 13145
Total: 1728 5981 3189.5 5580 13157
WARNING: The median and mean for the initial connection time are not within a normal deviation
These results are probably not that reliable.

Percentage of the requests served within a certain time (ms)
50% 5580
66% 7296
75% 7300
80% 7530
90% 13157
95% 13157
98% 13157
99% 13157
100% 13157 (longest request)


で、実際にどうするかですが、ここからはクロスキューブからクリスマスプレゼントです。

*1:全件一覧表示

続きを読む

EC-CUBEをチューニング - MySQL:テーブル設計 - カラムの型

EC-CUBEの新バージョン、2.5.0の開発が開発合宿でかなり進んだ様です。僕も参加したかったのですが、諸事情により参加出来ませんでした。*1
EC-CUBE2.5.0では、MySQLへの対応がかなり改善されていて、パフォーマンスもかなり向上しているとの事です。
いやー、楽しみですね。


しかし、現在EC-CUBEECサイトを運営されている方は、MySQLへの対応が不完全なバージョンを利用しており、2.5.0がリリースされるまでは2.4.4以下のバージョンを使い続けなければいけません。
また、仮に2.5.0がリリースされたとしても、バージョンアップ作業は大変でしょうし、すぐバージョンアップは出来ないと思います。*2
そこで、このEC-CUBEをチューニング - MySQL編もまだ需要があると思いますので、続きを書いてみます。
前回のEC-CUBEをチューニング - MySQL:準備編で、EC-CUBEに大量の商品データを登録するところまでやりました。
今回は、テーブルの構造を出来るだけ変えずにパフォーマンスをアップさせる方法です。
レンタルサーバ等ではMySQLのパラメータの設定を変更出来ない環境も多いと思うので、テーブルやカラムの設定変更だけで出来るだけパフォーマンスを上げます。

前回準備した環境では遅過ぎて作業に支障が出るので、VM上に再度環境を構築しました。
PHP 5.2.13
MySQL 5.1.39

大カテゴリ
5
中カテゴリ
4
小カテゴリ
4
規格1
5
規格2
5
商品数
1000
商品数を減らしてカテゴリ、規格を増やしてみました。
標準の状態では全商品一覧の表示に13960msもかかってしまいました。遅いですねー

カラムの型を変更する。

EC-CUBEでは、テキストデータが入るカラムがtext型になっています。*3
しかしMySQLではtext型が設定されているカラムはインデックスに指定出来ませんし、min()等の関数で処理する際もかなり遅くなってしまいます。
なので、

  • dtb_productsのname、main_list_comment
  • dtb_produts_classのproduct_code*4

をchar型に変えてしまいます。
結果は10843msになりました。ちょっと速くなりましたね。


「おいおい、チューニングで大切なインデックスは?」
とツッコミたくなる方もいらっしゃると思いますが、EC-CUBEMySQLで動かす場合、PostgreSQLで動かす時のviewをサブクエリをガンガン ネストして表現しているので、あんまり意味がありません。
むしろ遅くなる事の方が多い様です。


次回は、もう少し踏込んで、テーブルを変えずにもっと劇的に変わる方法をご紹介します。

*1:残念!

*2:カスタマイズしていると余計に大変だと思います。

*3:多分PostgreSQL使う時の名残です

*4:ここ重要

Google ショッピング beta 登場! EC-CUBEの商品情報フィードをGoogleショッピング用に吐いてみる。

10月28日、GoogleよりGoogle ショッピングの日本語betaがリリースされました。

googleショッピング
Googleショッピングとは、要はGoogleで色んなECの商品情報が検索出来るという新しいgoogleのサービスです。*1海外では少し前から既にスタートしていました。
今現在では直接的な売上げに対する効果はまだ未知数ですが、SEOや、今後の事を考えると取り入れた方が良さそうです。

Googleショッピングに自分のショップの商品を登録する方法は、商品情報のテキストファイルか、xml(rss)をgoogleに手動でアップデートするか、WEB上に公開してgoogleさんに取りにきてもらいます。*2
googleさんに取りに来てもらう場合、自動で取りに来るスケジュールを設定できるので、らくちんになります。

そこで、EC-CUBEの商品情報をrssで吐いて登録してみました。

実はEC-CUBEには商品情報のRSS機能が元々ある。

実は、EC-CUBEには元々商品情報のRSSを出力する機能があります。
EC-CUBEのショップをお持ちの方は
http://[ショップのURL]/rss/product.php
にアクセスしてみてください。
何か変な形式のxmlが取得できます。
クロスキューブのEC-CUBEデモサイトの場合だと
http://eccube-customize.xross-cube.com/rss/product.php
になります。
これは、元々開発元の方で、実際に公開されているEC-CUBEを使ったショップで、どれくらいの商品が公開されているかを集計する為に作られた様です。
ただ、サイト運営者にとってはまったく用途の無い機能です。
今回、この機能がやっと日の目を見る時が来ました。
基本的な機能はこの商品情報xml出力機能にあるので、あとはちょっと表示形式をgoogleさんに合わせれば、Googleショッピング用のrss出力が可能になります。

Googleショッピングの商品情報フィードの形式

googleショッピングのフィード形式はRSS 2.0およびAtom 1.0で、以下の様な感じです。

<?xml version="1.0"?>
<rss version="2.0" 
xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>The name of your data feed</title>
<link>http://www.example.com</link>
<description>コンテンツの説明</description>
<item>
<title>赤いウールのセーター</title>
<link> http://www.example.com/item1-info-page.html</link>
<description>寒い冬の夜におすすめの、柔らかく着心地の良い、暖かいセーターです。</description>
<g:image_link>http://www.example.com/image1.jpg</g:image_link> <g:price>2500</g:price> <g:condition>新品</g:condition> <g:id>1a</g:id>
</item>
</channel>
</rss>
<?xml version="1.0"?>
<rss version="2.0" 
xmlns:g="http://base.google.com/ns/1.0">

は、おまじないなので、必ず書かないといけません。

<channel>
...
</channel>

の部分がメインの情報が格納されていて、

<item>
...
</item>

の部分が個々のアイテム情報になります。
<channel>直下の<title><link><description>は、それぞれショップに関する情報です。
ショップ名、SITE_URL、ショップ説明といったところでしょうか。

<item>の商品情報での必須項目は、

  • id [id]
  • 商品名 [title]
  • 商品リンク [link]
  • 価格 [price]
  • 商品説明 [description]
  • 状態 [condition]

になります。
idEC-CUBEのproduct_idです。
商品リンクはフルパスで、商品詳細ページへのURLとなります。
通常のEC-CUBEであれば、
http://[ショップのURL]/products/detail.php?product_id=[product_id]
になると思います。
価格はその商品の税込価格です。
商品説明は1000文字まで送信可能との事なので、EC-CUBE詳細メインコメントにしておいた方が良さそうです。
状態は新品か、中古かのフラグです。
新品なら「new」、中古なら「used」とします。


必須項目以外にも多くの商品情報を追加する事が出来ます。
可能であれば出来る限りの情報を掲載した方が良いと思います。
追加で送信出来る情報は、

  • GTIN [gtin]
  • ブランド [brand]
  • 製品番号 [mpn]
  • 商品画像リンク [image_link]
  • 商品カテゴリ [product_type]
  • 在庫状況 [availability]
  • 在庫数 [quantity]
  • 送料 [shipping]
  • 税金 [tax]
  • 仕様 [feature]
  • オンライン限定 [online_only]
  • 製造者 [manufacturer]
  • 有効期限 [expiration_date]
  • 搬送重量 [shipping_weight]
  • ジャンル [genre]
  • 目玉商品 [featured_product]
  • 色 [color]
  • サイズ [size]
  • 製造年 [year]
  • 著者 [author]
  • 版 [edition]

があります。
どういう商品かによってどの項目を使うかは変わってきますが、GTIN(JAN)商品画像リンク商品カテゴリ在庫状況は出力した方が良さそうです。
特に商品カテゴリに関しては、EC-CUBE同様に複数カテゴリの指定が出来るので、出力した方がよさそうです。*3

実際の出力結果については
http://eccube-customize.xross-cube.com/rss/product.php
を見てみて下さい。

今現在では、Googleショッピングの有効性は未知数です。
また、詳細な商品情報を標準的な形式で表示される事によって、競合店に自店の商品情報を抜かれやすくもなりますので、デメリットもあります。
ある程度、認知度が上がって、利用ユーザが増えてから導入しても良いですし、新しい集客ルートとしていち早く導入してみるのも良いと思います。

クロスキューブでは、ECサイトの構築に関する情報だけでなく、構築後の運営まで考えたサービスを提供しており、日々こういったECサイト運営に関する情報も集めております。
また、構築後の運営サービスも承っておりますので、ご興味があれば是非コチラからお問い合わせください。

*1:Googleが運営する無料の価格ドットコムの様な感じでしょうか

*2:詳細はコチラ: http://www.google.com/support/merchants/bin/answer.py?answer=188478&hl=jp

*3:商品詳細ページの関連カテゴリ表示処理を使うと簡単です

賢いオープンソースCMSの選び方

高機能CMS concrete5
クロスキューブではオープンソースの高機能CMSconcrete5の日本語版の開発に参加しているのですが、今回、開発元のアメリconcrete5 CMS Inc.より公式サービスパートナーとして認定されました。
これでよりコアチームに近いポジションで開発が出来ます。

今後は、concrete5の普及と、concrete5を利用したWEBサイト構築・運営業務に力を入れていきたいと思います。

concrete5は各ページの編集作業やサイト構成などかなり直感的に操作が出来、WEBサイト運営を非常にしやすい汎用CMSです。*1
特にユーザインターフェイスは素晴らしい物があり、かなり気に入ってます。

また、どこでプレゼンしても非常にエンドユーザの受けが良いです。
ただ、ちゃんと運営しやすいWEBサイトを構築する為には、最初のWEBサイト構築は運用フローまで考えて作る必要があり、それなりに手間がかかります。
つまり、「WEBサイト制作を楽にするCMS」ではなく、「WEBサイト運営を楽にするCMS」です。*2

僕は個人的にこういったエンドユーザが見えているソフトが好きです。
開発案件で、どのプロダクトを使って構築するかを考える際に、ここはかなり重要です。

賢いオープンソースの選び方

WEBサイトを構築する場合、大体オープンソースCMSを使います。

の様な感じです。
どのCMSを使っても作れるのですが、その用途に合わせ最適な物を選択しています。

そこで重要になってくるのが、「どのCMSを選択するか?」 です。
先に述べた様に汎用CMSひとつとってもいくつもプロダクトはあります。
これはどのオープンソースを選択するかでも一緒ですが、以下のポイントがあります。

機能
  • 要件を満たしているか?
動作環境
使いやすさ
  • 実際に利用する担当者のITリテラシーはそんなに高く無い事が多いです。
    まずHTMLは書けないと思って良いでしょう。
  • マニュアルと睨めっこしないと行けない様な特殊な操作を要求するのもダメです。「直感的」に勘である程度操作出来る必要があります。
日本語対応状況
  • 日本製の物であれば心配いりませんが、海外製で日本語対応している物は注意が必要です。
  • 「表示だけとりあえず日本語で表示出来る」って物も結構多いです。こう言う物の場合、大体メールが文字化けします。
開発状況

コレ非常に重要です。

  • どのれくらいの頻度でバージョンアップされているか?
    • しばらくバージョンアップされていない物は要注意です。実質的に開発が止まっている可能性があります。
    • また、毎週アップデートしている様な物も注意が必要です。「サイトを構築してリリースしたら大分最新版と離れてしまった」という事になっちゃいます。
  • 最初のバージョンが出てどれくらい経過しているか?
    • これは古過ぎても新し過ぎてもいけません。新しい物の場合、バグフィックスが進んでなく、潜在しているバグが多い場合もあります。また、古過ぎる物の場合、基本的な設計が古くてスグに時代遅れになってしまう場合があります。
  • 開発者の数
    • 出来れば海外製の物で、世界中で開発されている物が良いです。絶対的な人数が違いますし、様々な環境で利用され、問題が解決されている事が期待出来ます。
    • 日本製のオープンソースはココが弱いです。EC-CUBEとかWordpressとかは比較的多いのではないでしょうか?
  • 日本国内での普及状況
    • 世界的なトレンドと日本のトレンドがズレる場合が結構あります。世界中で利用されている様な物は国内で普及している物の方が、より日本語環下での実績が多いので安定して稼働します。

オープンソースの開発状況と言うのは、商用ソフトでいうサポート体制と近い物があり、開発状況が良好な物ほど良いサポートが受けられると考えて良いと思います。
実際に運営していく中ではココが非常に重要になってきますので、注意してください。


この様に、複数の角度から評価して利用プロダクトを決める必要があります。
単純に、「機能が豊富だから」「新しいから」「設計がキレイだから」で決めてしまうと、結局ユーザにとって使いにくい物になってしまいます。
ユーザの評価が下がるという事は、納品した業者の評価が下がるという事です。


これらの点に注意して、その時点で最適オープンソースを活用し、費用対効果の高いWEBサイトを制作して頂ければと思います。
(現時点ではconcrete5はかなり優秀です。国内の大手企業でも結構使われています。)

*1:近いところだと、xoopsやJoomla、GeeklogmodXなんかが近い感じです。

*2:無論、ページ数が多ければサイト制作も楽になりますが

EC-CUBEにダウンロード販売機能が追加! 大容量ファイルもイケる?

EC-CUBEでepub,PDF,mp3などもダウンロード可能に現在、EC-CUBEの開発コミュニティにて新バージョンのEC-CUBE Ver.2.5.0が開発されています。
今回の目玉はプラグイン機能の追加*1PEAR::DBからPEAR::DB2への切り替えと*2ダウンロード販売機能管理画面のxhtmlではないでしょうか?
特に最近盛り上がっているのはダウンロード販売機能です。
ダウンロード販売機能と言うのは、画像音楽動画電子書籍等のコンテンツやソフトウェアを、購入したお客様に対してダウンロードしてもらって納品するというものです。

今日はその、ダウンロード販売機能について書いてみます。

 

言うだけ言ってみた。

今年の7月にEC-CUBE開発コミッターのMLに、開発元のロックオン様より下記の様なメールが流れて来ました。

かなり遅れてしまいましたが、EC-CUBE2.4.4のリリースも完了し、前々より
予定しておりました、EC-CUBE2.5の開発を実際に進めていこうと思っております。

本メールは、今回の2.5開発作業開始に関するご報告と、作業協力のお願い の
2点でございます!

....中略...

上記を実施していただきたく思っておりますが、特に、現段階において、
まずは機能追加のご提案をいただきたく思っております。

早速以下、ご提案をお待ちしております。

そこで早速

2.5の機能提案についてですが、早速いくつかご提案です。

■人間用サイトマップ生成機能(○修正難易度:低)
以前コミュニティに要望があり、簡単に実装できたのでどうかな?と思います。当方のソースであれば提供いたします。

ダウンロード販売機能(○修正難易度:中)
提案というか要望になってしまうのですが、クォーレ様が無料で配布されているダウンロード販売機能ですが、本体に組み込めないでしょうか?最近電子書籍等が流行ってきている事もあり、要望が多いです。是非お願いしたいです。
http://ec.cuore.jp/products/detail.php?product_id=4

API(○修正難易度:中)
現在当方で開発している機能ですが、商品情報や店舗情等をHTTPリクエストでxmljsonで返すものです。2.5に間に合うかどうかが微妙ですが、間に合えば入れて頂きたいです。

■フッターのコピーライト年の自動更新(○修正難易度:低)
単純なSmartyタグで実装出来るので是非。

■シンプルなテンプレート(○修正難易度:高)
デザインカスタマイズのベースとなる様なシンプルなテンプレートが欲しいです。

と、その時思いついた希望を返信。
結果、サイトマップは僕が提供する事になり、クォーレさんがダウンロード機能を提供してくれる事になりました。*3
いやー、言ってみるモンですね。
クォーレさんでは既にダウンロード機能を独自に一部フリーで提供されていて、頻繁にアップデートを繰り返しています。*4
なので、新機能にも関わらず既に複数の実績があり改良が重ねられているという素敵な事態です。

大容量ファイルをダウンロードさせるとサーバのメモリを大量消費

早速クォーレさんがコードをコミットされていたので、速攻でチェックしました。
気になっていたのは、ダウンロード方法アップロード方法です。
と言うのも、以前同様の機能を開発した時に、何も考えずにファイルを出力してしまうと、容量の大きいファイルではメモリが足りずにエラーを起こしていたからです。
PHPの設定で利用可能メモリを大きくすれば動きますが、大容量ファイルのダウンロードには時間がかかるので、ダウンロードが複数重なった時に大変な事になってしまいます。
単純にファイルのURLへリダイレクトしてしまえばPHPでメモリを大量消費する事は無くなりますが、それではURLを知っている人間が誰でもダウンロード出来てしまいます。
ダウンロード販売」ではクリティカルな問題です。
ではどうすれば良いか?
サーバ側でリクエストしているユーザが、そのファイルをダウンロード出来る権利を持っており、正しいリクエストかどうかを判断して、メモリを節約しながらファイルを出力して上げる必要があります。
クォーレさんのコードではダウンロード可能かどうかのチェックはちゃんとされていましたが、一旦ファイルを丸ごとPHPで読み込んでから出力する形式になっていました。*5
小さいファイルであればこれでも全然問題ありませんが、数MB以上のファイルでは少々メモりを贅沢に使ってしまう事になってしまいます。
なので以下の様に修正を提案。

//ファイルサイズ指定
$zv_filesize = filesize($realpath);
header("Content-Length: " . $zv_filesize);
set_time_limit(0);
ob_end_flush();
flush();

//ファイル読み込み
readfile($realpath);

//ファイルサイズ指定
$zv_filesize = filesize($realpath);
header("Content-Length: " . $zv_filesize);
set_time_limit(0);
ob_end_flush();
flush();
$fp = fopen($realpath, "r");
while(!feof($fp))
{
    print fread($fp, round(DOWANLOAD_RATE * 1024));
    flush();
    sleep(1);
}
fclose($fp);

に変更します。
ポイントはreadfile()では無く、print fread()を使う所です。
readfile()はファイルを丸ごと読み込んでしまいますが、fread()は指定されたバイトだけ読み込みます。
つまり、「ちょっと読み込んで出力」を繰り返す感じです。
上記のコードでは、ついでにDOWANLOAD_RATEという定数を使って一度に読み込むサイズを変えられる様にしてあります。これでダウンロード速度の指定も出来るので帯域が制限されているサーバとかでも便利になります。

クォーレさんでテストしてみて、問題が無ければ提案した方式にしてくれるとの事でしたので、楽しみに待つ事にします。*6

大容量ファイルのアップロードは?

次に問題になるのが大容量ファイルのアップロードです。
これもダウンロードの問題と一緒で、管理画面から普通にPOSTしてしまうとサーバ側で問題が起きます。
現段階では大容量ファイルのアップロードはFTPソフト等を使ってアップロードするのが現実的な様です。*7

EC-CUBE 2.5.0は年末リリース?

現状のロードマップでは、

  • EC-CUBE 2.5.0 α版(2010年9月末 完了予定)
    • 機能面をFIX
      • ナイトリービルド版(コミュニティ版)との統合
      • 基本機能部分の作成
      • 各種機能の追加
  • EC-CUBE 2.5.0 β版(2010年11月目処)
  • EC-CUBE 2.5.0 RC版-正式版(2010年中目処)
    • 不具合修正後、正式リリース(RC版以降、基本的に仕様の変更は行いません。)

となっています。
予定通りに行けば年末か年始ごろに正式版がリリースされる予定です。


このダウンロード機能が追加されれば、様々なコンテンツ販売がグッとしやすくなります。
また、商品説明のPDFファイルのダウンロード等もカンタンに提供出来る様になるので、「ダウンロード販売」以外でも色々役に立ちそうですね。
いやー楽しみです。

*1:コミュニティ版では既に実装されています。

*2:大河内さん、本当にお疲れ様です。

*3:開発コミュニティでのやりとり: http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=6489&forum=5

*4:出しっぱなしじゃなくて、無償で配布している物もちゃんとメンテされている所が素晴らしいですね。

*5:実際に開発環境下でテストコードを下記、ダウンロード中のメモリの使用量をチェックしてみました。

*6:2.5.0のリリースまで待てない方は、是非テストしてみてください。開発SVNからチェックアウトできます。

*7:FTPで大きいファイルをアップロードした場合は管理画面ではなく、CSVでファイル名を指定して商品登録を行うフローの様です。

EC-CUBEのフッターのコピーライトを自動更新にする。

EC-CUBEのフッター
先日、EC-CUBEリポジトリにコミットした物です。
EC-CUBEのフッターにはコピーライトの表記がありますが、そのコピーライト表記の年がベタ書きになっています。

<!--▼FOTTER-->
<div id="pagetop"><a href="#top"><img src="<!--{$TPL_DIR}-->img/common/pagetop.gif" width="100" height="10" alt="このページのTOPへ" /></a></div>
<div id="fotter">Copyright(C)2000-2010 EC-CUBE All rights reserved.</div>
<!--▲FOTTER-->

これだと年が明ける毎にフッターを修正しないといけないので、クロスキューブでEC-CUBEを使ってECサイトを構築する際は、いつも自動で表示が切り替わる様にしています。

続きを読む

EC-CUBEの障害対応サービス始めました。

EC-CUBE障害対応フロー
EC-CUBEは非常に良く出来たCMSですが、バグが無い訳ではありません。また、環境や運用によって思わぬトラブルが発生する事があります。
そういったトラブル(障害)に遭遇し、困っている方からポロポロお問い合わせを頂きます。
その際に、毎度
だいたいの症状はわかりました。しかし調査してみないと確かな事は解りません。まず調査をする必要があります...*1
と、障害対応の手順をご説明しているのですが、いっそちゃんとしたサービスとして始める事にしました。

*1:お医者さんと一緒ですね。

続きを読む

concrete5の はてなダイアリーRSS用のカスタムテンプレート

concrete5はてなダイアリー用のRSS Displayerのカスタムテンプレートを作ってみました。*1

concrete5にはRSSをサイトのコンテンツとして表示する、「RSS Displayer」というブロックが標準で付いていますが、はてなダイアリーRSSは記事のタイトルにカテゴリ名が

[ウェブサイト][WEB][MySQL][PHP][日本語][オープンソース][OSS][CMS][concrete5]concrete5 日本語デモサイトを最新版、5.4.0.5.jaにアップグレードしました。

の様に「[」と「]」に挟まれた形で出力されてしまい、そのままでは非常に読みにくくなってしまいます。

このカスタムテンプレートでは、[]で囲まれたカテゴリ部分をタイトルとは別に表示し、それぞれのカテゴリの記事一覧へリンクを張ります。
使い方

  1. 解凍して出来る「rss_displayer」というフォルダごと/blocksにアップロードしてください。
  2. はてなダイアリーRSSを読み込む様に設定したRSS Displayerブロックをページに配置します。
  3. 配置したブロックをクリックし「カスタムテンプレート」を選択し、「hatena_rss」を選択します。

ダウンロードは以下より

はてなダイアリー用 RSS Displayer Template

*1:と言うか随分前に作って公開忘れてました。

EC-CUBEをチューニング - MySQL:準備編

先日、EC-CUBE高速化カスタマイズサービスEC-CUBEのパートナー企業からリリースされました。
クロスキューブにもEC-CUBEのパフォーマンスチューニングのお問い合わせはチョコチョコ来ます。*1
やっぱりEC-CUBEのパフォーマンスで苦労されている方が多いんでしょうね。

EC-CUBEは商品点数が多いと遅いと言われますが、そこまで遅くありません。
ただ、ある特定の条件を満たすと、激重になります。
その条件とは、

  • データベースにMySQL*2を使う。
  • 規格が多い。
  • カテゴリが多い。

です。
特に規格を「規格1」、「規格2」両方大量に設定した場合は酷い事になります。
これは設計上どうしようも無い部分なので、EC-CUBE 2.5.0で改善されるのを祈るばかりです。

そこで、この遅い条件を満たした時、どこまでチューニング出来るか試してみる事にしました。

*1:大体がDBをPostgreSQLに変えたら解決しますが...

*2:特に4.1系

続きを読む