見出し画像

1年がかりの横断プロジェクト「予約システムとひとつになったPOSレジ」。その難しさと楽しみを紐解く

先日リリースされた「予約システムとひとつになったPOSレジ」。その開発の舞台裏には、どんな壁があり、開発にあたったメンバーはそれをどう乗り越えたのでしょうか。それぞれのプロダクトの共通基盤を作るところから、それらを連携させていくまで。長い開発期間を振り返りながら、それぞれの視点の「難しさ」と「楽しみ」についてお話いただきました。

PROFILE(写真左から)
西尾 祐紀さん・・・テクノロジー部門/開発A本部/リテールGTMグループ/リテールGTM Bチーム

2022年8月にSTORESに入社。入社後は主にSTORES ネットショップ 、STORES レジの開発を担当している。休日はランニングやサウナで過ごしている。Xのアカウントは @nissy3252

池田 裕介さん・・・テクノロジー部門/開発B本部/プロダクト基盤グループ マネジャー

2021年7月に STORES に入社し、 STORES アカウントの開発など、入社以来 STORES プロダクトの基盤開発を一貫して担当。最近のマイブームは味スタでヴェルディのチャントを歌うこと。 X アカウントは @yusuiked

佐々木誠さん・・・テクノロジー部門/開発A本部/サービスGTMグループ/サービスGTM Bチーム
2018年に STORES ネットショップ の開発に携わり、2021年から STORES 予約の開発を担当。トラックポイント付きのキーボードから離れられない。Xのアカウントは @waniji

1年がかりの大プロジェクト。
「予約システムとひとつになったPOSレジ」の開発と役割

──本日は、「予約システムとひとつになったPOSレジ」の開発をリードしたみなさまにお集まりいただきました。まず、このプロジェクトがどんなものだったのか教えてください。

池田:もともと STORES レジ は、 STORES ネットショップ と連携しており、共通の事業者情報を使って店舗運営ができるプロダクトでした。今回の開発は、さらに STORES 予約 も連携させるというものです。これができると、予約して来店した顧客の情報を会計時に参照したり、ネットショップでの購買履歴からおすすめを行ったりすることができます。例えば物販をしているヘアサロンや、スポーツジムなどのユースケースを想定されます。

開発としては、 STORES レジ と STORES ネットショップ 事業者情報や店舗情報を、 STORES 予約 とも共通のものにすることから始まります。そのためには共通の事業者情報や店舗情報を中心的に集めて権限をつけて提供する必要があります。このプロジェクトは、それを整備することから始まり、その後各プロダクトを連携させる形で進行しました。

──かなり複雑かつ、長期にわたるプロジェクトだったと聞いています。

佐:足周りを整えるところから始まったので、ゴールが遠いプロジェクトでしたね。そのため、フェーズを細かく区切って第一段階、第二段階というように進めていました。

西:プロジェクト全体では丸々1年がかりで、関わる人数も多かったです。最終的には30名ほどのエンジニアが関わったのではないでしょうか。

──かなり大型のプロジェクトだったのですね。その中でも、池田さん、佐々木さん、西尾さんはそれぞれどのような役割を担ったのでしょうか。

池:私は先ほどお話した、各プロダクトが参照する事業者情報や店舗情報を集中して保持するための基盤となる仕組みをゼロからつくるプロジェクトを行なっていました。社内では「maja(マヤ)」(※)と呼ばれるプロジェクトです。また、これまで各プロダクトごとに開発が行われていたため、チーム間のやりとりや、プロダクトを連携させるための情報整備も必要でしたので、それらにもアプローチしました。

佐:私は STORES 予約 側の対応を行いました。「maja」を連携したり、すでにあった STORES のプロダクトで共通で支えるID基盤と STORES 予約 を連携させるための下周りの開発を行い、それが完了した後は STORES レジ と STORES 予約 の連携を順々に行なっていきました。

西:私の役割は「maja」を STORES ネットショップ 、STORES レジ に連携することでした。私は去年の4月頃のプロジェクト序盤から参画しており、初めは「maja」の STORES ネットショップ、STORES レジの新規アカウントへの導入を担当しました。その後は 「maja」を用いた権限管理を  STORES ネットショップ、STORES レジに導入する部分を担当しました。

