Slide 1

Slide 1 text

Too Big To Fail Succeed Scaling e-Commerce on Rails Chris Salzberg クリス・サルツバーグ

Slide 2

Slide 2 text

自己紹介  カナダ人(モントリオール出身)  github など: @shioyama  Globalize のオーサーの一人  Spree の contributor  (Arch) Linux が大好き

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

パートナー

Slide 6

Slide 6 text

e コマース @ ● ストアがいっぱい (50+) ● 通貨がいっぱい (JPY, EUR, USD, TWD...) ● 複数の言語 ( 日本語 , 英語 , フランス語 ...) ● コンビニ、銀行振込、予約販売など ● ライセンスキー、 DRM

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

導入時( 2011 )の条件 1) 様々なストアを統一した形で運用できる – 多言語、多通貨 2) 開発者以外でもコンテンツが作成できる 3) ストアごとの独自機能も追加(開発)できる

Slide 12

Slide 12 text

条件によるシステムの構成 ● フロント – Spree + Spree extensions – Comfortable Mexican Sofa (CMS) – (Nginx per-site configuration) ● バック – 独自の注文・商品管理システム (Spree Admin なし) – CMS Admin

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

/c/cart /a/category /contact-us Spree Application CMS steam.degica.com/...

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

カスタム機能 ● ライセンスキー( spree_license_key ) ● 予約販売( spree_pre_order ) ● 出荷サービス( spree_shipping_service ) ● コンビニ手数料( spree_payment_method_fee ) ● DRM の有効化 ● 外部 API との連動など

Slide 21

Slide 21 text

柔軟性のあるシステム ● ストア設定 – コンテンツ+レイアウト – 支払方法、配送方法 – Spree Preferences ● メールのデザインと見た目も変更できる ● ニーズに応じてカスタム機能も追加

Slide 22

Slide 22 text

… でも

Slide 23

Slide 23 text

課題

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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 ...

Slide 26

Slide 26 text

柔軟性のリスク ● コンテンツ – コンテンツはヘルパー機能だらけ ● カスタム機能 (Spree) – class_eval と alias_method_chain だらけ – 注文フローの callbacks が複雑すぎる ● 機能を外部サービスに任せたい

Slide 27

Slide 27 text

解決へ

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

一つのことを、うまくやれ

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

CMS のない e コマース ● カートフローなどをクライアント (js) に ● コンテンツを静的な形 (jekyll など)に ● 必要に応じて microservices を使う CHECK ORDER PAYMENT GATEWAY FRONT CART.JS /purchase GET mystore.com HTML + cart.js

Slide 34

Slide 34 text

If I were to do it again... ● “Distributed e-Commerce” – カートを javascript に任せて、注文状態を保存しない – サイトを静的な形や外部サービスに任せる – 注文ではなく決済を中心に – 出荷も外部サービスに任せる cart.js pay ship check AJAX API WEB HOOK

Slide 35

Slide 35 text

Times up!