ドクターズプライム Official Blog

「救急車たらい回しをゼロにする」ドクターズプライムの公式ブログです

ドクターズプライムOfficial Blog

ドクターズプライムのプロダクト開発チームは何を開発しているのか

こんにちは、ドクターズプライムでソフトウェアエンジニアをやっている id:oinume です。今日はドクターズプライムで行っているプロダクト開発がどのようなものかを知ってもらうために、現在行っているリアーキテクチャについて説明したいと思います。

自己紹介

まず簡単に自己紹介します。ネット上では oinume で通していますが、生沼という名前です。主にバックエンド領域を中心にやってきていて、前職ではメルペイで後払いの機能のmicroserviceの開発をやっていました。ドクターズプライム入社後はバックエンドをメインで担当しつつ、フロントエンドや情シス、セキュリティにも取り組んでいます。

なにを作っているのか

弊社が提供しているプロダクトは「救急車の受け入れを断らない医師と、救急車を受け入れたい病院をつなぐマッチングプラットフォーム」です。大きく分けると病院向けと医師向けとに2つのプロダクトがあり、以下のような機能を提供しています。

  • 病院向けプロダクト:当直の求人情報を掲載して、医師からの応募や問い合わせに応えることができる。
  • 医師向けプロダクト:当直などの求人情報を閲覧して応募することができる。

f:id:oinume:20210820144805p:plain
医師向けプロダクトの画面

プロダクトが解決したいペインについて、より深く知りたい方はこちらのスライドを見てもらえればと思います。

プロダクト開発の歴史

このようなプロダクトを提供しているわけですが、もともとはMVP(Minimum Viable Product)として@kyosu_keさんが作ったものをベースに進化を遂げています。大きく分けると3つの時代があるので、それぞれ詳しく見ていきましょう。

MVP期(2016年8月〜)

kyosukeさんにより、MVPとして顧客の要望に応えるためGoogle Forms, Google Spreadsheet, Google Apps Script(GAS)で求人情報や医師の応募データを管理していました。簡潔に説明すると以下のような使い分けになっています。

  • Google Forms: 病院の担当者の方が募集要項を入力したり、医師の方が求人に応募するUI
  • Google Spreadsheet: フォームから入力された求人データや医師の応募データなどを保存するデータベース
    • アクセス権限を絞って必要な人にのみ共有されている
  • GAS: 応募が発生した時などにメール通知を行うプログラムやGoogle Formsではまかなえない複雑なフォームの生成・処理を行う

簡単なアーキテクチャ図を描くとこんな感じになっています。

f:id:drsprime:20210826182125p:plain
MVP期のアーキテクチャ

こちらの記事に当時のエッセンスが凝縮されているので、興味のある方はぜひ読んでみてください。

aboutproduct.jp

フロントエンド立ち上げ期(2018年5月〜)

上記のMVP時代から「Google FormsではなくちゃんとしたUIを作っていこう」という流れで、副業メンバーによるフロントエンドの開発が始まりました。このフェーズでは以下のような構成で段階的にGoogle Formsからの脱却が図られています。

  • AWS Lambdaを経由してSpreadsheetへのアクセスをするAPIをフロントエンド向けに作成
  • TypeScript + ReactのフロントエンドからAPIを呼び出してUIを作成

以下のように、アーキテクチャはMVP期より少し複雑な構成になりました。

f:id:drsprime:20210826182130p:plain
フロントエンド立ち上げ期のアーキテクチャ

バックエンド立ち上げ期(2018年6月〜)

「Spreadsheetをデータベースにするのはそろそろ限界、、、マジもう無理、、、」ということで、バックエンド側の強化も副業メンバーを中心に始まりました。こちらはプログラミング言語としてGoを選択し、以下のような構成になっています。

  • Go + Google App Engine(GAE) + Cloud Datastoreで構成されたバックエンドでAPIを実装
  • フロントエンドからAPIを呼び出す
  • SpreadsheetのデータをDatastoreに一定間隔で同期してデータの整合性をなんとか保つ

なお、全てを一気に作り変えることは不可能だったため、フロントエンドやバックエンドの立ち上げと移行はきれいに進んだわけではありません。過渡期では以下のアーキテクチャ図のように、様々な技術スタックが混在するカオスな状況になっていました。

f:id:drsprime:20210826182248p:plain
バックエンド立ち上げ期のアーキテクチャ

Spreadsheet完全脱却期(👈 イマココ)

2020年10月より、副業メンバーに加えてフルタイムのエンジニア2名が加入し、Spreadsheetからの完全脱却を図るプロジェクトが発足しました。抽象的な表現ですが、やっていることは下記になります。

  • データの書き込みはGoのAPIサーバーを経由してDatastoreとSpreadsheetに2重書き込みを行う
  • Spreadsheetを参照している箇所をなくして、Datastoreから参照するようにロジックを直す
  • Spreadsheetへの参照がなくなったら、2重書き込みをやめてDatastoreのみに書き込む

この完全脱却を計画した時点でデータベースとして使用されていたSpreadsheetの数は15以上あり、2021年8月現在で12個の移行が完了しています。また、現在ではフルタイムのエンジニアが5名と増えたことにより、このSpreadsheetからの完全脱却が破竹の勢いで進められています。

まとめ

ドクターズプライムで開発しているプロダクトがどのようなものか、そして今開発チームは何をやっているのかが少しでも伝わったでしょうか?次回作では、Spreadsheet完全脱却プロジェクトについて深掘りした内容をお届けしたいと思います。ご期待ください!

採用強化中です!

ドクターズプライムではソフトウェアエンジニア含めて様々な職種で採用強化中です!気になることがあればカジュアル面談でお話しすることもできるので、以下のページの「まずは話を聞いてみる」から申し込んで頂くか、TwitterのDMでご連絡頂ければと思います!

careers.drsprime.com