COVID-19に対するワクチンは史上例を見ない速度で開発されましたが、同時に安全性を担保する取り組みが続けられています。カケハシのIT開発も同様にデリバリ速度と安全性を求め、最先端のITテクノロジーを利用することで薬局体験の向上を図っています。
この記事では、主にどのようなテクノロジーを利用しているかについて解説します。
前提:開発チームの原則
どのようなプロダクトや組織であっても、テクノロジーの選択には経緯や背景、つまりコンテキストがあります。各開発チームはサービスオーナーシップを持ちプロダクトの全側面を引き受けること、それがカケハシにおける特徴の一つです。
開発チームは複数のロールから構成されており、プロダクトのすべてに第一の責務を持ちます。
機能はもちろん、非機能要件(信頼性、品質、セキュリティ、コストetc...)も含まれ、
要求からデリバリーまでソフトウェアのライフサイクル全般に対して責務を持ち、
サービスの第一のラインとしてリスクテイクと結果に対して責任を負います。
リスクやプロダクト、結果に最も詳しいのは最前線のため、エンジニアリングチーム間の他責思考や調整、管理コストを削減できるほか、顧客やビジネス、価値に密着して貢献できます。
*リスク監視、支援は別のチームが行う
このことから、開発チームは意思決定について大きい裁量を持っています。 開発ガイドラインは存在しますが、one-size-fit-allではなく、チームやプロダクトの成熟度に応じていくつかの選択肢を示すようにしています。またプロフェッショナルとして適切な根拠があるならば、ガイドラインに沿わない選択を尊重します。
サービスオーナーシップを可能にするアーキテクチャとは?
アーキテクチャに原則としてサーバレスを採用することで1人あたりの価値提供力が増大し、サービスオーナーシップを推し進めることが容易になります。
サーバレスが与えるビジネスインパクトの詳細については別稿に譲りますが、サーバレスアーキテクチャを採用することでシステムの複雑度が急減し、少人数ながら高いQCDとセキュリティの担保が可能になります。カケハシのようなサービス指向の強い組織に最適なアーキテクチャです。
プログラミング言語
フロントエンドはTypeScript、バックエンドにはPythonまたはTypeScriptを採用しています。 創業からの経緯により、PythonとTypeScriptを活用しています。 2021年現在のWebプロダクト開発では利用言語での差別化は容易とは言えず、チーム移動やナレッジの蓄積共有を考えると、利用言語数は少数にとどめたいと考えています。
利用しているAWSサービス
多くのプロダクトではAmplify Consoleを活用しており、サーバーレス中心の組織と言えるでしょう。代表的なプロダクトであるMusubiではElastic Beanstalkを利用しているものの、サーバレスへ段階的に移行中です。 データストアはAuroraが主で、サーバレス環境ではRDS Proxyを使いコネクション数問題を予防しています。 データ連携は用途に応じてSNS、SQS、Eventbridge、Step Functions、Kinesis等を使い分けています。
便利な新機能を取り入れるべくアップデートは毎週確認しています。例えば2020年11月後半に登場したMWAA(Amazon Managed Workflows for Apache Airflow)は12月後半には本番環境で稼働させていたり、2021年3月にGAとなったAurora R6gインスタンスも4月前半には全台移行完了させ、RIの購入まで終えたりしています。価値が出せるツールを探すと必然的に新しいものになる面はあります。
医療業界において特徴的な点の1つが、クライアントとのmTLS(双方向TLS)を求められる可能性があることです。現在はAPIの前段にリバースプロキシを設置することで対応しています。 API GatewayでもmTLSが利用できるようになったのですが、ユースケース上機能がやや不足しているため対応を検討中です。
開発を支えるツール
GitHub ActionsによるCI/CDを構築しており、 自動E2Eテストまでこなしているものもあります。 直近ではMablを導入し、E2Eの構築とメンテナンスを効率化させています。
よくある部分としては、
- モニタリング全般はDatadog
- オンコールツールはPagerDuty
- Feature Flag ManagementではLaunchDarkly
- 3rd Partyライブラリのバージョンアップ作業自動化はRenovate
と堅実に環境を整えています。
今後の技術進化の方向
デリバリ速度と安全性、一見矛盾するこの2つを双方高めるため、シフトレフトをより進めたいと考えています。 例えばセキュリティではDAST(実際の環境を用いたテスト)をCI/CD内に取り入れるべく、開発者に優しいツールを検討中です。
参考:開発プロセスや取り組み
この記事ではテクノロジーに焦点を当てているため詳細は省略しますが、 デリバリ速度と安全性を高めるため以下のような取り組みを行っています。
- 障害訓練と障害試験
- 社内テストセッション
- ICS(Incident Command System)ベースのインシデントフローと障害振り返り
- 開発ガイドラインとSDLC、ローンチチェックリスト
- バリューストリームマッピング
- エンジニア用のオンボーディング
- クラウドプラクティショナー取得率向上といった会社全体のITおよびクラウドリテラシー向上
終わりに
新しい感染症には新しいワクチンが必要になるように、 誰も経験したことのない状況で先陣を切るには新しい手段が必要です。 薬局体験の向上を志すカケハシでは、価値貢献を第一として、新しいテクノロジーを速やかに取り入れています。
著者: 高木