Slide 1

Slide 1 text

スタートアップにおけるソフトウェ アアーキテクチャの運用・維持に ついて 2023.12.13 #pharmaX_tech_collabo

Slide 2

Slide 2 text

(C)PharmaX Inc. 2023 All Rights Reserve 2 自己紹介 尾崎皓一 PharmaX (旧YOJO Technologies) エンジニアリーダ 2人目のエンジニア正社員としてジョイン 最近はあまりコード書いてないですが、 PharmaXの歴史を 知る古参メンバーとして今日は色々お話しできれば! Twitter:@FooOzaki

Slide 3

Slide 3 text

3 (C)PharmaX Inc. 2022 All Rights Reserve プロダクトの簡単な説明

Slide 4

Slide 4 text

(C)PharmaX Inc. 2023 All Rights Reserve 4 「薬局」は医療体験の中でも身近な存在 日用品から処方薬まで。「薬局」は皆さまの日常の近くに存在している ドラックストア 調剤薬局

Slide 5

Slide 5 text

(C)PharmaX Inc. 2023 All Rights Reserve 5 医療体験を横断する2つの事業領域 YOJO事業 未病・予防 治療 薬局DX事業

Slide 6

Slide 6 text

(C)PharmaX Inc. 2023 All Rights Reserve 6 LINE上でのチャットを通じて薬剤師と会話 日々の相談や健康状態に応じて、 漢方・サプリメントを購入 使い慣れたUI上から手軽に細かく体質チェック 薬剤師から漢方・サプリのご提案 そのほか健康相談やオンラインでの処方箋受付 YOJOのオペレーションシステム 1 2 3 患者向けチャットシステム

Slide 7

Slide 7 text

(C)PharmaX Inc. 2023 All Rights Reserve 7 PSチームと患者をつなぐオペレーションシステム 患者とのスムーズなコミュニケーション 薬剤師向け管理画面 チャット形式での診断・相談・購入 患者向けチャットシステム

Slide 8

Slide 8 text

8 (C)PharmaX Inc. 2022 All Rights Reserve バックエンドソフトウェアアーキテクチャの歴史と 課題

Slide 9

Slide 9 text

(C)PharmaX Inc. 2023 All Rights Reserve 9 YOJO サービス開始 ソフトウェアリアーキテクチャ着手 アーキテクチャ設計者退職 リアーキテクチャ完了 Rails x レイヤ化アーキテクチャ 〜エンジニア4名〜5名体制で運用〜 最小チームで開発(薬局DX事業へ異動) 〜エンジニア1名〜2名体制で1年間運用〜 YOJO事業エンジニアチーム再組成 YOJO事業のグロースとリアーキテクチャ 2019年06月 2021年01月 2021年05月 2021年09月 2022年09月 2023年08月 ユーザ数の遷移

Slide 10

Slide 10 text

(C)PharmaX Inc. 2023 All Rights Reserve 10 Ruby On Rails x レイヤ化アーキテクチャ導入 ● 当初はRails標準のMVCで運用 ○ コーディング規約やフレームワーク ルール運用ルールもなく、モデルも 肥大化 ● コアドメインのリモデリングがきっかけに ドメイン駆動設計(DDD)を導入 ● DDDと相性の良いレイヤ化アーキテク チャを選定 ● (選定当時)制約の厳しいアーキテクチャ によりスキル感のばらつき・人の入れ替 わりを吸収したかった

Slide 11

Slide 11 text

(C)PharmaX Inc. 2023 All Rights Reserve 11 YOJO サービス開始 リアーキテクチャ着手 アーキテクチャ設計者退職 リアーキテクチャ完了 Rails x レイヤ化アーキテクチャ 〜エンジニア4名〜5名体制で運用〜 最小チームで開発(薬局DX事業へ異動) 〜エンジニア1名〜2名体制で1年間運用〜 YOJO事業エンジニアチーム再組成 YOJO事業の歴史 2019年06月 2021年01月 2021年05月 2021年09月 2022年09月 2023年08月

Slide 12

Slide 12 text

(C)PharmaX Inc. 2023 All Rights Reserve 12 アーキテクチャ設計・導入初期の問題 ソフトウェアアーキテクチャスタイルの初期定義と共にコアドメインを置き換え ソフトウェアアーキテクチャ定義の議論中に設計者が離脱し、問題が山積み ● 各レイヤーの設計思想や責務に曖昧な部分があり、議論がまとまらない ○ バックグラウンドジョブの呼び出しは?実装はどこに? ○ 通知系の処理はどこから(メール通知、 LINE通知、Slack通知など) ○ xxxのケースを共通利用したい ● メンバーの入れ替わりもあり、コアドメインリプレース時にも解釈が分かれる ○ 各メンバーの解像度も浅く、各々の解釈でコードが書かれる ○ レビュー後の手戻り多発 ○ リプレースの最中に新規コードのリファクタリングが走る

