初めてのEC-CUBEカスタマイズに苦労した話

今年の2月頃にNTTグループ内カンファレンス(NTT Engineer Festa #3)にて「個人がECサイトを手軽に構築する時代」というテーマで登壇・発表してきました。

EC-CUBE3の概要や利用技術、開発難易度、カスタマイズにあたって苦労した点等をまとめています。EC-CUBEを知りたい方やカスタマイズに興味がある方にとって、少しでも参考となりましたら幸いです。

はじめに

カンファレンスで使用した資料を一部抜粋して公開しています。

以降は、当時EC-CUBEに関して要約したtweetまとめと、スライドの内容についての補足になりますので、スライド自体をお読みいただければ内容は充足するかと思います。

tweetまとめ

スライド補足

EC-CUBE概要

ECサイト向けCMSです。国内でシェアNo1なので、おそらく聞いたことのある方もいらっしゃるのではないでしょうか。

OSSで開発資料やフォーラム、デモサイトも公開されていますので興味がある方は実際に見てみてください。

EC-CUBE公式サイト

注意点はVersionですね。

2019年2月時点で最新Versionは4系です。後述しますが、メジャーバージョンアップでフレームワーク等大幅に変更されているので、触る前にまずは確認した方が良いと思います。

カスタマイズ要件/解釈

「サイト利用者(≠管理者)が、商品を登録して購入できるようにして欲しい」

これは何を意味しているかというと、EC-CUBEに元々備わっている機能はサイト管理者が商品登録できる機能なので、サイト利用者が商品登録できるようにするというのは、新しい機能を追加しましょうってことです。

新しい機能を追加とはいえ、もともと商品を登録する機能自体は用意されているので、それをうまく流用して開発してみましょう、と考えて作業を進めました。

カスタマイズ実施 - Local環境構築

PHPやDB、apache httpd等々導入して、あとは公式で用意されているスクリプトを利用すればすぐにできるかと思います。

(実際のところ、初めに環境構築したときはDBの設定がうまく行かず悪戦苦闘してたのは秘密です。)

EC-CUBE - 開発難易度:利用技術

PHPに始まり、フレームワークのSymfony/Sliex、O/R MappingとしてDoctrine ORM。HTMLのテンプレートエンジンとしてTwig、スタイル系のフレームワークでBootstrap、あとはライブラリ管理でComposer。それに加えて、EC-CUBEの仕様があります。

前述したキーワードが初見の方には、開発難易度が極めて高いと思います。

私はほぼ初見でした(泣)Ruby on Railsで開発経験があるくらいでしたので。

カスタマイズ実施 - 画面・処理の改修

開発難易度は確かに高かったのですが、兎にも角にもとっかかりを作ろうと考えました。

SymfonyがMVC構造であると分かったことは、内容の理解に大きく役立ちました。

また、EC-CUBEのDirectory構造等が公式の開発ドキュメントとして公開されていたので、こちらも役に立ちました。

EC-CUBE開発ドキュメント・マニュアル

Directory構造の詳細はスライドをご覧ください。

大枠を掴むことができれば、あとはgrepとfindの力技で進めることができました。

新しいことだらけで大変だったのですが、なんだか便利な技術があるものだなぁって思ったりして、わくわく、関心してましたね。

例えば、Doctrine ORMはSQLを使わずにテーブルに対応するソースを作成して、ソース上のメソッドでテーブルのデータの操作が可能になるような技術なのですが、今まで全く知らなかったので、ただただ、すごいなと思ったりしてました。

(SQLは勉強したいなって常日頃思っているので、またSQLを勉強する機会を逃してしまったな、と思ったりもしてました)

カスタマイズ要件 - 解釈の具体化

要件をソース単位で落とし込むことができれば、もうゴールは近いと思います。この状態に至るまでがとても長かったです。

カスタマイズで苦労したところは多々有りましたが、動的デバックがしづらい( IDE無し、$dump()を利用 )が最も大きな要因だったように思います。何かいい方法があれば知りたいです。

振り返り

EC-CUBEのロードマップやエンジニア視点で考えた場合のEC-CUBEの捉え方、CMSのシェア、所感等々になります。

おわりに

あまりEC-CUBEの処理自体に踏み込んだ内容ではなかったので参考になる方は少ないかもしれませんが、EC-CUBEについて知りたい方、カスタマイズをしたい方等の理解の一助となりましたら幸甚です。