🌏

LUUP の Software Engineering の全容

2022/12/01に公開

※この記事は、Luup Advent Calendar の1日目の記事です。

こんにちは、株式会社Luup CTO の岡田(@7omich)です。
創業5年目に突入した Luup では、技術発信やっていくぞ!という気概のもと、今年初めてアドベントカレンダーに挑戦します。
とにかくしっかりと完走できることを目標にして、Luup の面白さが伝わる記事や技術的に有用な記事をゆるく出せていければ良いな〜と思っています。

長丁場にはなりますが、ご興味を持っていただける方は是非お付き合いください!

アドベントカレンダーの1発目として、本記事では今後の発信内容がより理解しやすくなるよう、LUUP に関する Software Engineering 業務の全体像を理解できるような内容を書いていこうと思います。

本記事の目的

過去に本 Developers Blog にて LUUP の技術スタックや開発組織について概説した記事を書きましたが、こちらの記事は事業概要とあわせてシステム構成図や採用技術については明記されているものの、各チームの仕事内容の具体感には欠ける、本当にざっくりした概説にとどまっていました。

のちに各チームのメンバーから、チームの具体的な業務や採用技術、現状の課題などを詳らかに記した記事が出ました(これらはすべて後述します。どれも素晴らしいので読んでください!)が、上の概説記事との間には具体度のギャップがあると感じています。

今年はエンジニア組織強化のため、たくさんの方とカジュアル面談をしているのですが、

  • 自分の Tech stack が技術要素として Luup に合っていそうなのはわかるが、実際にはどのチームが適することになるのか
  • そのチームの業務領域は何なのか?そもそも Luup が開発しているソフトウェアって何があるのか
  • ハードウェアとか、IoTデバイス周りって何をどこまで開発しているのか?組み込み開発は?
  • モビリティのシェアリングって運営色々必要そうだけど、バッテリーとかどうしているのか?オペレーションとは

といったことが外部から見るとわかりづらく、Luup という会社での(ソフトウェア領域に関わる)仕事の全体像と、その中での自身の立ち位置を想像するに足る情報があまりまとまって発信されていないかも、と思っていました。

面談等でカジュアルにお互いのことを知るような場では、よくこの辺りを掘り下げてお話をすることが多いのですが、ありがたいことに「なるほどそういうこともやってるんですね!面白いなぁ」といったような反応を頂けることが多いです。
その反面、この辺りがあらかじめ知られていないこと、世の中に発信できていないことは課題だなと実感しています。

なので今回は、その「LUUP の概説記事」と「各チームの紹介記事」の中間にあたるレイヤーを埋められるような記事を書こうと思い至りました。

LUUP Software Engineering の業務領域

luup-how-to
iOS/Androidアプリ『LUUP』の使い方(※最新版のアプリUIとは一部異なります)

電動キックボード・電動アシスト自転車のシェアリングサービスを提供している Luup ですが、私が属している Software Development 部、および CDSO(Chief Data Strategy Officer) の松本が管掌する Data Strategy 部では、以下のようなソフトウェア関連業務を対象領域としています。

  • 『LUUP』本体の iOS/Androidアプリ
    • 実際にユーザーがシェアリングを利用する、サービス本体アプリの開発です
    • iOS チーム、Android チーム、QA チームが主に関わっています
  • 本体アプリのバックエンド(Cloud Functions メイン)
    • 上記本体アプリに対し、解錠/施錠をはじめとするAPIの提供などを行います
    • Server チームが主に関わっています
  • 社内向け Web/Androidアプリ
    • CSやマーケティングチーム、オペレーションチーム *1 など、開発者以外の多くの社内メンバーが利用し、LUUP の運営を支えるソフトウェア群です
    • Server チーム、Android チームがそれぞれ主に関わっています
  • IoT 関連ソフトウェア開発
    • LUUP が提供する車両のハードウェア *2 と繋がる、IoTデバイス周辺のサーバーやツールの開発です
    • IoT チームが主に関わっています
  • 上記のインフラ構築、運用
    • これらのサービス群をホストするクラウドインフラ(大部分はGCP)の設計から構築、運用までを担います
    • SRE チーム、IoT チームが主に関わっています
  • Site Reliablity Engineering、信頼性の担保
    • サービスの可用性や信頼性を向上・担保するための監視の強化や、SLI/SLOの策定・運用をしています
    • SRE チームが主に関わっています
  • データ基盤
    • アプリ・IoT・バックエンドのログなどをもとに、データパイプラインの設計・開発や運用フローの構築をしています
    • Data Engineering チーム、Server チームが主に関わっています
  • データサイエンス
    • 上記で構築したデータ基盤をもとに、モデリングやシミュレーション、仮説検証、データ可視化などを行います
    • Data Science チームが主に関わっています

