Berryを支えるアーキテクチャを紹介します
こんにちは、株式会社Berryの浅沼です!
今回は、開発しているサービスの中からヘルメット治療管理システムのアーキテクチャについて紹介します。医療機関と3Dデータのやり取りをしながらヘルメット治療に関する管理を実現しているWebシステム、そのアーキテクチャの特徴、今後の展望について触れたいと思います。
システム概要
ヘルメット治療管理システムは、主に以下の3つの機能を持っています。日々、医療機関の方の使いやすさ、見やすさを考えながら開発しています。特に、3Dヘルメットデータを確認するUIなどは、別途、機会があれば技術面を紹介してみたい内容です。
- 3D頭部データの受信
- 3Dヘルメットデータの確認
- ヘルメットの発注
アーキテクチャの詳細
システム全体のアーキテクチャは以下の図のようになっています。
フロントエンド
フロントエンドは、VueとTypeScriptを使用して構築されています。アプリケーションは、Vercel上でホスティングされています。
バックエンド
バックエンドは、Supabaseを使用しています。Supabaseは、データベース、認証、ファイルストレージなどの機能を提供し、スケーラブルなシステムを実現しています。ヘルメット治療管理システムの直近1ヶ月でのAPIリクエストは、約3,000,000リクエスト、レスポンススピードは、平均で120msぐらいのパフォーマンスになっています。
- 認証(Auth): ユーザーの認証を行います。
- データベース(Database): ユーザー情報やヘルメットのモデル情報などを保存します。
- ストレージ(Storage): ユーザーがアップロードする頭部スキャンデータやその他のファイルを保存します。
- エッジファンクション(Edge Function): 外部API(例: OpenAI、Slack)との連携を担当します。
特徴的な点
非常にシンプルに、Vercel + Supabaseのプラットフォーム上で実現しています。特徴的なのは、サーバを持たない点につきると思っています。開発や運用でSSHするオペレーションを必要としません。
Vercelの採用は、デプロイやロールバックはもちろん、開発中ブランチでの動作確認を一つのプラットフォーム上で出来るので、運用負担が少なく済むのが嬉しいことです。
Supabaseの採用についてのメリットは、我々にとっては非常に大きいものになっています。supabase-jsのライブラリにより、各種APIを利用した関数たちの実装に注力できることは、生産性に大きな影響を与えていると言ってよいでしょう。
テーブル作成を必要とする機能開発をする場合、
- テーブルをつくる
- Row Level Securityを設定する
- フロントエンドアプリに作成したテーブル用の関数群を実装する
というステップで、即時にアプリケーションから利用できる状態に持っていけます。
開発環境もラクができる
Vercel + Supabaseの構成は、個人ごとの開発環境もシンプルに構築できます。 個人開発環境では、supabase-cliを利用して、ローカルにSupabase環境を用意します。
ローカル用のSupabase環境を快適に使い続けるために、日頃からMigrationとseedの手入れが欠かせません。UI上からSupabaseに変更を加えた場合は、supabase db diff -f ....
で、必ずmigrationファイルを作成しましょう。
開発用データも、seed.sqlに必要なデータを用意しておきます。私の場合は、開発途中でseedに入れたほうが良いと思うデータを作ったら、supabase db dump --local --data-only --schema public -f ...
をして、 dumpファイル内のSQLをコピーしてseed.sqlに加えたりしています。
まとめ
プラットフォームをシンプルにすることは、一見、強い技術的制約でもありますが、そのおかげで必要とする技術範囲を絞り込めていることに繋がっています。プラットフォームの特徴を活かし、Webシステムの開発・運用を軽量な状態に保つことは、思っていた以上に機敏な開発に貢献していると実感しました。それにより、3Dモデリングなど、ヘルメット治療に欠かせない技術分野にも大きく挑戦することが出来ていると捉えています。
今後の展望
このシンプルな構成の状態で、グローバル展開を夢見ています。Vercel, Supabaseを複数リージョンに展開した場合、各リージョンへのデプロイ、DB構成の反映、万が一のロールバック・・・などなど、グローバルでのオーケストレーションな課題が想像するだけでも色々とありそうです。
Berryのヘルメットを治療に採用する医療機関が国際的に広がっていくようなときに、プラットフォームがボトルネックにならないように壁打ちをしていきたいですね。
また、Supabaseを更に快適に開発で利用できるように、
- FactoryBot的なテストデータ生成のライブラリを用意してみたい
- RLS(Row Level Security)のポリシーをテストするコードを自動生成、Scaffoldするライブラリを用意してみたい
などを考えています。このへんは、私がRuby/Ruby on Rails経験者なのもあり、それらの良いところをSupabase+TypeScriptの環境に持ち込んでみたい野望です。
応募待ってますよ
幹部候補エンジニア募集中です!一緒に、このアーキテクチャを更に使い倒したい、発展させたい方、大歓迎です。
医療業界での経験や3Dの知見は問いません。Berryの考え方や製品に少しでも興味が持てた方はお気軽に応募下さい。
Discussion