※本記事内では、共通化された事業者情報・店舗情報プロジェクトおよびその成果物を「maja」と呼んでいます。

──池田さんがそれぞれのプロダクトに参照される情報基盤づくりを、佐々木さんと西尾さんは STORES 予約 、 STORES ネットショップ 側からそれを連携する開発を行なったのですね。

異なるプロダクトを連携するのに立ちはだかった壁

──さきほどのお話からもかなり難易度が高く、かつ大型のプロジェクトであったことが伺えますが、最もチャレンジングだったことは何でしょうか。

池:担当していた部分が異なるので、それぞれお話ししますね。まず、情報の基盤を作っていた私の立場では、それぞれのプロダクトからデータを参照される側として各プロダクトで叶えたい要望の「最大公約数」を探すのに最も苦労しました。みんなが作りたいものを、コストをコンパクトにして作る見極めが難しかったです。その着地点を探るためには各プロダクトとの対話が不可欠ですが、私が所属する基盤を扱うチームはこれまでそういった動きをしてこなかったので、負荷も高くチャレンジングだったと振り返って思っています。

佐:はじめはそれぞれのプロダクトで別々に開発を進めていたんですよね。するとプロダクト間の情報共有が難しく、開発としてはよろしくない雰囲気になってきてしまって。

西:途中から、「みんなで『maja』を作っていこう」とメンバーが一丸となり、2週間に一度のスクラムイベントでオフラインで集まるようになりました。そこで、プロダクトの境目なく「maja」の仕様について議論するようになり、 そこから少しずつ問題が解決し始めましたね。

──佐々木さんはいかがですか。

佐:私が大変だったことはふたつあります。ひとつめは、それぞれのプロダクトで名前や呼称の統一がされおらず、連携するにあたって概念や言葉を定義する必要があったことです。「店舗」「お客様」「在庫」「事業者」など、使っている言葉は同じでもそれが指す範囲や定義がプロダクトによって微妙に異なりそのすり合わせに苦労しました。ふたつめは、事業者が STORES 予約 でアカウントを作った時期によって、それらがID基盤や「maja」と連携しているかどうかが異なること。状態の異なるさまざまなアカウントが存在するけれど、事業者様のアカウントなので強制移行はできず、共存するしかない。その上で設計したり実装したりするのがとても大変でした。私が担当した STORES 予約では、コードの命名を工夫し特定の連携状態のアカウントにしか使わない処理を明確にしたり、アカウントの連携状態を意識せず透過的に扱えるように実装しました。

池:今さらっと「透過的に」と仰ったけれど、それが本当に難しいんですよね。「透過的」というのは、違いを意識しないで扱えるようにすることなのですが、そのためにはアカウントの世代ごとに処理の仕方を分けたり、その分けたものを以前と変わらずに間違えがないように扱えるようにすることなどが必要で、非常に高い技術力が必要です。すごいなと思いました。名前や呼称の定義については、最初はSlackに書き留めていたのですがどんどん流れてしまうんですよね。プロジェクトの後半ではGitHubにリポジトリを作ってそこに情報を集約するようになりました。これにより認識が擦りあっていったのを覚えています。

──西尾さんが難しさを感じた点はいかがでしょう。

西: STORES ネットショップは、数年前にOMO(※)に舵を切りましたが、「maja」ではネットショップとオフラインの店舗は別のものとして扱われます。 「maja」導入前の去年の9月頃にSTORES ネットショップ とSTORES レジの管理画面が分離されたりと、STORES ネットショップ とオフラインの店舗の関係は再度整理されつつある状況でした。ただ、管理画面が分離されたとはいえ、裏側の処理自体は分離されていない部分が多いのも実態としてありました。そのため、今回の事業者情報の基盤と、STORES予約に対して、これまで STORES ネットショップ STORES レジが想定していた画面遷移や設計と矛盾しないように設計するのが難しかったですね。例えば、 STORES  ネットショップ はログイン単位がひとつの事業者であるのに対して、STORES 予約 ではログイン単位がひとつの店舗など、細かい違いがたくさんあります。それを使う人にとって違和感のないようにまとめるのが最大の難所でした。

佐:これは大変ですよね。「maja」ができてからは「従業員」が登録できるようになりましたし。機能追加もあったので、それを考えつつ実装するのは大変だったのだろうと感じます。