実際にはこの枠組みに当てはまらない細かな業務、他部署をサポートするような開発、横断的な基盤開発なども存在しますが、ざっくり分けるとこのような全体像になっています。

*補足1: オペレーションについて

Luup におけるソフトウェア開発やデータ分析業務と切っても切れない重要な関係にあるのが、シェアリングサービスの運営の根底を支える「オペレーション」業務の存在です。

Luup が提供しているモビリティはいずれも電動駆動であるため、車両にはバッテリーが搭載されています。当然ながら街中で何日間も利用され走行していると、中にはバッテリーの残量が少なくなり、いずれは走れなくなってしまう車両も生まれます。
そういった状況が起きないよう、Luup では街中にある車両について、定期的にバッテリーを満充電のものに交換する業務を定常で行っています。
他にも、故障が報告された車両を回収して修理することや、それを未然に防ぐための日々の車両点検、新しい車両や修理された車両を街中のいずれかのポートへ配置する業務も存在します。

これらは全て物理的な作業であり、車両やバッテリーを積載できる車を運転し、街中にあるポートを巡回して行う必要があります。
これらの業務を総称して「オペレーション(Ops)」と呼んでおり、Luup のサービスが健全かつ使いやすい状態で維持されるために不可欠な業務となっています。

システムによるサポートを通じてこれらの現場業務を効率的に実行したり、データ分析を通じた最適化を行うことが LUUP のビジネス全体として見ても非常に重要な活動であり、技術者の介在価値が光る領域になっています。

*補足2: ハードウェアについて

Luup では、シェアリングサービスで提供する車両のハードウェア開発を、現在は内製ではなく ODM の形で行っています。
駆動系を含む車両の製造に加え、車載IoTデバイスに乗っているファームウェアの組み込み開発までが Luup の発注要件に沿って提携メーカーにて行われているため、Luup としては各車両を制御するための通信プロトコルの仕様に合わせたバックエンドサーバー(マイクロサービス)の開発をしている状態です。

普段の提携メーカーとのやり取りや、新車両の発注に至るまでの要件定義や一部設計業務などは、市場運用中の車両の故障管理・対策などと併せて Hardware 部という別部署が行っています。(日本語はもとより英語、中国語も堪能な凄いチーム!)
新車両の導入に向けた開発や、不定期でのファームウェアアップデート(OTA)などは、IoT チームが Hardware 部と密に連携を取りながら実行しています。

各チームの説明

swd-organization
Software Development 部、Data Strategy 部を取り巻く組織体制 (※各部・チームの人数はイメージです)

先ほどの業務領域に関する説明を踏まえて、各チームごとに整理をし直すと、それぞれ以下のような状況になっています。

iOS チーム

電動マイクロモビリティのシェアリングサービス『LUUP』の、ユーザー向けiOSアプリの開発をしているチームです。事業を拡張するための新規開発、ユーザーのためのUX改善、新技術導入などの技術的改善をそれぞれ事業や組織のフェーズに合わせてバランス良く実行しています。

