見出し画像

ソフトウェアだけで完結しない事業だからこそ、おもしろい―LUUPプロダクト開発の裏側 ソフトウェア編

「街じゅうを『駅前化』するインフラをつくる」というミッションを掲げ、マイクロモビリティのシェアリング事業を展開するLuup。将来的には電動・小型・一人乗りの電動マイクロモビリティを包括的に取り扱い、ファースト・ラストワンマイルの移動手段を確立し、全ての人が自由に移動できる未来を目指しています。現在は東京と大阪を中心に、小型電動アシスト自転車と電動キックボードを展開しており、現在500箇所以上にポートが設置され、1000台以上のマイクロモビリティが街じゅうを走っています。

画像1

LUUPと聞いて真っ先に思い浮かべるのは、全長120cm程しかないのにとってもパワフルな小型電動アシスト自転車と、安定性があり乗り心地がよい電動キックボードが多いのではないでしょうか。実は、その車体を快適に使ってもらうために、ポートを増設するための営業チーム、各ポートにいつでも車体があるように再配置を行いバッテリーの交換などを行うオペレーションチーム、車体に搭載したIoTデバイスを作るIoTチーム、車体を作るハードウェアチーム、そして、ユーザーが使うアプリ開発やIoTとのつなぎ込み、社内管理ツールの開発などを行うソフトウェアチームが協力し合いながらサービスを提供しています。

今回は、株式会社LuupのCTOである岡田直道(以下、岡田)と、LUUPアプリの開発や社内管理ツールの開発などを行うソフトウェアテックリードである栗村貴尚(以下、栗村)にインタビューです!

画像2

岡田 直道(写真右)
株式会社Luup CTO(共同創業者)
東京大学工学部卒業後、同大学院在学中より株式会社AppBrew、株式会社リクルートライフスタイル、Sansan株式会社など複数社で主にサーバーサイド・iOSアプリ開発業務を経験。株式会社Luup創業後はCTOとして、エンジニア組織の構築やLUUPのアプリケーション開発・社内システム整備を管掌。
栗村 貴尚(写真左)
株式会社Luup ソフトウェアテックリード
2016年株式会社エウレカに入社後、Pairs日本版にてAndroidアプリ開発を担当。グローバル版ではサーバーサイド開発なども行い、その後はBIチームでデータエンジニアとして活躍。2020年10月より株式会社Luupにジョインし、モバイルテックリードとしてAndroidアプリのリリース後は電動キックボードのリリースなどに際しソフトウェア開発全般を牽引。

血湧き肉踊る…社会を変えている実感のある仕事

ー栗村さんは2020年12月にLuupに入社されていますが、その頃は電動キックボードのリリースで会社が集中的に開発をしていた頃でしょうか。

栗村:
入社直後、年末年始はAndroidアプリのローンチを行っていました。当時、業務委託の方と2人でiOSを踏襲するような形でリリースしましたね。少ない人数だったので、CI/CDを充実させコードスタイルのチェックやLinterによる自動GitHubコメントなどをリリース前から充実させることでプロダクトの品質を担保しました。


ーそこから約4ヶ月経った2021年4月に、小型電動アシスト自転車に加えて、電動キックボードのシェアリングサービスが始まったのですね。

栗村:
はい。2021年4月に新事業特例として認定され、ヘルメットが任意着用の電動キックボードのシェアリングサービスがはじまりました。その事業が、次に取り掛かった大きな仕事で、リリースはまさに血湧き肉踊るような仕事でした。前職までは、リリース日をずらせない仕事はそんなに多くなかったんですよね。だから、社会的価値が大きく、リソースがない中でいかに間に合わせるか…非常に面白かったですね。今はもうここまで納期がシビアなプロジェクトは発生しないような体制になりましたが、当時はかなりエキサイティングでした(笑)。
リリース後は明確に自分の仕事が世に出ている感覚がありましたね…そこら中、街を走ってる電動マイクロモビリティは自分が実装した機能を使っているわけで。

岡田:
電動キックボードをリリースしてからは、サービスを利用している人を見かけない日はないですよね。自分のサービスを使ってもらっているなという実感に加え、このサービスが世の中を便利にできているなという実感があるのが嬉しかったです。

栗村:
社会に影響がありますよね。スマートフォンの中だけではなくて、街を実際に走っているのを見られるのは大きいです。

岡田:
社員も普段からかなり利用していますね。展開エリア内に住んでいる人も多く日常的に使っていて、改善点を見つけてくれたりしています。

