## プロジェクト概要
今までは医療機関向けのサービスを提供していましたが、toC向け(患者むけ)に価値を届けるアプリとして企画・開発を担当しました。
患者様に薬局から薬の副作用に関して自動的に質問を送る、患者様は質問の答えとともに気になることを書くことによって、厚生労働省から薬局に対して義務化された継続的服薬指導に簡単に対応できるとともに、患者様が薬局をきちんと医療機関として利用できるように促すことが目的となるプロダクトです。
SQLのテーブルは30個ほどあり、画面数はモバイル側が20個ほど、管理画面も9個ほどの大きめのプロダクトです。
## 技術スタック
- Django/ Django Rest Framework/ Zappa(APIサーバー)
- AWS:Aurora (DBサーバー)
- Angular v12 (管理画面)
- Angular v12/ LIFF(LINE FrontEnd Framework) (モバイルアプリ)
- ZXingC++ (QRコードライブラリ)
## 技術スタック選定理由とその効果
Djangoは他言語のフレームワーク経験者(特にRuby on Rails)での利用者もキャッチアップしやすいため、採用しました。
Zappaはスケーリングなどで悩まないようにサーバーレスを用いたいために採用しました。
Angularはセキュリティに問題がないこと、負債を残さないことを念頭に常にバージョンアップしていました。
患者様の端末は、当初iOSのアプリとして開発しましたが、患者様の年齢やリテラシーを考え、
LINE上でのLIFFアプリ(LINEで動くWebView)で実現することにしました。
認証等もLINE IDを使い、LINE メッセージングAPIを使って開発をしました。
LINEを使うことによりユーザー層も増え、現場でも導入しやすさの声が聞けました。
またQRコードリーダーをWebViewで行う必要があり、
ZXingのC++ライブラリを Web Assemblerで動かすことまでやりました。
C++ライブラリを使ったのは、既存のJSで使ったライブラリではパフォーマンスの面や読み取り制度に問題があるため、C++でチューニングできるものを使用しました。
管理画面ではデザイナーがデザインしたHTMLを元にコンポーネント化する作業を主に行いました。
GuardはRxJSがバグを生みやすいため、ここを最大限に生かすためにAngularの仕組みを学び
できるだけGuardやServiceを使い機能実装をして行くようにしました。
管理画面はダイアログが多用されることから、そこの共通化も行い、拡張する部分だけを実装するような仕組みにしました。
DevOpsとして障害対応にもあたり、DataDogで障害を分析し、実際に修正や対応をすることもあります。
実際に障害にあたることにより、カスタマーサポートやカスタマーサクセスの温度感、現場で業務フローで何が問題になるか把握し、次の計画にフィードバックすることが可能となり、チームでプロダクトの価値を高める議論をすることが可能になりました。
## 具体的に開発した機能
- 管理画面全体
- APIをPythonで作って、画面をAngularで書くのを1人で行い、メッセージ送信や設定画面を中心に実装を行う
- 処方箋送信機能・特にLIFFから処方されたらWebNotificationやWebAudioで管理画面で音を流す実装を行う
処方箋送信は、事前にLIFFアプリで処方箋をカメラで撮影して連絡先と一緒に送信し、処方箋を受け取った薬局で薬剤師が調剤の準備をしておいて、患者の待ち時間を減らす機能です。
ここで薬剤師が送られた処方箋に気がつくのがポイントなので、定期的に管理画面でポーリングでAPIを呼び出し追加された処方箋をチェックし、対応する必要があれば音で知らせる機能があります。
ここで「処方箋がX件あります」という通知を音で知らせるためWebAudio機能を使いました。
カメラも送信できる容量にしなければならないので、HTMLのCanvasでLamdaで処理できるサイズに縮小して送信するようにしました。
## スクラムマスターの経験による効果
開発当初はスクラムマスターも兼務していました。
スクラムイベント計画と主催、他スクラムチーム連携、組織開発面でのアクションを行いました。
チーム内では1on1を行い、必要ならば他のスクラムマスターを連携し、問題解決をして開発者体験向上に尽力しました。
特に心理面でのケアは力を入れました。感情面の整理は理屈ではうまくいかないので、相手に配慮する発言をしてもらう、不満を出して問題に昇華してもらうように、話を聴きながらチケットとして課題に登録するようにしました。
振り返りも重視し、KPTもしくはYWTで必ず振り返りをし、ネクストアクションを必ず設定していました。
途中でアウトプットを優先させるため、スクラムマスターを採用し、自分は開発に専念することにしました。
ただスクラムマスターの経験は無駄にはならず、エンジニアだけのミーティングのファシリテーションを積極的に行う、振り返り手法を行うようにしました。
普段のミーティングでの会話・問題解決のための会話の接着剤の役割をするため、MTGでは必ず発言するよう、フォローに徹するなど縁の下の力持ちの役割を果たせるようになりました。
普段の開発では現在ではSlackのhuddleには常に入るようにし、いつでも相談を受けられるようにしてます。