体制: 正社員2人+業務委託4人(技術顧問を含む)
一緒に働く人: Android チーム、Server チーム、プロダクトマネージャー、デザイナー、QA チーム
技術スタック: Swift(Native), Clean Architecture+MVP, SwiftUI, Swift Package Manager, etc.
詳細はこちら:Luup iOSアプリ開発の現状と課題

Android チーム

電動マイクロモビリティのシェアリングサービス『LUUP』のユーザー向けAndroidアプリ、および社内向けオペレーション用アプリの開発をしているチームです。シンプルに開発範囲が広く、1つのチーム内でtoC・toB両方の開発ができるような雰囲気のため面白いです。

体制: 正社員1人+業務委託6人
一緒に働く人: iOS チーム、Server チーム、プロダクトマネージャー、デザイナー、QA チーム
技術スタック: Kotlin(Native), MVVM, Jetpack Compose, Kotlin Coroutine, etc.
詳細はこちら:Androidチームの紹介

Server チーム

『LUUP』本体のiOS/Androidアプリのバックエンド開発に加えて、オペレーションチームを初めとした様々なチームが利用する社内向けWebアプリを開発しており、事業運営を総合的にサポートしています。Server チームといっても社内向けWebアプリにおけるフロントエンド開発(Nuxt.js)はガッツリ存在しており、実際にはバックエンドエンジニアとフロントエンドエンジニアの共存する、Web周りを幅広く取り扱うようなチームになっています。

体制: 正社員1人+業務委託9人
一緒に働く人: iOS/Android チーム、オペレーション、カスタマーサポート、マーケティング、and more..
技術スタック: Node.js, TypeScript, Nuxt.js, Firebase(Cloud Functions, Firestore), etc.
詳細はこちら:LUUPのサーバーチームの現状と課題

IoT チーム

提携メーカーにより製造されたモビリティ車両をiOS/Androidアプリから動かせるようにするため、解錠/施錠などのコマンドをバックエンドから遠隔でIoTデバイスに向けて送る通信部の開発をメインで行っています。例えば Server チームが開発しているクライアント向け施錠/解錠APIは、IoT チームが用意したマイクロサービスを呼びだすラッパーとして作られています。
そのため、IoT チームと言っても組み込み開発をしている人がいるわけではなく、その方面に知識や経験を持ったエンジニアがサーバーサイド開発・インフラ構築などのWeb開発業務を行っている形になっています。

体制: 正社員1人+業務委託4人
一緒に働く人: Hardware 部、Server チーム、SRE チーム
技術スタック: MQTT, BLE, Socket, AWS IoT, GCP(Pub/Sub, Functions), SORACOM Beam, etc.
詳細はこちら:IoTアーキテクチャについて

SRE チーム

上記4チーム(特に Server, IoT チーム)の開発したサービス群をホストするクラウドインフラ(大部分GCP)の設計から構築、運用までを担っていることに加え、各サービスの信頼性や可用性を向上・担保するための監視の強化や、SLI/SLOの策定・運用、障害対応や On-call 体制の構築に加えて、負荷テスト等の性能試験の実施も行っています。
SREのプラクティス導入・立ち上げに向けた気持ちを込めて SRE チームと総称していますが、実際にはインフラエンジニアと SRE の混合チームのような形になっています。

体制: 正社員2人+業務委託7人
一緒に働く人: IoT チーム、Server チーム、Data Engineering チーム
技術スタック: GCP, Firebase, AWS, Datadog, SLI/SLO, Monitoring, Capacity Planning, etc.
詳細はこちら:LuupのSREチーム紹介

QA チーム

『LUUP』本体のiOS/Androidアプリの開発サイクルに合わせて、開発期間と並行しての Feature テスト、スプリント内の開発が完了した後の Release テスト、Regression テストといった QA(Quality Assurance) 業務を実行しているチームです。
加えて、サーバーサイドに変更があった際の Feature テストや、社内向けWebアプリの新規実装に対する Feature テストも行っています。
テストケースに沿った動作確認をするだけでなく、不具合の再現検証や複雑な仕様のドキュメント化など、アプリ開発を幅広くサポートしています。