画像3

単なる未来予測ではなく幅の想定をしながらコードに落とし込む

ーどんな役割のメンバーが何人在籍していますか。

岡田:
栗村さんが入社した直後はAndroidのローンチを担当してもらったんですが、ガンガン開発に入ってもらう内にいつの間にか領域が広くなってきて。いまはiOS、Androidリーダーそれぞれ別の方がリーダーとなり、栗村さんにはソフトウェア全体を見てもらっています。

栗村:
モバイルアプリ開発全体を僕が見ています。iOS、Androidアプリに加えて、サーバーサイドも見ながら必要な機能は一気通貫で実装したり、その他にも、IoTデバイスを制御するサーバーとのつなぎ込みといった各チームとの糊付け的な役割、そして社内ツールの開発をやっていますね。各チーム業務委託も含め3〜5人で、うちフルタイムコミットが1〜2人です。これまでは少ない人数でカバーしあいながら柔軟に開発してきました。

岡田:
開発スタイルは、アジャイル開発で2週間のスプリントの開発サイクルで進めています。PM・デザイナ・ソフトウェアで週1回 、iOS/Android/サーバーサイド/IoTのMTGがそれぞれ週1回あります。リモートでやっていることもあり、コミュニケーションが足りない分はメンバー間・チーム間どなそれぞれ必要に応じてMTGを設けています。

画像4

ーソフトウェアの分掌、すごく広いですね。

栗村:
めちゃくちゃ広いです。それが面白さでもありますね。

ーLuupにおけるソフトウェア開発とはどんなものでしょうか?

栗村:
いかにスケールを想定したものを作るかには、重きをおいています。目先のことだけ見て簡単に実装できちゃうことがあったとしても、それはやらないようにしています。それに開発人数も少ないので、今後の様々な展開の可能性を踏まえてスケールできるものを考えて実装していきます。

岡田:
現在は東京と大阪だけですが、これからエリアが増えていきます。それに伴い、ポートや車体があっというまに増えていきますから。そういう将来的な拡大のための想定もしています。

栗村:
スケールの想定は、今後の予想されるエリアや機体の展開などだけではなく、既存の裏側のオペレーションのことも想定しています。
オペレーションチームがやっているのは、車体のバッテリー交換、車体の再配置、故障対応など実際にフィールドをまわり、ユーザーが快適に使うために環境を整える仕事です。なので、オペレーションが回るのか?エラーに対してアラート鳴らすだけではなく自動で解決する仕組みや、人間がどう動くかも含めて考えています。

画像5

岡田:
社内ツールもいくつかあって、ポートを巡回して車体の再配置やバッテリー交換を行うオペレーションチーム向けのAndroidアプリ、CSやマーケティングのチームがポートやデバイスの状態を確認したり、クーポン発行を管理したりするような社内向けWebアプリなどが代表的です。
また、車体の管理をするために位置情報を定期的に取得しているのですが、通信エラーでトラッキングが切れてしまったり、ポートとデバイスの紐付けが途切れてしまうことがまれにあるんです。そんなときに使えるのが、最終ライド履歴など様々な情報から車体を探索するSlackBot。このツールを導入して非常に効率が上がりました。

栗村:
単なる未来予測ではなくて、幅の想定をすごくするんですよね。
ユーザーに向けてだけ開発していれば良いのではなくて、オペレーションチームや他のチームを考えて作るのがおもしろいんです。

岡田:
会社の経営という観点でも、オペレーションチームの効率化ができるとコストが軽減されて嬉しいですし。だからソフトウェアの力が及ぶ範囲がめちゃくちゃ大きくて広いんです。ユーザーのリアルな行動から事業のコストまで。その分、難易度高いですけどね。

栗村:
僕は最初からソフトウェアだけじゃないところがおもしろそうだと思ったんです。大変そうではありましたけど、裏側の仕組みまで考えて開発したかったんですよね。実際に入社してからはオペレーションチームと一緒にフィールドをまわらせてもらったんです。オペレーションチームの仕事を間近で見た経験が生きていると思います。

岡田:
オペレーションについていくのも栗村さんから希望して自発的にやってくれましたよね。ソフトウェアのノウハウを使って、現場の作業やリアルな世界まで手をかけてくれるのがすごく嬉しかったです。

ーどんな技術を使っているんですか?

