本連載ではEC-CUBE最新版の「2.11.0」を徹底レビューします。
2.4系から、2.11系にジャンプした理由
これまでのEC-CUBEは2.4系でしたが、今回のバージョンアップで、2.11系にバージョン番号が飛びました。その理由について、開発元の株式会社ロックオン取締役副社長の福田博一氏に理由を聞いてみました。
「当初は2.5系ということで開発していましたが、開発が進む中でEC-CUBE発表以来の大規模な改修になりました。せっかく大幅に機能も追加したのに、これまでと同じような小幅バージョンアップのイメージを与えるのは残念だと考えました。旧バージョンからの移行も、そう簡単に行うことができないくらいの変更になっているので、小さなバージョンアップという印象を与えて、ユーザーさんから気軽に『バージョンアップしてよ』と言われると困ってしまうベンダーさんも多いだろうなというのもありました。
そこで、2.5ではないバージョンにしたいと思ったのですが、これまでのソースをベースにしていて、やはり根本は2系ですから、3系と呼ぶには抵抗がありました。じゃあ番号飛ばそう。2.9系?いや、いっそ2桁にしちゃおう。2.10系? 2011年だし2.11でいこう。そんな感じです(笑)」
バージョン番号は、関西系企業らしくノリで決まったようです。
EC-CUBE 2.11系で進化した点
今回のバージョンアップで進化した点は大きくは3つに分類されます。
- ① 新機能の追加
- 「スマートフォン標準対応」「ダウンロード販売機能」「複数配送先設定」など、大小合わせて約150の機能追加が行われています。
- ② 高速化
- MySQL4.1系のサポートが打ち切られ、内部のSQLが大きく見直されました。その結果、前バージョンの EC-CUBE 2.4.4 に比べ、最大60倍の高速化が実現されていると謳われています。こちらについては次回以降でベンチマークをもとに検証していきます。
- ③ 拡張性
- コードやHTMLを見直して、カスタマイズをしやすくしたようです。今回は、この拡張性についてもう少し掘り下げてみましょう。
ソースコードのレビュー
これまでのEC-CUBEのソースコードは、同じような処理があちこちに散乱していたり、使っていない処理が残っていたりして、お世辞にも読みやすいソースコードとは言えませんでした。今回、リファクタリングガイドラインを作成し、それに沿って大幅なリファクタリングを行っているということですが、その成果を確認してみたいと思います。
行数
まずは行数を確認してみました。ロジックが書いているPHPファイルと、HTMLを表示するためのtplファイルをそれぞれ、簡易的に比較してみます。
大幅に機能を拡張し、スマートフォンのテンプレートも1セット分増えているにもかかわらず、ソースコードの量は減っています。
モバイル用ロジックの削除
ソースコードの圧縮要因として大きなところは、これまでのEC-CUBEは、PCページではprocess()をコールし、モバイルページは /mobile にリダイレクトされ、そこから、mobileProcess()をコールしていました。ところが、このprocess()と、mobileProcess()は処理が非常に似ており、冗長なコードの一因となっていました。2.11系ではこの部分を共通化したことでコードの量が大幅に減っていました。この修正は、カスタマイズを行う際に、大いに工数を削減できる内容です。
管理画面のXHTML化
tplファイルのサイズが圧縮された大きな要因としては、ページ数の多い管理画面のコーディングが全てXHTML化されたことに因るようです。それに伴い、メニューボタンも画像ボタンだったものが全てテキスト+CSSでデザインされているので、メニューの追加や変更が容易になりました。
ディレクトリ構造の見直し
デザインカスタマイズを行う際にも、2.11系ではうれしい変更が入っています。アイコンやCSSなどは、これまで管理画面とフロント画面が分離しておらず、1つのディレクトリにまとめられていました。
2.11系では、管理画面やデバイスによりディレクトリが明確に分離しており、より見通し易くなっています。
また、画像ファイルも、従来では画面ごとにフォルダに納められていたのが、背景はbackgroundディレクトリ、ボタンはbuttonディレクトリと、画像の種類ごとに格納されるようになりました。
データベースについて
データベース構造にそれほど大きな変更は無いのですが、2.11系になってviewを使用しなくなりました。これまでカラムの追加などを行った場合は、DROP VIEW, CREATE VIEWを行わなければならなかったのですが、その必要が無くなっています。
今後期待したいしたい点
リファクタリングに関して、「SC_xxx」としてまとめられている共通関数部分まで作業が及んでいません。福田氏によると、これは時間的制約によるものということで、今後のバージョンアップで対応していきたいとのことでした。
まとめると、今回のバージョンアップは、従来に比べて、内部的にも大きく進歩していると言えるでしょう。