こんにちは、VPoEの北川です。
今回はトレタで現在使用している技術スタックについて紹介します。
創業時から稼働している予約・顧客台帳サービス「トレタ」から現在の注力事業のモバイルオーダーサービス「トレタO/X」までをあらためて振り返ってみると、まるで異なる技術スタックになっているので歴史的な背景などを辿りながら紹介していきます。
技術スタックの変遷
予約・顧客台帳「トレタ」
会社名にもなっている予約・顧客台帳の「トレタ」は創業当時から稼働している築11年ほどのシステムです。
サーバーサイドにはRubyとRubyOnRailsで作られた巨大なコードベースのAPIサーバーがあり、予約台帳のiOSアプリやウェブ予約などのWebアプリケーションなどが利用しています。 長年このモノリシックなシステムを成長させてきたので、以前からトレタを知ってくださっている人にはトレタはRubyの会社と認知されていたと思います。
インフラは主にAWSを使用しており、EKSでのAPIサーバー群を管理を行い、膨大な予約データをMySQLに保管しています。
超直前予約「トレタNow」
上記の図にはないですが、技術スタックの転機となったのが超直前予約サービスアプリ「トレタNow」です。
これからすぐに行きたいお店が予約できるをコンセプトに超直前予約サービスとして2019年にリリースされましたが、残念ながらリリースのすぐ後にコロナの流行により飲食店予約の需要がなくなり、現在もサービスは縮小中です。
トレタNowでは意欲的に新しい技術要素を取り入れており、gRPCの導入やそれにあわせバックエンドにGoを採用しました。 フロントエンドはtoC向けのモバイルアプリとWeb版を提供し、SwiftやAngularの他にAndroid版としてトレタでは初めてKotlinを使用しました。
モノリスからマイクロサービスへ
モバイルオーダー「トレタO/X」
モバイルオーダー「トレタO/X」の開発は2021年ごろからプロトタイプ開発が行われ、2023年に正式リリースを行いました。
トレタO/Xではマイクロサービスを取り入れたことで、バックエンドの構成は多様になりました。
多くはトレタNowからの流れでGoを使用していますが、比較的薄いAPI層はフロントエンドのメンバーも実装がしやすいNode.jsを使用したり、注文データを扱うサービスにはイミュータブル・データベースのDatomicやClojureを使用しています。
インフラもトレタO/XではGCPを主に使うようになりました。予約台帳「トレタ」の様なモノリシックなサーバーの時はKubernatesを使った管理を行っていましたが、マイクロサービスになったことで一つのサービスはなるべく小さく管理コストの低いフルマネージド型であるCloud RunやCloud SQLを選択するようになりました。
フロントエンドでは、この時期からAngularからReact/Next.jsを採用するようになりました。 それまではAngular日本ユーザー会に参加したりとAngularを支持していましたが、トレンドとしてReactとVue.jsの勢いが増してきたことでAngularのエンジニアの採用に苦戦しはじめたのがきっかけでReactを使用するようになっていきました。 そこからReactやNext.jsのめまぐるしい進化もあり、現在ではフロントエンドにReact/Next.jsを使うことが多くなっています。
また、トレタNowで複数デバイス向けにフロントエンドを開発していた苦労から、クロスプラットフォームであるFlutterを採用しました。 ただ、アプリのマーケット申請の省略などの理由で「Flutter on the Web」のみで開発を開始し、ハードウェア連携などネイティブアプリにする必要性も出なかったため現在もWeb版のみで利用しています。
さいごに
やっとタイトル回収に入りますが、トレタO/Xの開発がそれなりに時間が経ちプロダクト方針や市場状況などが変わってきたところでシステムに求められる構成も変わってきました。
新しいマイクロサービスが必要になったり、逆に不要になってきたシステムのクローズや統合、リプレイスなどを行っていくことになります。
その中で選定する技術の基本軸はフロントエンドならReact/Next.js、バックエンドはGo言語に当面の間はなっていきます。
ということで、React/Next.jsを使って新規開発やシステムリプレイスなどをTypeScriptエンジニアやGoエンジニアの採用を行っているので、興味のある方はぜひ話を聞きにきてみてください。 hrmos.co