技術的課題解決により商品点数、店舗数が国内トップのECサイトに
1999年にECサイトとしてスタートしたYahoo!ショッピングだが、2010年から2011年にかけて成長率が鈍化し、2012年にはついに前年割れとなってしまった。右肩上がりのECコマース市場を考えると、サービスそのものの存続が危ぶまれるほどの異常事態であった。そこで、Yahoo!ショッピングは2013年に「eコマース革命」を発表し、それまで出店者に義務付けられていた毎月の出店料と売上ロイヤルティを無料化。ビジネスモデルの変革により、2016年には商品点数を約3倍の約2億5000万点、店舗数を約16倍の48万店舗と日本一になるまで伸ばし、成長率も大きく回復した。その背後には、さまざまな課題の解決に取り組んできたエンジニアの努力があった。
まず、システムの巨大化という問題があった。それまではモノリシックな大規模システムを少人数で運用していたが、エンジニアが増えるにつれて開発効率の低下、ソースコードのデグレードなどのトラブルが日常的に発生するようになった。原因はプラットフォームとフロンドエンドが同じコードベース上で動作していたことだ。そこで、プラットフォームとフロンドエンドを完全に分離。さらに課金、商品管理など機能別にコンポーネントに分割してシンプルなインターフェイスを持たせ、コンポーネント単位で独立して開発できるようにすることで開発効率の向上を実現した。現在では当たり前の手法だが、10年以上もYahoo!ショッピングの屋台骨であった巨大システムを根本から変えるのはエンジニアにとって大きなチャレンジだった。
二重価格問題という課題もあった。例えば通常価格が2,000円で、セール時に50%引きで1,000円にする場合は問題ないが、通常価格を3,000円に変えてセール価格を1,500円にし、不当なお得感を演出するというやり方だ。これではユーザーの買い物体験を損ねてしまう。そこで、全商品について価格の変更履歴を一定期間分保存し、商品価格の表示時に自動でチェックを行った。チェックの結果が適切な場合はセール価格、そうでない場合は通常価格と表示するようにシステムを変更。すると不適切なセール価格の商品が0になり、ユーザーへの不当なお得感の提示をなくすことができた。
さらにもう1つの例として、新規ユーザーの購入率が低い課題が挙げられた。eコマース革命後、新規ユーザーのアクセスが増えていくのに従って、既存のユーザーと比べ商品を購入する割合がとても低いことが顕著になった。過去に商品を購入していれば注文履歴から商品をレコメンドできるが、注文履歴のない新規ユーザーには適用できない。そこで、新規ユーザーが検索したキーワードと同じもので検索した既存ユーザーをマッチングさせ、既存ユーザーの注文履歴をもとにレコメンドする方法を適用。これにより新規ユーザーにも精度の高いレコメンドが可能になり、新規ユーザーの購入率を3~4倍に伸ばすことができた。
完璧なシステムを目指すのではなく、技術的に工夫し、仕組みを改善することが大事
eコマース革命後、最大の試練となったのが「いい買物の日」だ。中国の大手ECサイトが実施している「独身の日」を参考に、開催日の11月11日を1年で一番買い物が行われる日にしようという販促イベントである。そしてそれは、サーバーの負荷がこれまで経験したことがないレベルにまで達することを意味していた。売上目標をベースにシステムが耐えられる負荷を見積もったが、いつ負荷がピークを迎えるか、どこがボトルネックとなり得るかまったく予想できなかった。
サーバーを増やし、24時間態勢でシフトを組んで迎えた2015年11月11日。売り上げは朝から順調に伸び、予想を大きく上回る形で推移していった。残り数時間になると、ユーザーによる駆け込み注文が大量に発生し、ピークが到来。その負荷に耐えられず決済システムであるYahoo!ウォレットがダウン。その後は売り上げの伸びが足踏みしたが、最終的には目標を大きく上回ってYahoo!ショッピング史上最大の売り上げを達成した。しかし、エンジニアとしてはトラブルが発生したことで非常に悔いの残る結果となったのである。
二度と同じ過ちを繰り返さないため「独身の日」を何度も経験している中国のアリババに、負荷が一時的に集中しないよう平準化する方法について助言を求めた。しかし、返ってきた答えは「平準化する必要はない」だった。「システムの都合よりもユーザーの買い物体験を充実することを最優先すべき」との言葉に目の覚める思いで、2回目に向けて「トラブルが起きてもユーザーへの影響を最小限に抑える」というコンセプトを決定した。事前にどんな対策を行ってもトラブルは起こり得る。ならば、トラブルの発生時にそれが波及して多数のユーザーに悪影響を及ぼさないようにするということだ。
コンセプトに従い、まずはカード後決済というを仕組みを作成。決済システムにトラブルが発生したときは通常の注文フローを変更し、注文完了画面を先に表示して決済を後から実行するように改善した。さらにサーキットブレーカーを導入。フロントページから商品プラットフォームへのリクエストが増大したときに、優先順位の低いフロントページからのリクエストを遮断して負荷を軽減し、商品プラットフォームを守る仕組みである。
そして2016年11月11日、2回目の「いい買物の日」がやってきた。売り上げは前年を少し上回りながら推移し、前年トラブルを起こした時間帯をやり過ごした後、残り数時間のタイミングでピークが到来した。売り上げはさらに伸び、決済システムが限界に近づいた時にカード後決済を発動。最大のピークを乗り切って、注文を取りこぼすことなく、目指していた形で売り上げを達成できたのである。Yahoo!ショッピングが2回の「いい買物の日」から学んだのは、絶対に落ちない完璧なシステムを作ることは難しいということ。そして、仕組みを工夫すればユーザーの買い物体験を良くすることができるということ。課題はたくさんある。その解決に頭を使うのがエンジニアの腕の見せどころだ。
「eコマース革命は、Yahoo!ショッピングのシステムにとっても革命だった」と、吉野氏は振り返る。やみくもにシステムに投資するのではなく、技術的に工夫し、仕組みを改善して技術的に課題を解決することで、エンジニアが活躍する場が得られる。吉野氏は「Yahoo!ショッピングもまだ発展途上だ。検索精度の向上、在庫なしによるキャンセル問題、マルチビッグデータの活用、PaaS化への挑戦など、これからもさまざまな課題に挑戦していく」と述べ、セッションを終了した。
お問い合わせ
ヤフー株式会社