岡田:
特に尖った技術選定をしているわけではなくて、LUUPで求められることはデリバリーのコストを低く、広く長く使えるものにすることだという考えで意思決定をしました。主にデリバリーを高速に行う観点から、モバイルアプリのバックエンドにはFirebaseを使っています。
モバイルはSwift, Kotlinネイティブで、バックエンドはフルFirebaseで構築していてCloud Firestore, Cloud Functions, Firebase Hostingあたりを使い込んでいます。言語・FWとしてはNode.js, Nuxt.jsをTypeScriptで書いているのが大部分です。インフラは基本GCPですが一部AWSも採用していて、IoTデバイスの通信方式は車体の種類によって様々ありますがTCP, MQTTがメインです。あまり一般的に聞き慣れないような技術スタックはないかなと思います。

画像6

チームの体制であったり新規開発プロジェクトに余裕が出てきたら、より最新の尖った技術採用にもチャレンジしていきたいですね。

ソフトウェア、ハードウェア、IoTデバイスをそれぞれ開発する難しさ

ー「街じゅうを駅前化するインフラ」として相応しいアプリにするために何にこだわったのですか

栗村:
「街じゅうを駅前化」っていうのは、つまり高密度化すること。ポートも車体もどこにでもある状態にすることです。その前提で、どうやってポートを獲得していくのかというのは大きいですよね。そこは営業チームの腕の見せ所だと思います。それを支えるポートオーナーに向けたLUUPのセールスポイントで成立させたいのは、「ユーザーが乗りたいときに車体が必ずある」ということ。さらにそれを支えるのが、車体の再配置やバッテリー交換、故障対応を請け負っているオペレーションチームなんです。
そのオペレーションチームが効率よく仕事ができるように必要なデータを取ったりツールを開発しています。ソフトウェアは「街じゅうを駅前化」するために重要な"基盤”となっている部分です。

岡田:
多くの人のインフラとして使われるには、満たさなければならない性質がたくさんあります。その中でも、安定性と利便性が特に必須だと考えているんですが、安定性はサーバーサイド、利便性はアプリが主に担っていく部分で、それぞれソフトウェア開発チームの主戦場なのかなと。

栗村:
いろんな側面を考えながら作っていくのが難しくもあり、面白い部分です。

画像7

ー印象的な意思決定はありますか?

栗村:
Luupに入社した頃は、小型電動アシスト自転車メインのシェアサービスで、電動キックボードに取り組むのはかなり先だと思っていたんです。それが、自分の想定より早い段階でリリースすることになり、ソフトウェアもそれに合わせた対応をスピード感を持って進めました。電動キックボードをリリースするために、柔軟に組織のリソースをつぎ込む展開は、印象的でした。

岡田:
電動キックボードのリリースまでは、ドラスティックな事業方針の変更が何度かありましたが最近は安定していますね。これからはサービスをグロース・スケールさせていくフェーズに突入していきますが、いずれはまた新しい機能やモビリティの実装など、思い切った意思決定を迎える日もあるかもしれません。

ー Luupならではの開発の難しさはありますか?

岡田:
そもそも、開発する対象として大きく分けるとソフトウェア、ハードウェア(車体)、車体に搭載するIoTデバイスがあるのですが、それぞれ開発スタイルやタイムスパンが全然違うんですね。例えば、ソフトウェアはスモールリリースしてその後アップデートを随時かけていくようなリーンな開発手法を取ることができますが、車体は何ヶ月も前に要件を固定して、製造が終わったら完成という不可逆なプロセス。そのギャップを踏まえて開発プロジェクトを進めることが難しかったりします。

ーモバイルを開発する上での課題や、やりたくてもできていないこと、などはありますか?

栗村:
サービスの拡大フェーズを迎えるに当たって、人が足りない状況です。現状、各チームにフルタイムでコミットする人が少ないのが、もどかしいところです。ソフトウェアは、アプリやサーバーのことだけ見ていればよいわけではなく、各チームとの連携や、オペレーションチームの動きを考えながらコードを書かく必要があるので、裏側まで目が行って、実装してもらえる人が必要です。そういう方がいると、各チームの連携でサービス開発が加速度的に進んでいくと思います。

