Too Big to Succeed: Scaling e-Commerce on Rails

Too Big to Succeed: Scaling e-Commerce on Rails

Talk about issues encountered building e-Commerce platform on Rails, presented at "Ruby on Rails x E-Commerce Startup Night" in Shibuya, Tokyo.

Eb7f91e7b7b3457ca57701a40f920f2a?s=128

Chris Salzberg

November 30, 2015
Tweet

Transcript

  1. Too Big To Fail Succeed Scaling e-Commerce on Rails Chris

    Salzberg クリス・サルツバーグ
  2. 自己紹介  カナダ人(モントリオール出身)  github など: @shioyama  Globalize のオーサーの一人

     Spree の contributor  (Arch) Linux が大好き
  3. None
  4. None
  5. パートナー

  6. e コマース @ • ストアがいっぱい (50+) • 通貨がいっぱい (JPY, EUR,

    USD, TWD...) • 複数の言語 ( 日本語 , 英語 , フランス語 ...) • コンビニ、銀行振込、予約販売など • ライセンスキー、 DRM
  7. None
  8. None
  9. None
  10. None
  11. 導入時( 2011 )の条件 1) 様々なストアを統一した形で運用できる – 多言語、多通貨 2) 開発者以外でもコンテンツが作成できる 3)

    ストアごとの独自機能も追加(開発)できる
  12. 条件によるシステムの構成 • フロント – Spree + Spree extensions – Comfortable

    Mexican Sofa (CMS) – (Nginx per-site configuration) • バック – 独自の注文・商品管理システム (Spree Admin なし) – CMS Admin
  13. None
  14. None
  15. request.env['SERVER_NAME'] www.avg.co.jp www.kotoeu.com Prod Site Dev Site name “AVG ”

    ストア domains “www.avg.co.jp” default_currency JPY name “Kotobukiya” domains “www.kotoeu.com” default_currency EUR has_many :cms_sites コンビニ クレジット has_many :payment_methods 銀行振込 Electronic has_many :shipping_methods Prod Site Dev Site has_many :cms_sites PayPal Credit Card has_many :payment_methods EMS has_many :shipping_methods Air Mail
  16. /c/cart /a/category /contact-us Spree Application CMS steam.degica.com/...

  17. カートをレイアウトに埋め込む app/views/spree/orders/show.html.erb CMS レイアウト

  18. 商品をコンテンツに埋め込む app/helpers/product_sale_helper.rb

  19. メールもテンプレート化する

  20. カスタム機能 • ライセンスキー( spree_license_key ) • 予約販売( spree_pre_order ) •

    出荷サービス( spree_shipping_service ) • コンビニ手数料( spree_payment_method_fee ) • DRM の有効化 • 外部 API との連動など
  21. 柔軟性のあるシステム • ストア設定 – コンテンツ+レイアウト – 支払方法、配送方法 – Spree Preferences

    • メールのデザインと見た目も変更できる • ニーズに応じてカスタム機能も追加
  22. … でも

  23. 課題

  24. どうしても足りない • CMS のヘルパー機能の HTML は修正できない • カートの HTML も変更できない

  25. Spree API POST /api/orders.json POST /api/orders/R1234567/line_items.json POST /api/orders/R1234567/line_items.json PUT /api/orders/R1234567.json

    PUT /api/orders/R1234567.json PUT /api/orders/R1234567.json ...
  26. 柔軟性のリスク • コンテンツ – コンテンツはヘルパー機能だらけ • カスタム機能 (Spree) – class_eval

    と alias_method_chain だらけ – 注文フローの callbacks が複雑すぎる • 機能を外部サービスに任せたい
  27. 解決へ

  28. None
  29. None
  30. 一つのことを、うまくやれ

  31. None
  32. None
  33. CMS のない e コマース • カートフローなどをクライアント (js) に • コンテンツを静的な形

    (jekyll など)に • 必要に応じて microservices を使う CHECK ORDER PAYMENT GATEWAY FRONT CART.JS /purchase GET mystore.com HTML + cart.js
  34. If I were to do it again... • “Distributed e-Commerce”

    – カートを javascript に任せて、注文状態を保存しない – サイトを静的な形や外部サービスに任せる – 注文ではなく決済を中心に – 出荷も外部サービスに任せる cart.js pay ship check AJAX API WEB HOOK
  35. Times up!