Slide 13

Slide 13 text

(C)PharmaX Inc. 2023 All Rights Reserve 13 YOJO サービス開始 リアーキテクチャ着手 アーキテクチャ設計者退職 リアーキテクチャ完了 Rails x レイヤ化アーキテクチャ 〜エンジニア4名〜5名体制で運用〜 最小チームで開発(薬局DX事業へ異動) 〜エンジニア1名〜2名体制で1年間運用〜 YOJO事業エンジニアチーム再組成 YOJO事業の歴史 2019年06月 2021年01月 2021年05月 2021年09月 2022年09月 2023年08月

Slide 14

Slide 14 text

(C)PharmaX Inc. 2023 All Rights Reserve 14 ソフトウェアアーキテクチャの運用期の問題 人の入れ替わりも多く、徐々に歪みが大きくなっていく ソフトウェア以外の課題も大きくコアメンバーが工数を取れなかった ● インフラリプレース(セキュリティ担保やスケーリング上の限界) ● BI基盤の構築やデータの民主化(複数のグロース施作実行に伴い、素早い PDCAを) ● 薬剤師管理画面フロントのリプレース(薬剤師の生産性が大きな事業課題に) などなど バックエンドソフトウェアは引き続き拡大 ● 違和感があったものの、議論やアーキテクチャのアップデートはできておらず。(振り返ると)場 当たり的な対応も目立つ。大きな問題は出ないがソフトウェアは大きくなっていく

Slide 15

Slide 15 text

15 (C)PharmaX Inc. 2022 All Rights Reserve これまでの2年半で得られた学び

Slide 16

Slide 16 text

(C)PharmaX Inc. 2023 All Rights Reserve 16 アーキテクチャ設計・導入初期の問題 ソフトウェアアーキテクチャスタイルの初期定義と共にコアドメインを置き換え ソフトウェアアーキテクチャ定義の議論中に設計者が離脱し、問題が山積み ● 各レイヤーの設計思想や責務に曖昧な部分があり、議論がまとまらない ○ バックグラウンドジョブの呼び出しは?実装はどこに? ○ 通知系の処理はどこから(メール通知、 LINE通知、Slack通知など) ○ xxxのケースを共通利用したい ● メンバーの入れ替わりもあり、コアドメインリプレース時にも解釈が分かれる ○ 各メンバーの解像度も浅く、各々の解釈でコードが書かれる ○ レビュー後の手戻り多発 ○ リプレースの最中に新規コードのリファクタリングが走る

Slide 17

Slide 17 text

(C)PharmaX Inc. 2023 All Rights Reserve 17 ソフトウェアアーキテクチャの定義のポイント WHY・アーキテクチャの根幹思想を明確に ● 今後の運用・アップデートの拠り所になる ○ アーキテクチャ選定理由、解決したい課題や目標を明確に ○ 基本的な設計原則や哲学 ○ 各レイヤーの導入背景 など 迷わない定義 ● スコープ範囲内での適切な運用、少なくとも既存のスコープ範囲においては新規メンバーでも 判断に迷わない状態を目指すべき ○ DI(依存性注入)・DIP(依存性逆転の原則)などのテクニックを用いてアーキテクチャ制 約をコードで表現 ○ 各レイヤーやディレクトリの責務を明確に ○ 迷ったらアーキテクチャ/ドキュメントのアップデート議論のタイミング アーキテクチャに正解はない。常にアップデートしていくもの

Slide 18

Slide 18 text

(C)PharmaX Inc. 2023 All Rights Reserve 18 ソフトウェアアーキテクチャの運用期の問題 人の入れ替わりも多く、徐々に歪みが大きくなっていく ソフトウェア以外の課題も大きくコアメンバーが工数を取れなかった ● インフラリプレース(セキュリティ担保やスケーリング上の限界) ● BI基盤の構築やデータの民主化(複数のグロース施作実行に伴い、素早い PDCAを) ● 薬剤師管理画面フロントのリプレース(薬剤師の生産性が大きな事業課題に) などなど バックエンドソフトウェアは引き続き拡大 ● 違和感があったものの、議論やアーキテクチャのアップデートはできておらず。(振り返ると)場 当たり的な対応も目立つ。大きな問題は出ないがソフトウェアは大きくなっていく

Slide 19

Slide 19 text

(C)PharmaX Inc. 2023 All Rights Reserve 19 ソフトウェアアーキテクチャ運用のポイント 人の入れ替わりに耐えうる運用を設計を どんなにリソースがなくてもソフトウェアアーキテクチャを維持するロールは必要 属人化しない仕組みの構築 ● サンプルリポジトリを作成する ● アーキテクチャに関するドキュメント ● レビュープロセス、レビュー観点の定義 …etc 属人化排除は余力のあるうちにやっておく。これらも常にアップデートを。 アーキテクチャに正解はない。常にアップデートしていくもの