岡田:
例えば車体に搭載しているIoTデバイスのファームウェアをアップデートするにしても、初期は1台1台手動でやっていたんです。でも、電動マイクロモビリティのシェアリングサービスを真にインフラ化するには、「密度」つまりどこからでもどこへでも乗れる状況を実現する必要がありますよね。当然車体の台数規模はあっという間に増えていくので、手動でアップデートしていくオペレーションは現実的ではありません。なので現在は、OTAで街中にある車体を遠隔でアップデートできるようにしています。もちろん、電波強度やバッテリー残量などの問題でアップデートに失敗したときのハンドリングも含めて設計する必要があります。このようにソフトウェアチームは、いかにハードウェア周りの要件を巻き込んでうまく抽象化してスケールするような形で取り扱えるかの設計が特徴的でおもしろいところですね。

画像8

全チームが揃って初めて前進し価値が出せる「全員が花形」のサービス開発

―今後の抱負を教えてください!

岡田:
今までは、1人1人が広い領域を見ながら柔軟に対応していき、どちらかというと個人の能力でカバーするスタートアップ的な開発を行っているフェーズでした。でもこれからは、各チームの専門性をより高めて組織的にスケーラブルなサービスを開発していくフェーズです。なのでスタートアップ的な広範な動き方は根底思想として大事にしつつ、一つの領域に深い知見や経験がある方も積極的に採用していきたいですね。

栗村:
広い視野で他チームの状況を把握しつつ、自発的に開発をしていけるようなソフトウェア開発チームにしていきたいです。仕様書通りにただサービスを作るだたけではなくて、IoTやオペレーションや営業など、他チームの事情を想定したことをどうコードに落とすか?と、考えられる方に、ぜひジョインしてもらいたいです。

岡田:
Luupはチームや職種を超えて、お互いをリスペクトし合うカルチャーの会社なんです。

栗村:
そうですよね。Luupって、ソフトウェアだけがんばればなんとかなる、という事業じゃないところが面白くて。異なる専門領域を持った方々の仕事を想像するのは難しい。でも、車体と、ポート数と、それらを支えるオペレーションと…全てが揃って初めてこのサービスは前進できるんです。全員が花形だし、全員が一緒になって頑張ることで価値を出せるんですよね。

岡田:
確かに、アプリを作ってリリースで終わりじゃない。IoTやハードウェア、そしてオペレーションチームなど他部署との連携もある分、難易度が高いサービスとも言えますね。サービス経験の深いエンジニアにとっては腕を試す場所としてもすごくいいのではないかと思います。

栗村:
このおもしろさに一緒にどっぷりと浸かってみて新しい価値を主体的に創っていける方とぜひ一緒に働きたいです。 また、少しだけ伝ってみたいと思う人は、副業など業務委託や学生の方はインターンという形でもぜひお待ちしています!
いまのフェーズのLUUPのサービスに少しでも携わる経験は必ずキャリアの価値になると思いますし、そうできるようサポートしたいと思っています。

画像9

Luupでは、更なる挑戦に向けて、採用を強化しています

現在Luupでは、積極的に採用活動を行っております!Luupの採用に興味をお持ち頂いた方は、ぜひこちらの記事を御覧ください。

サーバーサイドエンジニア(テックリード)
アプリのバックエンドおよび社内用管理ツールの開発、時にはIoT関連ソフトウェア開発・検証のサポートなど、サーバーサイド技術を生かした広範なソフトウェア開発業務を担っていただきます。より広大なエリアでより多くのユーザーに使ってもらえるサービスとなるべく、スケーラビリティの担保を主眼に開発を進めていただきます。

iOSエンジニアAndroidエンジニア
電動キックボードや小型電動アシスト自転車への乗車体験を直接提供するユーザー向けiOS/AndroidネイティブアプリLUUPの開発を行うポジションです。LUUPが短距離移動のインフラとして世界でも唯一無二のプロダクトになるため、徹底的に安定性と体験の良さにこだわった開発を行っていただきます。

IoTエンジニア
Software Development部は、プロダクトマネジメント、データ分析の部門と連携しながら『LUUP』サービス本体や社内向け管理ツール、IoTデバイス関連及びその他周辺ソフトウェアプロダクトの設計・開発を行っている部署です。その中で主に車体に搭載されているスマートロックなどのIoTデバイスの動作検証、ソフトウェア基盤との繋ぎ込みを行うことでLUUPのサービスを提供可能な状態に成立させる根幹を担うポジションが『IoTエンジニア』です。


応募する職種に悩む場合はこちらのオープンポジションからご応募頂いても構いません。お待ちしております!


Twitter:https://twitter.com/Luup_Official
Facebook:https://www.facebook.com/LUUP.JP

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