見出し画像

【エンジニアブログ】モバイルオーダー「ダイニー」のシステムアーキテクチャ🔧

こんにちは! ダイニーでPOS開発を担当しているエンジニアの長谷川(@hassey_11)です。

先日のCS通信に続き、ダイニーの開発体制や開発チームのことをお伝えするダイニーエンジニアブログも定期的にお届けしていきます!

記念すべき第一回は、エンジニアなら誰しも気になるであろう、ダイニーが採用している技術スタック及び全体のシステムアーキテクチャを紹介します。ダイニーの開発に興味がある!という方は是非ご一読ください。

ダイニーって何作ってるの?

ダイニーエンジニアチームでは、モバイルオーダーアプリだけでなく,実は飲食店向けモバイルオーダーPOSにも注力して開発を行なっています。

POSという言葉はあまり聞き慣れない方も多いのではないでしょうか(自分も飲食店でバイトするまで知らなかった😂)。
POSとは Point of Sales の略称で、イメージとしては販売情報などを管理する機能を持ったレジと考えてもらえるとわかりやすいかもしれません。

ただ実際にはレジだけでなく、

・メニューの追加や在庫管理を行うメニュー管理用 CMS
・スタッフが注文を入力するハンディアプリケーション
・メニューやテーブルに応じて選択的に伝票印刷を行うキッチンプリンタ制御アプリケーション
・予算管理などを目的とした売上集計用ダッシュボード

といった、飲食店営業に必要な一連のシステムを総じてPOSと呼ぶことが一般的です。
もちろん弊社ではこれらに加えて、お客様のスマートフォンから注文を行うモバイルオーダーのシステムも特に注力して作っています

ダイニープロダクトのシステムアーキテクチャ概要と分類

スクリーンショット 2020-08-20 18.40.41

dinii-self overall architecture by @karszawa
文字が小さいですが、下部の ops services, shop services, customer services が大分類になっています

開発チームでは、「現場目線を持った開発」を常に心掛けています。
そのため、機能やプラットフォームベースではなく、各プロダクトを使う人目線(飲食店を訪れるお客様,飲食店で働く従業員,飲食店を束ねる本部スタッフ)でプロダクトを分類することが多いです。(飲食店のお客様/店員様問わず、ユーザヒアリングを毎週行なっています✍️)

また弊社はスタートアップであり、開発に注力できるリソースはまだまだ潤沢とは言えません(絶賛採用中です🤗)。
そんな中でも最大限の価値を提供するため、お客様に直接触れていただくプロダクトだけでなく、効率的に開発を進めるための dev-ops 基盤 ( slack コマンドによる staging デプロイシステムなど) や アラート基盤 (プリンタ接続不良の検知など)、迅速なアップデートをお届けする OTA update 基盤などにも力を入れています。

技術スタックについて

プロダクトの数が非常に多く、一見すると開発環境がとてもカオスになっているイメージをもたれるかもしれません。
では実際に、以下に採用している技術スタックを並べてみます。

Web App (モバイルオーダーアプリ、各種ダッシュボード)
  TypeScript, React, Next.js, GraphQL
Mobile App (キッチンプリンタ、ハンディ、キオスクなど)
  TypeScript, React Native, GraphQL
  Swift, Kotlin 
        (決済端末やプリンタなど Native SDK との接続に利用しています)
Backend
  TypeScript, NestJS, PostgreSQL, Firebase
Infrastructure / Analytics
  GAE flex, Hasura, BigQuery, New Relic

なんとご覧の通り、開発チームの主要言語の大半は TypeScript になっています!
多くのプロダクトを開発していく中でも、可能な限り開発リソースのレバレッジを高めることを求め続けた結果、現在のような形になっています。

また職種による開発領域や、プロダクトごとに生じる属人性を可能な限り排除することも心がけています。開発チームでは特定領域の担当というのが基本的になく、機能開発は各人がバックエンドからフロントまで一貫して行うことが基本になっています。
特に PostgreSQL に直に接続し GraphQL API を提供するミドルウェアである Hasura の採用は、依存関係の大きい Backend 部分の改修を最小限にすることができ、属人性の排除と開発効率の向上に役立ちました。

TypeScript エコシステムは非常に充実しており、統一化の苦痛はそれほどなく、むしろノウハウの蓄積による品質向上のメリットの方が現状は大きいと感じています。図には載っていないID-POSを活用した様々なプロダクトもすでに開発中で、さらにプロダクトは増えていくので、基本的には今後もこの方針を続けていこうと考えています。

最後に

最後にここまでの話をまとめます。

1. ダイニー開発チームはプロダクトがたくさん!  
 日々多様なプロダクトに触れるのはとても刺激的です🤗
2. 常に現場目線を意識してプロダクトに向き合っています!
 より使いやすく飲食店様にとって価値の高いものを作り上げていきます💪
3. 開発環境の統一化・dev-opsへの取組で、チーム一丸で効果的にプロダクトと向き合っています
 TypeScript 好き・GraphQL好きはめちゃくちゃ楽しいと思います!

そんなダイニーエンジニアチームでは絶賛採用募集中 なので、少しでも気になった方は是非お声がけください!(詳細な採用情報はこちら)

誌面の都合上あまり触れていませんが、実は Mobile Native エンジニアも非常に価値を出せるプロダクトですので、是非お声がけください📱
チームとしては、安定かつ柔軟な native bridge 開発基板 や kiosk 対応・OTAアップデート基板などのノウハウが溜まりつつあり、また今後もプロダクトの根幹に関わる様々な挑戦の機会があります!

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