Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
誤配送の原因を作ったのは私です
Search
虎の穴ラボ株式会社
August 18, 2022
Technology
1
120
誤配送の原因を作ったのは私です
エンジニアの失敗学 LT会 - vol.2のLT資料になります
虎の穴ラボ株式会社
August 18, 2022
Tweet
Share
More Decks by 虎の穴ラボ株式会社
See All by 虎の穴ラボ株式会社
Tailwind CSSとAtomic Designで実現する効率的な Web 開発の事例
toranoana
1
480
Denoについて、同人誌記事を出しました+update
toranoana
0
150
【虎の穴ラボ Tech Talk #2】プロンプトエンジニアリング
toranoana
0
87
20241121_[TechTalk#2]虎の穴ラボでのLLMについて取り組み紹介
toranoana
0
82
社内チャットへRAG導入した話(Tech Talk #2)
toranoana
0
150
Deno Deploy で Web Cache API を 使えるようになったので試した知見
toranoana
1
510
【虎の穴ラボ Tech Talk】虎の穴ラボTech Talk説明資料
toranoana
0
350
虎の穴ラボ Tech Talk_CDKでFargate環境構築
toranoana
1
370
虎の穴ラボスキルアップ支援制度の利用例
toranoana
0
6.4k
Other Decks in Technology
See All in Technology
Кто отправит outbox? Валентин Удальцов, автор канала Пых
lamodatech
0
320
2025/6/21 日本学術会議公開シンポジウム発表資料
keisuke198619
2
490
Liquid Glass革新とSwiftUI/UIKit進化
fumiyasac0921
0
160
OpenHands🤲にContributeしてみた
kotauchisunsun
1
380
20250625 Snowflake Summit 2025活用事例 レポート / Nowcast Snowflake Summit 2025 Case Study Report
kkuv
1
280
LinkX_GitHubを基点にした_AI時代のプロジェクトマネジメント.pdf
iotcomjpadmin
0
170
ローカルLLMでファインチューニング
knishioka
0
140
Amazon ECS & AWS Fargate 運用アーキテクチャ2025 / Amazon ECS and AWS Fargate Ops Architecture 2025
iselegant
16
5.2k
OAuth/OpenID Connectで実現するMCPのセキュアなアクセス管理
kuralab
5
960
UIテスト自動化サポート- Testbed for XCUIAutomation practice
notoroid
0
120
Абьюзим random_bytes(). Фёдор Кулаков, разработчик Lamoda Tech
lamodatech
0
310
Oracle Audit Vault and Database Firewall 20 概要
oracle4engineer
PRO
3
1.7k
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
41
7.3k
Become a Pro
speakerdeck
PRO
28
5.4k
A better future with KSS
kneath
239
17k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
4
200
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
We Have a Design System, Now What?
morganepeng
53
7.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Visualization
eitanlees
146
16k
Transcript
誤配送の原因を作ったのは私です 2022年8月17日 エンジニアの失敗学 LT会 - vol.2 浜田 拓実 1
自己紹介 現在の職業 とらのあなエンジニア 2022年6月から勤務 2 趣味 VRゲーム開発 バイクツーリング
ご注意 今回紹介するやらかしは 「前職での」 やらかしになります。 3
目次 4 ・システム概要紹介 ・失敗した内容と案件の紹介 ・発生した障害内容 ・対策 ・まとめ
システム概要紹介
前職で関わっていたシステム ・趣味の用品を扱うECサイトの運用、開発 ・年商100億円規模 ・一般会員、業者会員の大きく2種類の会員種別 ・会員種別で利用できる機能が異なるが サイト自体は一つのプロジェクトで管理 →業者会員のみ「掛売」といった機能を利用可能 →if(業者会員)で利用できる機能を分離 6
失敗した内容と案件の紹介
失敗の内容 大量の誤配送が発生!その原因を作ったのは 8 私です
失敗の背景 業者会員向けに大掛かりな機能改修を実施 ・出荷のタイミングをお客様が選択できるようにする。 ・更に、明細単位で自由に出荷タイミングを選択できるようにする 9 今までは「注文単位で商品が揃ったら出荷」で動いていたが・・・ その概念が崩れる
失敗の背景 - 今まで 10 注文 明細1 明細2 明細3 明細4 出荷
失敗の背景 - 新機能 11 注文 明細1 明細2 明細3 明細4 明細2
指示を待って出荷 明細3 送料無料金額で出荷 明細4 キャンセル 明細2 指定曜日に出荷 明細3 要件: お客様が望むがまま 自由自在に出荷の単位を 変更することができるように!
失敗の背景 - 今まで 12 ご注文内容 お届け先住所 ・〇〇〇〇〇〇〇 お客様情報 ・〇〇〇〇〇〇〇 お支払い情報
・カード xxxx-xxxx-xxxx-xxxx ご注文明細 ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 決済確定 掛売を利用している会員 →お届け先住所変更不可 それ以外 →お届け先住所変更可能
失敗の背景 - 新機能 13 ご注文内容 お届け先住所 ・xxxxxxxx お客様情報 ・〇〇〇〇〇〇〇 お支払い情報
・カード xxxx-xxxx-xxxx-xxxx ご注文明細 ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 決済確定 掛売を利用している または 新機能を利用している会員 →お届け先住所変更不可 それ以外 →お届け先住所変更可能
失敗の背景 エンジニア: 4名 開発期間: 約4ヶ月(要件定義〜リリースまで) 結合テストパターン:約400〜500 14 なんとかリリース
失敗の背景 もともと規模の大きいプロジェクトだったため、 運用部門含め、テストはしっかりやっていた 15 リリース当日は すべての機能が正常に機能
発生した障害内容
発生した障害内容 - 大量の問い合わせ 「指定した住所に届かない」という問い合わせ多数 17 決済画面で登録したお届け先住所が 注文データに反映されていなかった 一般会員限定で・・・
18 ご注文内容 お届け先住所 ・〇〇〇〇〇〇〇 お客様情報 ・〇〇〇〇〇〇〇 お支払い情報 ・カード xxxx-xxxx-xxxx-xxxx ご注文明細
・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 決済確定 変更したのに 反映されない
発生した障害内容 今回の機能を利用した場合、お届け先住所の 指定は不可 という要件を組み込む 19 if文に条件追加するだけだよね・・・ と思っていた ご注文内容 お届け先住所 ・xxxxxxxx お客様情報
・〇〇〇〇〇〇〇 お支払い情報 ・カード xxxx-xxxx-xxxx-xxx x ご注文明細 ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ・xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 決済確定 新機能を利用する場合、変更不可
発生した障害内容 - 既存のプログラム if(!掛売){ お届け先住所 = 決済画面の住所 } else {
お届け先住所 = 会員登録時の住所 } 20
発生した障害内容 - 新仕様 if(!掛売 && 業者会員 && !新機能利用){ お届け先住所 =
決済画面の住所 } else { お届け先住所 = 会員登録時の住所 } 21
失敗の背景 - 仕様の比較 22 決済方法 新機能利用 通常 掛売 利用 未利用
業者会員 変更可能 変更不可 変更不可 変更可能 一般会員 変更可能 - - - お届け先の指定 - 新機能の仕様
失敗の背景 - 仕様の比較 23 決済方法 新機能利用 通常 掛売 利用 未利用
業者会員 変更可能 変更不可 変更不可 変更可能 一般会員 変更不可 - - - お届け先の指定 - 条件ミス
発生した障害内容 - 結果 一般会員について、お届け先住所の指定が不可に! 24 ・注文データを作るときの動き →会員登録時の住所で上書きされてしまった →決済画面の入力情報は保存してない お客様が入力した情報の復旧が困難
発生した障害内容 - 行った対応 25 ・早急なバグ修正 & リリース ・出荷済みのお客様に謝罪メール ・配送業者と連携し、配送をストップ ・MySQLのバイナリログを解析し
入力された住所をサルベージ ・未出荷データのお届け先修正
発生した障害内容 - 今回の敗因 if文の条件を1行変えるだけという油断から 丁寧なテストを行わなかった 26
対策
対策 以下2点の対策を実施 ・決済画面の入力内容を保存するテーブルを追加 ・Seleniumを利用した自動テストを導入 28
対策1:入力内容を保存するように 29 決済画面 ・xxxxxxxx ・xxxxxxxx ・xxxxxxxx 注文データ データ加工 入力データ 決済画面の入力内容を
そのまま保存
対策1の効果 ・データ復旧が容易に行えるようになった →決済画面の入力内容をそのまま保存 データ不正があれば、入力内容から復旧 30
対策2:ブラウザ自動テストの導入 31 ・一般会員 全決済、全入力項目の自動テスト ・業者会員 全決済、全入力項目の自動テスト
対策2:ブラウザ自動テストの導入 32 + + Chrome Driver ・ECサイトがChromeの利用を推奨していたため Chrome Driverを選択 ・Pythonは勉強のため選択
(ツール類は開発言語を自由に選択できた)
対策2:ブラウザ自動テストの導入 33 ①テストユーザーで ログイン ②商品画面で カートに投入 ③決済画面で 項目を入力し、決済 上記の一連の操作をSeleniumで自動化 決済パターン分繰り返すことで、
全ての決済方法が正常に動作することを確認
対策2:ブラウザ自動テストの導入 34 名前:xxxx xxxx お届け先:xxx-xxxx xxxx xxxx 合計金額:xxxx円 ポイント利用:xxx pt
決済方法:xxxxxxxx その他:xxxxxxxx 入力データ 名前:xxxx xxxx お届け先:xxx-xxxx xxxx xxxx 合計金額:xxxx円 ポイント利用:xxx pt 決済方法:xxxxxxxx その他:xxxxxxxx 注文データ 決済後、入力データ、注文データの突き合わせを実施 決済画面で入力した内容で、注文データが生成されたことを確認
対策2の効果 ・決済画面の全パターンの動作確認を自動化 →全パターンでテストを行うため、 決済機能の破損に気付けるようになった →対策1で追加した入力データ保存のテーブルを チェックし、入力内容の正当性チェックも自動化 35
まとめ
まとめ ・小さい改修でも必ずテストを →蔑ろにした結果、大きな障害につながった ・テストの自動化を検討する →サービスが大きくなると、 人力ですべてのパターンをチェックするのは難しい 37
まとめ 今回の失敗で得られたこと →自動テストの導入を行うことができた。 38 今後も失敗を糧にして より良い仕組みを導入していきたい!