こんにちは、タイムリープ広報の中薗です!
私たちタイムリープは、2019年の創業以来RURAという遠隔接客サービスを開発・提供しています。
単純に「リモートで接客をする」だけでなく、店舗オペレーションを効率化・最適化することで、これまでホテルやフィットネスジムなど様々なサービス業の人手不足解消や接客の質向上などを実現してきました。
今回は、そんなRURAというプロダクトはどんな技術的特徴を持っているのか?難しいところは?どんな体制や環境で開発されているのか?などを、開発グループ グループ長の松永貴照さんにインタビューいたしました。
少しでも興味を持っていただけますと幸いです!
まずは、松永さんのご経歴について教えてください
新卒でSESの会社に就職して、エンジニアとしてのキャリアをスタートしました。
もう少しエンジニアとして経験の幅を広げたいと考え、SIerへ転職。バックエンド開発を中心に、案件によってはフロントエンドにも携わるなど、フルスタックに近い業務を経験した後、自社サービスを持つ会社へ転職して、toB・toCのサービス開発に携わっていました。
実は2社目の会社で一緒に働いていたエンジニアが先にタイムリープに入っていて、その方から話を聞く中で自分がそれまで培ってきたスキルや経験をRURAの開発で活かせそうだと思ったことと、カルチャーもマッチしそうだと思えたことから、3年ほど前にタイムリープへジョインして今に至ります。
松永さんは、タイムリープではどんな役割を担っているのでしょうか?
開発グループのグループ長として、開発組織を率いるリーダーをさせていただいています。
メンバーとの1on1や目標管理やエンジニア採用といったマネージャーとしての仕事や、PMやデザイナーと一緒に新機能の仕様調整を行ったり、技術的な方針や設計の意思決定であったり開発プロセスの課題を見つけて改善を進めたり、といったこともやっています。
開発グループは「技術で事業の成長に貢献すること」が重要なミッションです。
私は「メンバーが安心できる環境づくりが、結果的に成果につながる」と考えているので、開発グループのリーダーとしてそういう環境を作り、安定的かつ生産性の高い組織を目指していくことが、私の役割です。
RURAについて
RURAとは、どんなプロダクトでしょうか?
シンプルに言うと、「遠隔地から少人数で複数の拠点に接客ができるプロダクト」ですね。
でもそれだけではなくて、RURAが解決しようとしている課題や実現できることはたくさんあります。
例えば、根本にあるのは「人手不足」という課題です。
RURAを活用して効率化・省人化することで人手不足を解消することができるし、少ない人数で多くの接客を実施できるので「接客機会の最大化」、つまり機会損失を減らしてより多くのお客様に対応できるとも言えます。
また、接客をセントラル化することで一人当たりの接客回数が増えて経験値が蓄積されていくため、サービスの質の向上も期待できて、結果的にクライアントの売り上げ向上にもつながる可能性があるプロダクトです。
技術的な面では、以下が特徴であり、工夫しているところかなと思います。
- リアルタイム性が求められるサービスである
- 多くの変数を有する、複雑性が高いプロダクトである
なるほど…。先ほどの技術的な部分について、もう少し詳しく教えてください!
【リアルタイム性が求められるサービス】
RURAは店頭でスタッフさんがお客様を接客するために使われるので、できる限り対面と変わらないリアルタイムなコミュニケーションが求められます。
それに応えるために、RURAではWebRTCという技術を活用しています。ブラウザ間でリアルタイムの音声・ビデオ通話やデータを直接通信するため、高速で低遅延であることや、サーバーを介さないためインフラコストが抑えられるといったメリットがあります。通常のwebアプリケーション開発ではあまり触れる機会がないかもしれないですね。
ネットワーク寄りの技術で、フロントエンドの画面上では見えているけれど内部的には低いレイヤーの知識が求められるので、深掘りしていくとエンジニアとしての幅も広がって面白いんじゃないかなと思います!
【多くの変数を有する、複雑性が高いプロダクトである】
RURAは大きく分けると「店舗画面(来店されたお客様が見る画面)」「接客画面(スタッフが接客する時にみる画面)」と「待機画面(スタッフが待機中にみる画面)」の3つなのですが、それぞれの画面に多くの機能が詰め込まれています。
一つの画面の中で複数の機能が同時に動き、さらに複数の店舗やログインしている複数のスタッフの状態などが刻一刻と変化し続けていく中で、その状態を同期し続けなければいけない。非常に複雑性の高いサービスです。
それを実現するために、店舗やスタッフといったクライアントの状態の変更を常に感知して、全クライアントに対して即座に連携する状態管理サーバーを構築しています。クライアントは状態管理サーバーから落ちてくるデータを受け取って他のクライアントの状態を更新する設計になっています。
また、追加開発や改善もし続けるわけなので、スケーラブルであることを意識してアーキテクチャを設計しています。
開発環境について
RURAはどのような技術スタックなのでしょう?
RURAの開発には、以下のような技術を用いています。
- プログラミング言語
- Go / TypeScript / Python
- フレームワーク・ライブラリ
- React.js / Next.js / gqlgen / gRPC-web
- クラウド環境・インフラ
- AWS
- データベース
- PostgreSQL / Amazon Aurora / Redis
社内で活用しているAIツールとしては、chatGPTとCursorがあります。
特にCursorは最近導入したのですが、コーディング作業やレビューの効率化に役立っています。
アーキテクチャ設計の際にはシンプルでメンテナンスしやすい構成を意識していて、開発スピードを上げながらも、将来的な拡張性や保守性を確保できるような設計を心掛けています。
開発体制は?
全体としてウォーターフォールの形を取りつつ、設計からテストまでの開発工程は、スクラムを取り入れたハイブリッドのフローになっています。
昔からずっとこの開発フローなわけではなく、改善を繰り返して現在はこのフローになっています。
プロダクトもそうですが、今が恒久的に完璧な状態、というのはあり得ないと思っているので、開発フローもその時その時の最適にしていけるように、常に改善を繰り返しています。
RURAを開発していく中で、難しいと思うのはどういったところですか?
一番難しいなと思うのは、先ほどお話しした複雑性にどう立ち向かっていくか、ということです。
このRURAの複雑さを何かに例えると、「空港の管制塔」が近いなあ、と思ったります。
航空管制官は、空港の滑走路の状況や、上空にいる飛行機の数、離着陸のタイミング、天候など、様々な要素を把握しながら安全に運用・運行しないといけないですよね。
RURAも、どこかに一つでもうまく動かない部分があると広い範囲に影響してしまうし、新しいオペレーションが加わってもスムーズに回せるようにしなければいけない。
「店舗とスタッフがn対nでリアルタイムにつながって接客ができる」というサービスである以上、その複雑性は排除できないので、いかに拡張性を高く保ちつつ、不要になったものを捨てやすい作りにするかというのが難しさであり、同時に面白さでもあると思います。
開発組織のカルチャーと目指す姿
開発グループって、どんなカルチャーなんでしょうか?
開発グループでは、グループのビジョンとバリューを作っています。
- ビジョン
- 心地よさと成果を両立し、共に挑み続けるチーム
- バリュー
- オーナーシップ:各メンバーが責任を持って役割を果たし、チームに貢献する
- 成果志向:成果を出すために個々が自律し、努力し続ける
- 心地よさ:メンバーが安心して働ける環境作りが、結果的に成果につながる
私たちエンジニアにとってのミッションは、「事業の成長に技術で貢献すること」です。
そのミッションを全うするためにしっかりと成果を出すことが重要ですが、同時に「心地よさ」というのも重要なポイントだと考えています。
私たちの言う「心地よさ」というのは、「心理的安全性」とも言えます。
お互いに安心して意見を出し合ったり、わからないことはわからないと言える環境というのは、スピード感を持って成果を出し続けるために不可欠だと思っています。
そういうチームにしていくために、メンバーみんなの共通認識としてビジョンとバリューを作りました。
これは開発グループに限らずタイムリープ全体の話ですが、誰かが困ってたらみんなお互いに助ける文化があるな、とよく思います。
開発メンバーはリモートワークをしていることも多いのですが、Gatherというバーチャルオフィスに集まって仕事をしているので、詰まったり困ったりしたときも声をかけられるような状態を作ってあったりもします。
Gatherでリモートでもすぐ声をかけられるのっていいですよね!
最後に、開発グループとして今後目指していきたいことを聞かせてください。
「事業の成長に技術で貢献できる組織であること」が組織としてのありたい姿で、まずは生産性をあげること、開発効率の向上を目指しています。
そのために、今後スケールしていくことに備えて、今あるRURAのアーキテクチャを改善していき、できるだけ複雑性をなくしていってシンプルな状態にすることに取り組んでいます。
また、Cursorなどのツールを積極的に取り入れて、アウトプットのスピードを上げて量を増やしていくことにも取り組んでいます。
RURAは現在エンタープライズ企業様からの引き合いも増えてきていて、今後どんどん導入台数が増えていきます。
より便利になる追加機能開発だけでなく、その成長に耐えうるプロダクトの技術基盤も並行して整えていくことも重要になっていくので、長期的に生産性を維持できるような体制と組織にしていくことを心掛けています。
技術的な挑戦が多い環境ですが、それを楽しみながら開発を進められるのがタイムリープでRURAを開発する面白さだと思っています!
松永さん、ありがとうございました!
RURAは複雑なプロダクトではありますが、お客様からは「パソコンに慣れていないスタッフでも直感的に操作ができる」というお声をよくいただきます。
今回お話を伺い、「わかりやすい」の背景で開発グループがどんな工夫や組織作りをしているのかを知ることができました。
RURAの開発に興味を持ってくださった方、私たちと一緒に、会社と自分自身の成長を一緒に目指していきませんか?