EC CUBE TOKYO UG 2019 02 07

EC-CUBE 東京UG 勉強会 / 2019-02-07 レポート

日時:2019年2月7日 19:00から
場所:Connecting The Dots YOYOGI / B1

初めて、EC-CUBEの勉強会に参加しました。勉強会の内容と所感を交えて、レポートを残します。
今回のテーマは注文明細に値引きを追加や、送料計算のカスタマイズなどをすることができるPurchaseFlowの仕組みを理解する勉強で、設計されたEC-CUBEエバンジェリストの足立さんから、ご説明いただきました。内容はサンプルコードの提示と処理内容が表などにまとめられいて、とても理解しやすかったです。

スライド

https://www.slideshare.net/chihiroadachi3/201927-eccubeugpurchaseflow-130874190?fbclid=IwAR1VAYGVyPoFh8tTsTKbLt-p7zIIRrh2YeoB0TtyztygFf13cVPmzpMgG4s

参考資料

サンプルコード

https://github.com/chihiro-adachi/ec-cube/compare/ad03d2d0078f8347c0a8fae9acc1ced74bf6e967…demo-tokyo?fbclid=IwAR3CTDTc6U-Rvobd4hsXn_fK-3etcBtWf6_U6tGgNZSBWqHEt66ADr19XlI

PurchaseFlowの仕様ドキュメント

http://doc4.ec-cube.net/customize_service

ドキュメントに誤りがあり(2019年2月8日現在)
独自に作成した Processor を有効にするには、 app/config/eccube/packages/purchaseflow.yaml の定義を修正します。
とありますが、Processorクラスにアノテーションを指定し、所定のディレクトリに設置すると、自動でロードされ実行されてる仕組みになっています。

use Eccube\Annotation\ShoppingFlow;
use Eccube\Service\PurchaseFlow\DiscountProcessor;

/**
 * @ShoppingFlow
 */
class NebikiProcessor implements DiscountProcessor {
アノテーションには、他に「@CartFlow」「@OrderFlow」が指定できます。
インターフェイスには、他に「ItemValidator」「ItemHolderValidator」などが指定できます。
詳細はスライドやドキュメントを確認してください。

Github Issue

https://github.com/EC-CUBE/ec-cube/pull/2424

質疑応答

(勉強会のあとTwitterなどで収集した情報を編集して記載しています。)

Q.カスタマイズしたファイルはどこにおけばよいの?
A.app/Customizeかapp/Plugin配下に設置すればどこでも読まれるようになっている。

ロードされるパスなどの設定は以下のファイルで行っている。
app/config/eccube/services.yaml
src/Eccube/DepenjencyInjection/*
src/Eccube/Kernel::build()
Q.既存のProcessorを消したり、処理の順番は入れ替えられるの?
A.可能。ただし、本体の設定ファイルを編集する必要がある。

app/config/eccube/packages/purchaseflow.yaml

     45     # Purchase Flow for Shopping
     46     eccube.purchase.flow.shopping:
     47         class: Eccube\Service\PurchaseFlow\PurchaseFlow
     48         calls:
     49             - [setFlowType, ['shopping']]
     50             - [setItemValidators, ['@eccube.purchase.flow.shopping.item_validators']]
     51             - [setItemHolderValidators, ['@eccube.purchase.flow.shopping.holder_validators']]
     52             - [setItemHolderPreprocessors, ['@eccube.purchase.flow.shopping.holder_preprocessors']]
     53             - [setDiscountProcessors, ['@eccube.purchase.flow.shopping.discount_processors']]
     54             - [setItemHolderPostValidators, ['@eccube.purchase.flow.shopping.holder_post_validators']]
     55             - [setPurchaseProcessors, ['@eccube.purchase.flow.shopping.purchase']]
Q.Processorの実行途中で、次のProcessorに行かないような処理はできるの?
A.止められない。
Q.Processorの実行状況、結果をロギングする仕組みはあるのか?
A.実装していない。
Q.Processorの中で例外エラーが発生した時はどう取り扱う?
A.Processor処理内容、エラー内容で適宜判断。
Q.Symfonyのworkflowは使っているのか?
A.使用していない、独自実装。workflowバンドルば別のところで使用している。

Workfflow の参考リンク
https://symfony.com/doc/3.4/components/workflow.html
https://a-zumi.net/eccube4-cancel-status/
https://github.com/EC-CUBE/ec-cube/pull/3325
Q.PurchaseFlowで実装できなかったカスタマイズはあるか?
A.通常便、クール便を含んだ注文の場合、配送種別毎にシステム側で配送先データを生成する必要があった。PurchaseFlowの仕組みでは、要求が実現できず、本体のソースコードを編集して実現した。

最後に

皆さん何かしらの目的をもって参加されていて、大半の方がエンジニア、フリーランスのクリエイター、店舗オーナー、決済会社の方達で、知り合いだけで固まっているような感じはなく、はじめての方でも、気負うことなく参加できる勉強会だと思いました。登壇者の方以外にも、参加者の皆さんから色々なお話を聞けて、とめもためになりました。
勉強会の題材のドキュメントやソースコードは事前にもっと確認しておけば、より身についたなーと。次回に活かそうと思います。

関連記事