🚀

RYDE PASSを支える技術

2024/11/25に公開

はじめまして!エンジニアブログを開設しました 🚀

こんにちは!この度、RYDE株式会社のエンジニアブログを立ち上げました。
記念すべき最初の記事を担当させていただきます、CTOの芝原です。

このブログでは、私たちのプロダクトや技術スタック、日々の開発現場での取り組みについてお届けします。まずは、弊社のサービスそれを支える技術についてご紹介したいと思います!

私たちのサービス:RYDE PASS

私たちが掲げるミッションは、「世のため、人の移動のため。」です。
移動は、人々の日常生活の基盤であり、地域社会の発展にも直結します。私たちは、「移動」という領域で個人の日常生活や地域の未来をより豊かなものにすべく取り組んでいます。

https://pass.ryde-go.com/

RYDE PASSとは?

RYDE PASSは、公共交通やシェアリングサービスなど様々な移動にまつわるサービスを一つのプラットフォームで統合するモビリティアプリです。

地域ごと、事業者ごとにあるたくさんのアプリを個別に使い分けることなく、RYDE PASSのアプリとアカウントひとつで、様々なチケットやサービスを決済、利用できます。

主な機能

  • 公共交通のデジタル乗車券・定期券
  • シェアサイクルの予約・貸出
  • タクシーの配車、など

お待たせしました。それでは本題に入ります!
ここからは、RYDE PASSのシステム全体像と、そこで使用されている主要な技術についてご紹介します。
私たちのような小規模なベンチャー企業が、どのような構成でサービスを開発、運営しているのか、少しでも参考になれば幸いです。

RYDE PASSのシステム全体像

RYDE PASSは、バックエンドサーバーtoC向けモバイルアプリtoB向け管理画面という3つの主要なシステムで構成されています。

※他にも認証サービス、データ関連のシステムなど様々ありますが、本稿の趣旨とずれるので省略しております。

バックエンドサーバー

サービスの根幹を支える重要なシステムです
現在は、モノリシック構造のRailsアプリケーションとして開発・運用しています。同じコードベースで非同期処理を担うSidekiqも稼働しています。

主な役割

  • toC向けアプリおよびtoB向け管理画面へのAPI提供
  • 業務ロジックの管理
  • 決済の実行と管理(クレジットカードやPayPayに対応)
  • 各種バッチ処理の実行

主要な技術

名称 用途
Ruby on Rails 7.1系 (2024年11月時点)
Ruby 3.3系 (2024年11月時点)
Sidekiq 非同期処理
Sidekiq Cron 定期的なバッチ処理の実行
GraphQL toC向けアプリおよびtoB向け管理画面へのAPI提供
Mobility 多言語対応

インフラ等

名称 用途
AWS Fargate、RDS、Elasticacheなど
Terraform インフラ構成管理
Github Actions CI/CD(デプロイにはecspressoを利用)

分析、監視等

名称 用途
Mackerel AWS全般の監視
Scout Monitoring パフォーマンス監視
Pingdom 外形監視
Sentry エラー管理

現在の課題と対応

サービスの拡大に伴い、以下の課題に直面しています。

  • モノリシック構造の制約
    サービスの機能が増える中で、モノリシック構造によるスケーラビリティの限界が顕著化しています。
  • 型安全性の不足
    動的型付け言語の特性上、コードの保守性が低下し、大規模開発における生産性にも影響を及ぼしています。

これらを解決するために、以下の取り組みを進めています。

  1. モジュラーモノリス化
    アプリケーションを適切に分割することで、拡張性を高めつつ、モノリシックの利点を生かした運用を維持します。
  2. 型定義の導入
    RBSやRBIなどの型定義ツールを活用し、静的解析によるバグの早期発見やコード保守性の向上を目指します。

toC向けモバイルアプリ

続いて、ユーザー向けのiOS/Androidアプリについてご紹介します。

このアプリは、React Nativeを採用し、単一のコードベースでiOSとAndroidの両プラットフォームに対応しています。主な機能はデジタル乗車券の購入と利用です。一般的なEC機能に加え、デジタルチケットを活用するための機能がベースとなっているイメージです。

※ダウンロードしてみたい方はこちら