体制: 正社員1人+業務委託2人
一緒に働く人: iOS チーム、Android チーム、Server チーム
技術スタック: TestFlight, Firebase App Distribution, GitHub, etc.
詳細はこちら: → 今後の発信に乞うご期待!

Data Engineering チーム

アプリ・IoT・バックエンドおよび Salesforce・Zendesk などの外部ツールを含め、さまざまなデータソースを元に、主に Airflow を活用して信頼性のあるデータパイプラインを構築し、Luup のデータ基盤を支えています。データカタログの設計・作成や Redash のホスティングなど、データを誰もが簡単に利用できるようにするインフラも提供しています。

体制: 正社員2人
一緒に働く人: Data Science チーム、Server チーム、iOS/Android チーム、IoT チーム、オペレーション、and more..
技術スタック: Python, Cloud Composer (Airflow), BigQuery, KMS, etc.
Data Engineering チームの記事はこちら:冪等性を担保したGoogle Cloud Composerの設計と実装

Data Science チーム

Data Engineering チームによって整備されたデータ基盤をもとに、マーケットをシミュレーションするツールを開発したり、データの分析・可視化を通してユーザー価値の最大化やオペレーションの最適化を図っています。
位置情報を元にした地理空間上でのデータの利活用が非常に特徴的で、プロダクトチーム、事業推進部(ポートの獲得などを推し進めるチーム)など複数の部署と連携しながら業務を進めています。

体制: フルタイム業務委託1人 + パートタイム4人
一緒に働く人: Data Engineering チーム、プロダクトマネージャー、オペレーション、事業推進部、マーケティング、and more..
技術スタック: Python, BigQuery, Kepler.gl, Redash, etc.
Data Science チームの記事はこちら:エリア面積計算の多面的アプローチ

終わりに

ここまで説明してきたように、Luup には Software Development 部・Data Strategy 部合わせて8つのソフトウェア技術系チームがありますが、事業開発上必要な粒度でそれぞれがこと細かに関わり合いながら、Luup の Values の1つでもある One Team に事業を作っていくことに貢献しています。

昨年と比べると少しずつ体制が安定してきて、技術面での挑戦も広がってきた Luup ですが、組織体制にてご覧いただいたようにまだまだ正社員の人数は多くなく、やりたいけど着手できていない技術課題・ビジネス上の課題はたくさんあります。
これまで Luup は、多くの専門性が高いパートタイム業務委託の方(副業やフリーランス等)に支えられてここまで拡大を続けてきましたが、これからのフェーズにおいては事業背景の深い理解を元に、複数チームや複数部門間での横断的なプロダクト改善にコミットしていく方を増やしていきたいと考えています。
すなわち正社員やフルタイムで動けるメンバーに Join いただくことで、開発組織のキャパシティを拡げていきたいと考えています。

リアルの世界で物理モビリティを走らせるこの事業において発生する、難しくも面白い課題を技術で解決していきながら、Luup が「街じゅうを『駅前化』するインフラ」になる未来へ向けて一緒に戦い進んでくれる仲間を募集しています!
下記採用情報リンク、もしくは私のTwitter等でもお気軽にご連絡ください!

https://recruit.luup.sc/

とここまで筆を走らせましたが、どうみても Advent Calendar っぽくない分量になってしまいました…。
明日以降の記事はこんなにド級になる予定ではない(かつ面白い読み物になるものが多そう)ので、是非お気軽に手に取っていただければと思います。

明日 2日目は、このブログ運営を一手に担ってくれている堀内(@shinya_h)さんからの記事投稿です!
Luup Advent Calendar、これから24日分のコンテンツをお楽しみに!

Luup Developers Blog

Discussion