SODA Engineering Blog
😇

開発途中の機能を公開してしまって落ち込んだ話

2023/12/23に公開

\スニダンを開発しているSODA inc.の Advent Calendar 23日目の記事です!!!/

こんにちは!SODAでFlutterエンジニアをしている今城です。
今回は開発途中の機能を公開してしまって落ち込んだ話を書きます。

背景

半年前、今の会社に入社し、検索機能の開発に長く取り組んできました。

検索機能のスクショ

検索機能は最新のアプリで誰でも使えるので、ぜひからインストールして使ってみてください。

https://play.google.com/store/apps/details?id=com.snkrdunk.android&pcampaignid=web_share

https://apps.apple.com/jp/app/スニーカーダンク-スニーカー-トレカのフリマアプリ/id1455592069

検索機能は半年ほど開発していたのですが、こういった長い期間で開発する機能はFeature toggle(Release toggle)を採用し、mainへマージしつつもユーザーへは開発途中の機能が表示されないようにしています。

Feature toggleの細かい運用については先日のadrianさんの記事で書かれているのでぜひ読んでみてください。
https://zenn.dev/team_soda/articles/4a76565f7e96f0

Feature toggleの参照先はFirebaseのRemote Configを使っていてます。Remote configを使うメリットはボタンひとつで全てのユーザーに機能を公開することができます。

リリース

検索機能自体はずっと存在していましたが、WebViewだったこともありFlutterでの実装は社内でも期待されていました。
そして、先日、満を持して全てのユーザーにようやく検索機能を届けることができました。

Remote configの設定。画像はサンプルです。

お問い合わせ

リリースから2日たったころだったか、CS経由のお問い合わせで未公開の機能が混入しているとの連絡をいただきました。
そんなまさか…と思いつつ自分の端末で確認したところ、特に異常はありませんでした。

しかし、お客様からいただいたスクショを見たところ確かに未公開の機能が表示されていました。
そこでハッと原因に気づき、血の気がサーッと引いていくのがわかりました。

原因

このようなことが起こった原因はRemote configの設定を間違っていたからでした。
というのも、検索機能のQAを全て終え、完璧な状態でリリースしたバージョンは3.4.0でした。
もうこの時点でお気づきかと思いますが、問題は3.4.0未満のユーザーに開発途中の機能が表示さされていたことです。

不幸中の幸いと復旧

開発途中の機能が表示されてしまうユーザーは全体の数%だったことと、Remote config上の設定を変えれば良いだけなので、発覚から20分ほどで復旧できたのは不幸中の幸いだったと思います。

どうすればよかったのか?

当たり前ですが、Remote configの設定で3.4.0以上のユーザーを指定するべきでした。

Remote configの設定。画像はサンプルです。

発生した原因はこれに限りますが、ミスの流出を防ぐことはできなかったのでしょうか?
もちろんリリース後はストアのアプリで実機確認をしますが、常に最新のバージョンでしか試していないので今回の事故を検知することができていませんでした。

今後の対策

もちろんポストモーテム案件だったため、今後の対策をチームとして考えました。
余談ですが、ポストモーテムの前提として「人ではなくシステムを責めましょう」というのがあり、いい会社だなと思っています。

今回のリリースにあたって、ダブルチェックはしていましたが、「操作ミス」は気付けてもそもそもその操作が正しいのかには気付けません。
Feature toggleを使って開発した機能のリリースは今後もあるのでこのような対策をしました

  • 「Feature toggleで開発していた機能のリリース手順」のRunbookを作成する
  • 本番の変更はダブルチェックをした上で、変更内容をSlackでメンションをつけて共有する(なるべく多くの人の目に触れる)
  • Feature toggleで開発した機能をリリースしたら、その機能を”使えない”バージョンで簡単なQAを行う

どれかひとつでも対策としては十分だとは思いますが、多くのユーザーに影響を起こす可能性があるのでやりすぎはないと思いますし、メンバーが増えた時のためにも仕組み化は重要になってきます。

今までやっていた対策

実はFeature toggle周りのバグは事件発生前から気をつけてはいて、一番恐れていたのは開発途中にFeature toggleを使うのを忘れてリリースしてしまうことでした。
その対策としては、ストアへの審査の前に本番用のビルドで一通りチェックするというアナログ的な方法を行っていました。

ただ、毎度どんな機能を追加したかを完全に覚えておくことは不可能で、チェックのしやすさのために審査に含まれるPull request一覧をチェック項目形式で表示しています。

このPull request一覧は git-pr-release というのを使って作成しています。
自分のPRが識別しやすいように整理し、ラベルが分かるようにカスタマイズしています。

https://github.com/x-motemen/git-pr-release

おわりに

事故発生前から、Feature toggle周りのバグは気をつけていたため、今回はちょっと落ち込んでしまいました。
とはいえ、アニメーションなどこだわって作った検索を多くのユーザーに届けることができたのはよかったです。
今後はこのようなことが起こらないように、仕組みを作りまくっていきたいなと思います。

SODA Engineering Blog
SODA Engineering Blog

Discussion