こんにちは!8月に 「全国学生対抗 Qiita × FastDOCTOR Health Tech Hackathon」 に、 チームAIEL として参加しました!
本記事では、私のチームで開発したアプリの紹介、開発の工夫ポイント、そしてハッカソンで得た学びについてレポートしていきます!
どんなハッカソンなのか?
今回私が参加したハッカソン「全国学生対抗 Qiita × FastDOCTOR Health Tech Hackathon」は、全国の学生が医療×テクノロジーの課題に挑むオンライン×オフラインのハイブリット形式のハッカソンです。
テーマは「オンライン診療×AIで、未来の医療を共創しよう!」です。
主催はエンジニア向けプラットフォーム「Qiita」、医療×テックで注目されている「FastDOCTOR」。この2社がタッグを組み、全国から選抜された学生チームが、実社会の医療課題に対して創造力と技術力で新しい解決策を提案する場が用意されました。
私たちチームAIELも、全国の学生チームの一員としてこの挑戦に参加しました。
なぜ参加したのか?
もともとハッカソンに参加するのが趣味で、これまでにも何度かIT系のハッカソンには出たことがありました。
今年から就活も意識し始めたこともあり、少しでもガクチカになるような新しい挑戦がしたいと思っていたときに、この医療系ハッカソンを見つけました。
医療という分野は自分にとって新鮮で、テーマとしても面白そうだったので、思い切って参加を決めました。
制作物紹介
今回私たちのチームが作成したのは、AIアバターを活用したグループ診療のオンライン診療プラットフォームです。
開発の動機
私たちのチームでは、 医師の長時間労働 の問題に着目しました。
現場の医師は一人ひとりの患者に丁寧に対応する必要があり、その積み重ねが大きな負担となっています。
ある統計によると、1人あたりの診察時間は 平均で約8分 とされており、1日あたりに診察する患者数が 約40人 の場合、診療にかかる時間は合計で 5時間以上に のぼります。
さらに、診察後には電子カルテの記入や処方内容の入力といった事務作業も発生します。こうした診療関連の業務は、 1日の労働時間の85%以上 を占めるとも言われており、現場の医師にとっては、非常に大きな負担となっています。
こうした現状に対し、私たちは「個別診療の限界」に注目し、同様の症例を持つ患者をグルーピングして診察する グループ診療 の仕組みを提案しました。
これにより、同一の診断・処方が可能な患者をまとめて対応することで、
診療時間の大幅な短縮と、医師の業務負担軽減を実現できると考えています。
グループ診療の仕組み
つづいて、本アプリケーションの中核となる機能──グループ診療の仕組みについてご紹介します。
Step 1:問診票の作成
まずは、患者がAIアバターとの対話を通じて問診票を作成します。
従来のオンライン診療では、対面と異なり以下のような課題が存在していました。
- ビデオ通話では触診ができず、正確な症状把握が困難
- 患者が症状をうまく伝えられないケースも多い
こうした問題に対し、本アプリではAIとのシームレスな対話を通じて、患者の訴えを正確に引き出します。得られた情報は自動的に構造化され、医師が読み取りやすい問診票として生成されます。
Step 2:グルーピング(類似患者の分類)
次に、作成された問診票のデータから、AIが症状をベクトル化し、類似度に基づいて患者をグループ化します。
- 症状・年齢・既往歴などの特徴をベクトルとして抽出
- コサイン類似度やユークリッド距離などをもとに類似度を算出
- k-NNなどのアルゴリズムでクラスタリングを実施
これによって、例えば「軽度の腹痛+微熱」といった患者が同一グループにまとめられ、共通の処方・診断が可能になります。
グルーピングの指標として、DDXPlus: A New Dataset For Automatic Medical Diagnosis という論文を参考にしました。
https://arxiv.org/abs/2205.09148
Step 3:AIが代表として医師と診察
最後に、各グループの代表AIが医師と対話し、診療を進行します。
この仕組みにおいて、医師は個々の患者と直接やりとりする必要がなく、
グループの代表であるAIが、以下を担います。
- グループ内の共通情報を要約し、医師に提示
- 医師からの診断・処方内容を受け取り、患者に共有
- 医師の発言内容に対し、AIが必要に応じて質問を挟むことで情報を深掘りし、診断の精度を高める
アプリ画面紹介
こちらが、実際に作成したアプリの画面です。すべては紹介しきれませんが、主な画面を簡単にご紹介します。
ホーム画面![]() |
AI会話画面![]() |
問診票作成結果![]() |
AIと医師の会話![]() |
薬局選択画面![]() |
診察完了画面![]() |
技術スタック
今回作成したアプリケーションの技術スタックはこちらです。
今回のハッカソンはわずか二日間という限られた時間の中での開発だったため、普段から使い慣れているReactとPythonを中心に構成しました。
UI開発では、柔軟で効率よくスタイルを調整できるTailwind CSSを活用し、バックエンドでは、Pythonとの親和性が高く、軽量かつ高速にAPIを構築できるFastAPIを選択しました。
担当領域
4人チームで開発を行い、私はユーザー側のWebアプリケーションの設計・実装を担当しました。
中でも特に苦労したのは、類似患者をグルーピングするロジックの実装です。
「同じような症状や背景を持つ患者同士をどうやって効率よくグループ化するか?」という課題に対して、最近学習していた ベクトル検索エンジン の技術が使えるのではないかと考え、患者情報をベクトル化して類似度でグルーピングするアプローチを取り入れました。
結果として、年齢や症状だけでは拾いきれない 定性的な近さをもとにしたグループ診療体験 を実現できたのは、大きな手応えがありました。
もう一つ、今回のプロジェクトで新しい試みとなったのが、3Dアバターを用いた対話インターフェースの実装です。Web上で3Dキャラクターを動かすために、Three.jsを導入しました。初めて扱う技術だったこともあり、特にポーズの切り替えや口パク・表情変化のタイミング制御にはかなり苦戦しました。
ハッカソンを通して
今回、私たちのチームは完全オンラインでの参加となりましたが、非常に貴重な経験を得ることができました。
これまでにもさまざまなハッカソンに参加してきましたが、本格的な医療系アプリを開発するのは初めての挑戦でした。
医療従事者の方々から実際のお話を伺い、現場で起きている課題にどう向き合うべきかをチームで真剣に議論する体験は、とても難しい一方で、大きな学びと刺激を得る機会にもなりました。
また、他の参加チームの皆さんのアイデアの斬新さや技術力の高さにも大いに刺激を受け、「この分野でも自分たちの力が試せる」という実感を得られたことも印象的でした。
今回作成したアプリケーションは、ここで終わらせるのではなく、今後もブラッシュアップを重ねて、より実用的な形へと進化させていきたいと考えています。
最後に、こちらが今回のハッカソンで使用したプレゼン資料です。興味のある方はぜひご覧ください。