西:私は社歴が長くないので、 STORES ネットショップ の他のチームとのコミュニケーションの取りやすさにだいぶ救われました。時にはPdMの方や他のチームの方に相談しながら進められたことでなんとか乗り越えることができました。

「終わってみたらじんわりとやってくる楽しさ」、「担当外の領域に手を伸ばすやりがい」、「ちゃんと動いた時の感動」

──あらためて、このプロジェクトを振り返ってみていかがですか。やりがいを感じた場面はどんな瞬間だったのでしょうか。

池:自分たちが作っているシステムとは別の概念ややり方のチームとどう擦り合わせていくかや、お互いに影響を与え合える時にたくさんの発見がありました。「そういうことやっているんだ!」という驚きが、まさに「Fun」だったのではないかと思います。また、横断でプロジェクトをやっていると、普段関わらない方達とも仕事ができて、気軽に話せるようになったのもよかったです。プロジェクトをやっている時はしんどかったけれど、終わってみたらじんわりとやってくる楽しさは、高い山に登った時のようです。

佐:私は、横断プロジェクトでは担当外の領域やシステムにどんどん手を伸ばせること、そしてそういう人が重宝されることが楽しかったです。プロダクトとプロダクトの間にある、誰が拾うか決まっていないタスクを率先して拾うのにやりがいを感じました。また、考えることや課題がどんどん出てくるのも楽しかったですね。複雑な問題を解くのが好きな人には楽しい開発だったのではないかと思います。

西:お二人の楽しさを感じるポイント、とても共感できます。私は、これまでの業務ではあまり関わることのなかった方と関われたのが楽しかったです。特にこのプロジェクトには優秀な方がたくさんいらして、その方々と話すことでエンジニアとしての視座が上がったなと感じます。そして何よりも、初めてそれぞれのプロダクトが連携して動いている時の感動はひとしおでした。オフィスで池田さんと一緒に「わあ、ちゃんと動いてる!」と声をあげたのを覚えています。

池:あの時は嬉しかったですよね。よく覚えていますよ。

──最後に、これから目指すことやチャレンジについて教えてください。

池:今回の「予約システムとひとつになったPOSレジ」を作るためにできた「maja」は、今後の STORES の事業にとって中核をなす仕組みになるはず。これからは、これをいかに使いやすくして、STORES の他のプロダクトも連携できるようにするかに注力していきたいと思います。マネジャーとして強いチームを作り、その価値を上げていくつもりです。

佐:このプロジェクトでわかったのは、一人でできることはとても少ないということです。チーム一丸となって横断開発を成し遂げた経験をもとに、これからはもっとチームとして強くなっていきたいです。ひとりだけ知識を蓄えるのではなく、チームとしてのアウトプットを意識していくつもりです。

西:私がこれから取り組みたいのは、 STORES ネットショップ の改善です。歴史の長いプロダクトなので、技術的負債が溜まっていると感じているからです。それらを改善すれば、さらに生産性が上がるはず。負債解消を踏まえたプロダクト開発がこれから目指すことです。

──「予約システムとひとつになったPOSレジ」の壮大な開発の舞台裏を感じることができました。これからたくさんの事業者様が使ってくださるのが楽しみですね。本日はありがとうございました!

デザイン:石橋 講平
写真・文:出川 光

西尾さんのお気に入り:ベストサウナハット
サウナハットを探していた時にオフラインでお店に行って購入しました。
しっかり頭が保護されている感覚があり、サウナには必須のアイテムになっています。

池田さんのお気に入り:MOKA CHOCOLATE & Factory
自宅の近所にあるチョコレートの工場直売店さんで地下に工場があります。 STORES ネットショップと STORES 決済を使ってくれているのを見てとても嬉しかったです。チョコレートも美味しいですし、イートインで食べれるアイスクリームがとても美味しくて頻繁に通ってます。

佐々木さんのお気に入り:BASKING COFFEE hiroshima
エルサルバドルのコーヒー豆が好きで、オンラインショップで見つけて購入しました。ホットでもアイスでも美味しく、毎朝の楽しみになっています。

\ STORES では一緒にはたらく仲間を募集中です!/

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!

この記事が気に入ったらサポートをしてみませんか?