Medplumとは
Medplumは、医療アプリケーションを迅速に開発、テスト、提供するためのオープンソースの医療開発者プラットフォームです。FHIR (Fast Healthcare Interoperability Resources) 標準に準拠したAPIファーストのアプローチを採用しており、医療データの相互運用性とセキュリティを重視しています。
特徴
-
FHIRネイティブ:
デフォルトでFHIR標準に準拠したデータストレージを使用しており、将来的な医療エコシステムとの連携を容易にします。 -
相互運用性エンジン: 無制限のインターフェースを構築し、他の医療システムや非医療関連サービスと連携することで、相互運用性を最適化できます。
-
HIPAA準拠:
監査ログ、ロールベースのアクセス制御(RBAC)、認証・セッション管理、データ暗号化(転送時はTLS、保存時はAES-256)など、HIPAA要件を満たすための多くの機能を備えています。Business Associate Agreement (BAA) の締結も可能です。 -
開発者フレンドリー:
TypeScriptをベースにしており、ReactコンポーネントライブラリやSDKを提供しています。これにより、開発者は少ない労力で高品質な医療Webアプリを構築できます。 -
豊富な機能:
-
アンケート:
カスタムフォーム、アンケートを簡単に作成し、患者のオンボーディングやプロバイダーのワークフローに活用できます。 -
スケジューリング:
施術者や場所に合わせてカスタマイズされたスケジューリングページを公開し、患者が自分で予約・変更できるようにします。 -
コミュニケーションとメッセージング:
統合されたチャット、リマインダー、メッセージング機能により、患者とのエンゲージメントを促進します。 -
ケアプラン:
ケアプランを構築・インポートし、患者のニーズに合わせてカスタマイズし、患者のアウトカムを追跡できます。 -
投薬管理:
患者の処方薬や補充を追跡し、e-Prescribeサービスとの連携や院内での処方管理が可能です。 -
カルテ:
患者の過去および現在の病歴を統一された直感的なカルテにまとめ、安全に共有できます。 -
請求・支払い:
請求プロバイダーへのデータ送信や、複数の専門会社を通じた請求が可能です。 -
オートメーション(Bots):
サーバレス関数として提供される「Bots」機能により、メッセージの自動ルーティング、患者へのリマインダー、ケアプランの自動生成など、様々なワークフローを自動化できます。
-
アンケート:
-
オープンソース:
コアテクノロジーはオープンソース(Apache 2.0ライセンス)であり、GitHubで自由に利用できます。これにより、ベンダーロックインのリスクがありません。
想定される用途
Medplumは、以下のような医療アプリケーションの構築に適しています。
- 患者ポータル
- プロバイダーアプリケーション
- 遠隔医療プラットフォーム
- 電子カルテ(EHR)システム
- 臨床試験管理システム
- 健康管理アプリ
価格
Medplumは、利用目的に応じて複数のプランを提供しています。
- Free: プロトタイピングや学習向け
- Production: 患者の治療や研究など、本番利用向け
- Premium: メッセージングや連携が多いユースケース向け
- Enterprise: 複雑なワークフロー、連携、データ要件を持つ機関向け
詳細はMedplumの公式ウェブサイトのPricingページで確認できます。HIPAA準拠のプランについては、直接ベンダーに問い合わせる必要があります。
環境構築
※以下の内容はローカルでの実行を想定しています
Docker (Docker compose)をインストール
DockerはUbuntu22.04へのインストールを想定しています。
ダウンロードは以下の記事を参考
リポジトリのクローン
公式リポジトリ
git clone https://github.com/medplum/medplum.git
docker-compose.full-stack.ymlの編集
デフォルトでは、dockerコマンド1つでMedplumを構築できます。しかし、画像(バイナリデータ)を保存することができない状態になっています。そのため、画像を保存できるようにするためには、画像保存用のディレクトリを作成し、docker-compose.full-stack.yml内で指定する必要があります。
そのため、画像用ディレクトリの作成とdocker-compose.full-stack.ymlの編集に分けて説明します。
ディレクトリの作成
ディレクトリの作成箇所は任意で問題ありません。今回では簡単にカレントディレクトリ内にbinary-data
ディレクトリを作成します。
セキュリティ面では良くないのですが、今回はローカル実行を想定しており、権限の関係で問題が起きないように、777で全員に権限を与えています。
mkdir binary-data
chmod 777 binary-data
docker-compose.full-stack.yml
以下が変更部分です。本番環境では、MEDPLUM_SIGNING_KEY
には必ず暗号化された秘密鍵を使用してください。
volumes:
- ./binary-data:/usr/src/medplum/storage
environment:
MEDPLUM_STORAGE: file:/usr/src/medplum/storage
MEDPLUM_BINARY_STORAGE: file:/usr/src/medplum/storage
NEXT_PUBLIC_MEDPLUM_BASE_URL: http://localhost:8103
NEXT_PUBLIC_MEDPLUM_STORAGE_BASE_URL: http://localhost:8103/storage/
MEDPLUM_SIGNING_KEY_ID: 'my-key'
MEDPLUM_SIGNING_KEY: |-
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCk0s+AehVSAkji
YdlzhPwnuFxQFcv8b9AZOR/NSMvJ2jNTu+fuChoK1v6EKOFgyp9GkCKdrvWeA/Rt
ffaggOcAhkRJ0CGUC0BAogRwCFMtErI2tbbCDmP8kwAFiG8gLWfLTkllOurW/ukl
IhFx2UFjYQka+LPd9pWSUX7luGxgfX2GSY4GUhdy9id6og0AjvJYe9IVwljYzCcW
ic5IsslJsSXJ3lU582fZXJRKpyUSjNk2kK66/gcL4wEGUxRfxfuQJxwadUnaWmI0
eWebVN3ersfOPc33CoH1DevRlsEbrdBZDJELyicmkLwKiPZxsnXdKYF/NsrOLMFw
GCq5zOSjAgMBAAECggEADdTA4+OawWh+rDyQzlBVBpJCcNf7Z6IMYOl5wTTAIR6l
2vt0MXX4jHtRHU7+5qvqJLY4qWnCo7FqQ/vjg8F9YP5jYZxNDQrKqAHQhIQ2Upx0
hwHFpdAmVM4THOO/i4Az6wwVPaDtjwASGXMb6qVUBt5gMLq5AUHNeFtNXkKVGZ2b
voEHLm0ywhnYIa+peQNxIELbxjeguGuoLDkHE46Kfldsvw+MuQ6up8/bnHFLVPi9
UieoawxQhYvMjpcNHKm+3AIIHQ5tVH3zHxjpNwbSRgv7bPt4nS3FPQETObjOgyih
IowA8LCwSKhs5/FsPHQXlyL7zvzTnUnmaqmkHctK7QKBgQDLflKEhNCE9xyu/WLy
IxrfFXaILfkRX7AQQEwWtHQ6uF/h/HeY/mIIA+Jen6p1qAe7QZd5ZXP+mdqyyZGO
lkhB0Fctk3wswXOhxnq3c4EMGWfyOzu/d5z92BwMqG6UF0lS4z+j/C4oqch47B6R
1I2rZP4f+Mqv54Cqjh64wbMfbQKBgQDPWii4ZSm5bpP8A5NCZp21GwkC0g1Wdbeh
cbUsRnRRx3tXeGNHA/3xC8DyCl8r7JOUkgh5Jb6/TJF7lPZqu1LITrmPGKYBJeAu
0e9/lXk4QYGC7UvDedjjA9z7xmZ4wU7Oukq6Jl28Lz543dX7+dUGpcLtDyHmbye9
M6qZrdW6TwKBgDSocLQIJmlyBMMnoLYl7WszA6RDuUMMruPVr5rkgXs8gNta2JwH
n9iRIL/5s0OVAsMrOwZYAYctyxEe5gKu0u3s+tI5axWtzb1cPh9AzXETFfnx6Ako
68Aob0G7SDocOIYxdiN6O3ucS9s2xsZX6X0jujsNx21zi7EW685FmZOVAoGBAMmM
sp4iPz9um8vQUdiuVEeRAt5J/Qr4m8kC9P8XcMN5Kowoih+iYrlmGmNq732LlRxK
IpBXvyTFsXg1oJy4fswTsczFQb9F6La5+5nBWjXzfoccT5OvocFwpOHaxQpFpGvP
qwlsd5qPNaNYxkIKYyX2BBZXqjUKAM+pJAADeAeDAoGAd+x7e5rbvd4XYDfoBTbq
NeW4ym/RLaHJQ5BF85sq1e8bvYpM6mZ18YyxJICXkS8TK+JC/20nYg9d/+ZRulo1
n/PlU3RnmqkV04ou2jC930h5MOCPVzxQJnatQSCvHvULru2tDVSmmJAlhI1WO8m9
U19tZ8utbr+Y2/RLumfsCIQ=
-----END PRIVATE KEY-----
MEDPLUM_SIGNING_KEY_PASSPHRASE:
docker-compose-full-stack.ymlの実行
docker compose -f docker-compose-full-stack.yml up -d
あとは以下のリンクをブラウザで検索するとMedplumを確認できます。
http://localhost:3000
利用方法
リンク先に移動すると、以下の画面が表示されるため、左下のRegisterからアカウントの登録を行ってください。(アカウントはローカル実行なので適当に作成して問題ありません。)
登録後にはプロジェクト名を求められますが、これも適当で大丈夫です。
以下が登録完了後の初期画面です。
以下リンク先を元にサンプルデータを読み込んでみることで、利用の仕方がつかめると思います。
最後に
サーバーはAWSを想定しているので、別サーバーで代替するのは難しそうです。GCPなどいくつかには対応しているみたいですが...
Minioを利用してでAWSの代替を考えましたが、アクセスキーの問題で上手くいきませんでした。
私自身サーバーに関する知識が乏しいため対処できていないだけで、専門の方であれば解決できるかもしれません。
これからも少しずつ医療システムに関する記事を投稿していきたいと思います。フォローをよろしくお願いします。