主な機能

  • 会員登録、ログイン
  • 決済(クレジットカード、PayPayに対応)
  • デジタル乗車券・定期券の購入、利用(目視券やQRコードの表示)
  • シェアサイクルの予約および貸出(ドコモ・バイクシェア)
  • etc

主な技術

名称 用途
React Native
TypeScript 型安全の担保
GraphQL APIサーバーとの通信
Firebase AnalyticsやPush通知など
GoogleMaps 地図表示

インフラ等

名称 用途
Github Actions CI

※リリース作業は現在、手動で行っていますが、今後自動化を進めていきたいと考えています。

分析、監視等

名称 用途
Firebase Analytics BigQueryに送信してBIツールで分析
Sentry エラー管理

ReactNativeの採用理由

モバイルアプリ開発の特徴は、React Nativeを採用している点にあります。
限られたリソースでiOSとAndroidの両方に対応する必要があり、単一のコードベースで両プラットフォームに対応できるReact Nativeが最適と判断しました。

同じ用途では最近Flutterが注目されていますが、React Nativeもどんどん良くなっており、私たちのアプリケーションでもその進化を感じています。
実際にRYDE PASSをダウンロードしてお試しいただければ、React Nativeの力を感じていただけるはずです。巷で賛否両論あるとはいえ、React Nativeは間違いなく私たちの事業成長を支える重要な技術の一つです。

※React Nativeの詳細については別途記事で深掘りする予定です。

現在の課題と対応

とはいえ、もちろんReact Nativeにも課題があります。
いくつかの課題解決のためにExpoの導入を検討しています。

ExpoはReact Nativeをさらに便利にするツールであり、最近のReact Nativeの良さはExpoありきで語られることも多いです。
RYDEでは特に以下のようなメリットを期待しています。

  • アップグレード作業の簡略化
    Expoを利用することで、依存関係や設定ファイルの管理がシンプルになり、アップデート作業がスムーズになること。
  • エコシステムの充実
    Expoの提供する高品質なライブラリが豊富に揃っていること。
  • 便利な機能の活用
    OTA(Over-the-Air)アップデート機能や、アプリのビルド・リリースを効率化するEAS Submitなど、Expoならではの便利な機能が利用可能になること。

開発当初はカスタムネイティブモジュールの利用が必要だったため、Expoを利用せず素のReact Nativeで開発を進めました。
しかし、Expoの進化によりこれらの制約が解消されたので、RYDEでもExpoを利用することで得られる開発体験の向上に期待しています。

toB向け管理画面

最後は、RYDE PASS上でデジタル商品を販売する交通事業者の方が利用する管理画面です。
Next.jsで開発し、Vercel上にホスティングしています。

主な機能

  • デジタル商品の登録、編集
  • デジタル定期券の審査(通学定期券などで学生証などを確認します)
  • 売上データなどの閲覧
  • etc

主な技術

名称 用途
Next.js Reactフレームワーク
TypeScript 型安全の保証
GraphQL APIサーバーとの通信
AWS Cognito 認証
Ant Design UIフレームワーク、豊富なコンポーネントを利用

インフラ等

名称 用途
Vercel Next.jsを一番楽に動かせる
Github Actions CI/CD

分析、監視等

名称 用途
Firebase Analytics 利用状況の分析
Sentry エラー管理

現在の課題と対応

管理画面ということで当然フォームが存在しますが、特に商品登録や編集フォームの仕様が高度化し、フォーム構造が複雑化してきています。この影響で、コードのメンテナンス性が低下している点が課題です。

この問題に対しては特効薬はありませんが、地道なリファクタリングを進めることで、コードの可読性や保守性の向上を図っていきます。

最後に

最後までお読みいただきありがとうございます!
私たちは、RYDE PASSの進化と成長を支えるエンジニアリングに情熱を注いでいます。
現在、新機能の開発に加えて以下のような取り組みを進めています:

  • バックエンドのモジュラーモノリス化と型定義の強化。
  • モバイルアプリのExpo化と開発体験の向上。
  • 管理画面のパフォーマンス最適化とフォーム関連のリファクタリング。

エンジニア採用募集中!
私たちと一緒に「移動の未来」を創りませんか?技術が好きな方、挑戦を楽しめる方をお待ちしています!
https://rydeinc.notion.site/RYDE-99302bd5277c4582975d358e9cce4c6c

RYDE株式会社

Discussion