🥟

今年1年治療用アプリを作っての紹介

2023/12/14に公開

この記事は MICIN Advent Calendar 2023 の 14 日目の記事です。

https://adventar.org/calendars/9595
前回は佐藤さんの、エンジニアの僕が QA ボトルネック解消にこだわる 3 つの理由 でした。


はじめに

株式会社 MICIN でアプリケーションエンジニアを担当している新宮です。
今年1年間、私が治療用のアプリケーションを開発していたので、そのことについて書ける範囲でご紹介したいと思います。

IBS

私が作っていたのは IBS という病気に対する治療用アプリケーションです。

IBS を簡単に説明すると、腸に異常が無いにも拘わらず、下痢や便秘などの腹部症状が数カ月以上繰り返し続く病気です。
IBS 患者さんの多くは、ストレスがかかる状況、例えば、「満員電車に乗る」「会社で重要なプロジェクトのプレゼンを行う」などの場面と症状が強まるタイミングが強く連動している傾向があります。

幼い頃、学校での発表などの時に緊張してお腹が痛くなる経験がありました。今、その治療用アプリに自分が携わっていると思うと、感慨深く感じます。

MICIN では治療用のアプリケーションとして 過敏性腸症候群患者の症状緩和に向けた大学病院との共同研究 の取り組みを行っています。

上記の記事にも紹介されていますが、アプリで大枠の機能は下記になります。

本研究では、過敏性腸症候群で心療内科を受診する患者に、ストレスや不安への耐性をあげるために暴露療法[1] に取り組んでもらいます。患者はアプリを通じて日常生活と症状を記録し、暴露療法に取り組んだ際の、感情や行動の様子もアプリに記録します。記録されたデータはサーバーに送られ、タイムリーに解析され、その解析結果に基づき、取り組んだ暴露療法に対するフィードバック等を患者は得ることができます。これにより、患者が自身の症状をより深く理解し、症状のセルフコントロールを促すことで、アプリによる症状緩和が可能かを検証します。

アプリの構成

今回はRedwoodJSで Web アプリケーションとして IBS の治療用アプリを作成しました。
中々馴染みがないフレームワークだとは思いますが、フロントエンドとバックエンドを一貫して書くことができる GraphQL を利用したフレームワークです。

RedwoodJS のフレームワークのおかげで、開発時のフロントエンドとバックエンドのデータのやり取りで意識することがかなり減るため、純粋な Web アプリケーションを作成するという目的においてとても効率的にアプリケーションを作成できました。

フロントエンド

RedwoodJS のフロントエンドは React で構築されます。
RedwoodJS の Cell というコンポーネントがバックエンドとデータのやり取りを
補助してくれます。
GraphQL を採用しており、アプリのデータのモデリングに理解があれば、
バックエンドのエンドポイントを意識せずに開発が可能です。

それ以外の点では、
基本的な React アプリケーションと同様に書くことができるので入りやすかったです。

バックエンド

prisma と GraphQL が組み合わさることで DB の定義から型定義でき RedwoodJS のフレームワークに則って書くことができます。

今回のプロジェクトでは、tbls を利用していたのですが、
prisma と tbls によってテーブル構成などの管理がとてもわかりやすく開発できた点がとても良かったです。

tbls の有効的な使い方はまじまっちょさんの以下記事を参考にしてください。
https://zenn.dev/micin/articles/2023-12-05-majimaccho-tbls

大変だったこと

治療用アプリを作ることは初めてで、大変だったことが色々ありました。
特に下記が大変でした。

  • アプリが研究に入るまでに一度作り切らなければならない

研究において使われているアプリが頻繁に改修が入ってはいけないという事情があります。
これはアプリに頻繁に改修が入ってしまうと、研究においてどの機能に治療効果があったかを解析しづらくなるためです。
その結果、要件定義の段階で詰め切らないといけないのですが、如何せん誰も作ったことがない治療用のアプリなので仕様を決め切る判断軸がありません。
仕様を確定するのに時間がかかり、後の開発が短くなるなど厳しくなることがありました。

期限を延ばそうにも研究までのタイムスケジュールを遅らせることはできないので、要件を小さくするか、何か外すか、などの優先順位を決めて進める必要があり臨機応変な対応が求められます。

良かったこと

DB の設計をチーム内で最初に考え切ることで開発を通して手戻りなく進めることができました。
レビューなどにおいてもチーム内での認識が合っていたので、円滑に開発ができて良かったです。

インフラチーム(1 人)が作ってくれた便利な仕組みにより、QA 環境や開発環境を必要な時にすぐ作れたので迅速な開発を実現できました。

詳細は、arapower さんの下記の記事を参照ください。
https://zenn.dev/micin/articles/49c8a685828e97

RedwoodJS を始めて使うメンバーが多かったので、モブプロを頻繁に行いました。
コードの書き方や考え方をその場で話し合いながら共有できたので、チームの立ち上がりを早くできました。

毎週開発の振り返りをしていました。
基本的にリモートワークでお互い仕事をしていたので、お互い悩んでいることなどを定期的に発散する場を設けられたのが良かったです。

今回の治療アプリでは、様々な技術的なチャレンジをしましたが、優秀なメンバーに支えられて短い期間の中でもやりきれました。

最後に

医療という分野は時間が掛かるので根気がいりますが、
GraphQL や RedwoodJS などの新しい技術にも取り組んでいるので技術的なチャレンジできます!


MICIN ではメンバーを大募集しています。
「とりあえず話を聞いてみたい」でも大歓迎ですので、お気軽にご応募ください!

https://recruit.micin.jp/

脚注
  1. 不安の原因になる刺激に段階的に触れることで、不安を消していく方法。参考: https://www.e-healthnet.mhlw.go.jp/information/dictionary/heart/yk-006.html ↩︎

株式会社MICIN

Discussion