Android アプリの FHIR データを Open Health Stack と Google Cloud で管理する
Abirami Sukumaran
Developer Advocate, Google
Omar Ismail
Software Engineer, Google
※この投稿は米国時間 2023 年 8 月 18 日に、Google Cloud blog に投稿されたものの抄訳です。
McKinsey によれば、2030 年にはクラウド イネーブルメントがヘルスケア企業に 1,000 億ドルから 1,700 億ドルの価値をもたらす可能性があります。つまり、すべてのヘルスケア企業、組織、スタートアップは、ビジネスを強化するためにクラウド プロバイダを採用することで、すでにデジタル トランスフォーメーションを実践しています。また、モバイル医療アプリへの移行により、患者が 24 時間いつでも医療支援を受け、予約をスケジュールし、ヘルスケアにいつでもアクセスすること、そして患者を遠隔でモニタリングし、ワークフローを改善することが簡単になります。デベロッパー、医療機関、関連組織がアクセスしやすく、シンプル、安全かつ堅牢で、モバイルおよび遠隔対応のデジタル医療の変革を可能にするために、この分野のソリューション、ライブラリ、ユースケースに注力することが非常に重要です。
Open Health Stack と Google Cloud Healthcare API は、まさにそれを実現します。このブログでは、OHS と Google Cloud Healthcare API を使用して、安全性、スケーラビリティ、コンプライアンスに優れた革新的な医療ソリューションを構築する方法について説明します。これらの優れたツールの組み合わせにより、医療従事者と開発者は、患者のケアと転帰を大幅に改善できるデータドリブンなソリューションを作成する機能を得られます。Google は、Android-FHIR SDK を使用するモバイルアプリで Open Health Stack と Google Cloud Healthcare API の機能を活用して、ユーザーが Google Cloud で FHIR 患者記録を処理できるようにする予定です。
Open Health Stack(OHS)
Open Health Stack は、医療データを使用したアプリケーションの開発を加速するために設計された、オープンソースのコンポーネントとデベロッパー向けリソースのスイートです。OHS はモジュール型になるように設計されており、スケーラブルで、FHIR や OAuth 2.0 といった業界標準に基づいて構築されています。OHS は、リソースの少ない環境にいる医療従事者が安全でオフライン対応のデータドリブンなソリューションにアクセスできるようにする、優れたコンポーネントのスタックです。OHS の詳細は、こちらをご覧ください。
Google Cloud Healthcare API
Google Cloud Healthcare API は、Google Cloud 上に構築された医療アプリケーションやソリューションの間で標準規格に沿ったデータ交換を簡単に行えるフルマネージド サービスへのエントリー ポイントになります。デベロッパーが FHIR、DICOM、HL7v2 ストアを含むさまざまなソースから医療データにアクセスすることを可能にする一連の API を提供します。また、Dataflow でのストリーミング データ処理、BigQuery でのスケーラブルな分析、Vertex AI での ML を行うための事前構築済みのコネクタにより、Google Cloud でのインテリジェントな分析や ML もサポートします。Google Cloud Healthcare API を使用すると、FHIR データを BigQuery データセットおよび Pub/Sub トピックにエクスポート、ストリーミング、またはプログラムで保存でき、ダウンストリーム アプリケーションでデータを活用できるようになります。この機能を、モバイルアプリで患者の記録を作成し、アプリで入力されたばかりの FHIR ストアデータを含む BigQuery データセットを表示してご紹介します。
Android FHIR SDK
Android FHIR SDK は OHS スイートの重要なコンポーネントであり、Android 上でオフライン対応のモバイルファースト アプリケーションを構築するための一連の Kotlin ライブラリです。これにより、FHIR 仕様を簡単に活用できるようになり、FHIR の問診票をフォームに素早く変換する組み込みのウィジェットや、患者と臨床データをデバイス上で処理できる機能により、デベロッパーの時間と労力を節約できるメリットが得られます。
SDK には次の 3 つのライブラリがあります。
1. 構造化データ キャプチャ(SDC)ライブラリ
このライブラリは、Android 上で医療データを収集、検証、処理するために使用されます。
2. FHIR エンジン ライブラリ
このライブラリにより、FHIR データをローカルおよびサーバーに保存して管理できます。
3. ワークフロー ライブラリ
このライブラリは、Android 上でポイントオブケアの意思決定のサポートと臨床指標のコンピューティングを提供することを意図しています。
この実装では、構造化データ キャプチャ ライブラリを使用して問診票をレンダリングし、FHIR エンジン ライブラリを使用して回答の FHIR コンテンツを保存します。その後、データは Cloud Healthcare API を使って Cloud FHIR ストアにアップロードされますが、アップロードの前に、まず Firebase を使用して自分たちを承認します。以下の図にこれを示します。


Cloud 上の FHIR の患者データ
このセクションでは、プロジェクトの実装の詳細を見ていきます。まず始めに、設計コンポーネントの概要を詳しく見ていきましょう。
Healthcare API の設定
このセクションでは、Google Cloud Healthcare API を有効化し、医療データセットをセットアップして、FHIR データストアを作成します。
Healthcare API を有効化する
プロジェクト リストからプロジェクトを選択します。
API ライブラリで有効にする API を選択します。API を検索する場合は検索フィールドやフィルタを使用します。
[API] ページで、[有効にする] をクリックすると、Healthcare API が有効になります。
Healthcare API サービス アカウントがプロジェクトに追加されます。
Service Account1 への BigQuery 管理者権限の付与
コンソールから PROJECT_ID と PROJECT_NUMBER をメモしておきます。ID については、ドキュメントをご覧ください。
- Cloud Shell を有効にし、以下の gcloud コマンドを実行して権限を付与します。
医療データセットを作成する
1. Cloud Shell で以下のコマンドを実行して、医療データセットを作成します。gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1
2. Google Cloud Healthcare コンソールからも同様のことができます。
a. https://console.cloud.google.com/healthcare/browser に移動します。


b. [データセットを作成] をクリックします。
c. データセット名とリージョンを入力し、[作成] をクリックします。


これで、医療データセットを作成できました。
FHIR データストアを作成する
1. Cloud Shell で、次のコマンドを実行します。
2. または、Healthcare コンソールを使用して同様のことを行うこともできます。
a. Google Cloud Healthcare のブラウザページに移動し、新しく作成されたデータセットをクリックします。


b. [データストアを作成] をクリックします。


c. タイプとして [FHIR] を選択し、データストアの ID を指定します。


d. バージョンとして R4 を選択します。
e. [CREATE] をクリックします。
Cloud Healthcare FHIR データストアを作成できました。クエリや FHIR でビューを作成するなどのオペレーションを記述する場合は、こちらのリポジトリのリファレンス ノートブックをご利用ください。FHIR リソースの品質チェックを行うには、fhir-dbt-analytics の指標を使用します。
BigQuery のセットアップとストリーミング
このプロジェクトでは、FHIR ストアのデータを BigQuery データセットに保存し、BigQuery と BQML の機能を活用してクエリ、プログラム、分析を行えるようにします。
BigQuery データセットを作成する
1. Cloud Shell から以下のコマンドを実行します。bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>
2. または、BigQuery コンソールからも実行できます。
a. BigQuery エクスプローラ セクションに移動し、[Project Name] の横にあるその他アイコン(3 つの点)をクリックして、[Create data set] を選択します。


b. データセット名とリージョンを入力して、[CREATE DATA SET] をクリックします。


BigQuery ストリーミングを作成する
FHIR ストアで FHIR リソースが作成、更新、パッチ適用、または削除されるたびにリソースの変更を BigQuery にエクスポートするには、ストリーミングが必要です。各ストアには、ストリーミング構成を最大 10 個まで含めることができます。
Google Cloud Healthcare コンソールのブラウザページに移動します。
新しく作成したデータセットをクリックします。
新しく作成したデータストアをクリックします。


4. [ADD NEW STREAMING CONFIGURATION] をクリックします。


5. リストから新しく作成した BigQuery データセットを選択し、スキーマタイプを [Analytics V2]、リストからリソースタイプ [Patient] を選択して(リソースタイプはいくつでも選択できます)、[Done] をクリックします。


これで、FHIR ストアのデータを保存し、BigQuery にストリーミングする準備が整いました。
Healthcare API を使用して R4 データを FHIR データストアに書き込む Cloud Functions の関数
Cloud Functions を使うと、サーバーレスな方法でコードを記述してクラウドにデプロイできます。スケーラブル、従量課金制、イベント ドリブンで、オープンソースのテクノロジーと言語をサポートします。その他の特長については、ドキュメントをご覧ください。
ここに記述する関数では、Cloud Healthcare API を使用して、FHIR R4 形式で送られてくるデータを認証し、FHIR データストアに記述します。Cloud Functions の関数を作成するには以下の手順を踏みます。
1. Cloud Functions に移動し、[ファンクションを作成] をクリックします。
2. 名前を「fhir-datastore-proxy」、リージョンを「us-central1」、認証オプションを [Require Authentication] に設定します。
3. [ランタイム、ビルド、接続、セキュリティの設定] を開きます。次の 5 つのランタイム環境変数を追加します。
a. 名前: CLOUD_FUNCTIONS_ENDPOINT | 値: 関数の URL エンドポイント。これは上述の認証ブロックに表示され、次のような形式になります。https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy
b. 名前: PROJECT_ID | 値: ご利用のプロジェクト ID
c. 名前: DATASET_LOCATION | 値: FHIR データストアのロケーション
d. 名前: DATASET_ID | 値: Healthcare データストア ID
e. 名前: FHIR_STORE_ID | 値: FHIR ストア ID
4. [Next] を押して次のページに進み、コードを追加します。
5. インライン エディタが表示されたら、言語として [Java 17] を選択し、HelloHttpFunction.java クラスに移動します。ファイル名を FhirDatastoreProxy.java に変更します。エントリー ポイントの名前を gcfv2.FhirDatastoreProxy に変更することも忘れないでください。
6. リポジトリのコードをコピーして、インライン エディタに貼り付けます。
7. pom.xml ファイルに移動し、リポジトリの pom ファイルをインライン エディタにコピーします。
8. [DEPLOY] をクリックすると、間もなく関数が作成され実行されます。
注:
1. この関数で使用される Cloud Healthcare API は、Healthcare API に送信されるリクエストを認証するために、アプリケーションのデフォルト認証情報を使用します。
2. デプロイされた関数の URL を保存し、Android アプリケーションから呼び出せるようにします。
ここまでで、Android アプリが Healthcare API を個別に使用して BigQuery に FHIR データを書き込むために必要なすべてのピースを作成しました。次に、すべてのピースを接続し、問診票の送信時に API が呼び出されることを確認します。
Android プロジェクトと Firebase のセットアップ
最新バージョンの Android Studio と Android Emulator のセットアップを使用します(実際の Android デバイスを使用することもできます)。準備が整ったら、以下の手順を行います。
1. FHIR アプリサンプルのリポジトリをクローニングします。https://github.com/google/fhir-app-examples
2. Android Studio を開き、[Import Project (Gradle, Eclipse ADT, etc.)] を選択して、cloudfunction
/ フォルダを先ほどダウンロードしたソースコードから選択します。app/google-services.json を開きます。空なので入力する必要があります。
a. ./gradlew signingReport を使用して SHA-1 鍵を生成し、デバッグ バリアントの SHA1 フィールドをメモします。
b. Firebase コンソールを使用して(ステップ 1 と 2 の手順に従います)、Firebase にアプリを追加します。[Debug signing certificate SHA-1] フィールドに前のステップの値を記入します。
c. google-services.json をダウンロードし、Firebase のコンテンツをアプリフォルダ内の空のファイルに置き換えます。
d. Firebase SDK はすでに Gradle のビルドファイルに追加されています。
3. FhirApplication.kt を開き、baseUrl フィールドを Cloud Functions の関数の URL に設定します。
4. Android Studio のツールバーから [Sync your project with Gradle files] を選択します。
これで、実装のセットアップと依存関係の追加が完了しました。
問診票の設定と回答
すでにリポジトリにある問診票の設定を行いましたが、コードを詳しく見ていきます。
1. app/src/main/res\layout/activity_main.xml ファイルの ConstraintLayout 内に FragmentContainerView があることを確認します。
2. QuestionnaireFragment に、フラグメントをレンダリングするために JSON エンコードされた FHIR 問診票があることを確認してください。
a. この場合は、json - "new-patient-registration-paginated.json" を使用してフラグメントのレンダリングを行います。MainActivity.kt、AddPatientFragment.kt、AddPatientViewModel.kt
のファイルをチェックします。b. フラグメント、json、モデルを確認したので、次へ進みます。アプリを実行して、問診票のフィールドに回答を入力してみましょう。
c. 文字列、日付、数値フィールド、その他の条件の検証があることがわかります。
d. アプリを実行し、作成されたレコードを表示してログで確認できます。


フラグメントの使用について詳しくは、こちらをご覧ください。問診票のフラグメントと回答の設定については以上です。
FHIR ストアと BigQuery データセット結果の表示
セットアップとアップデートが完了したので、[Sync Project with Gradle Files] をクリックします。完了したら、次を行います。
Android Emulator 上でアプリを実行し、問診票が読み込まれるのを確認します。
質問に答え、上部の [Submit] をクリックします。
アプリに [Patient is saved] というメッセージが表示されます。
FHIR ストア結果を表示する
Google Cloud Healthcare FHIRViewer コンソールに移動します。


FHIR ストアを選択し、クエリを作成し [RUN SEARCH] を押すと、すぐ下にの検索結果が表示されます。


BigQuery データセット結果を表示する
Google Cloud BigQuery コンソールに移動し、Explorer ペインでこのプロジェクト用に作成したデータセットに移動します。


[Preview] をクリックすると、Healthcare FHIR ストアで見つけたものと同じ番号と結果のデータが BigQuery データセットに表示されます。


クラウド データセットに保存した FHIR データに対して、BigQuery SQL、アナリティクス、ML を実行できるようになりました。
検索とオフライン機能
OHS を搭載した Android FHIR SDK アプリでオフライン機能を確保するには、こちらで説明する実装で有効にする必要がある設計ガイドラインに沿って対応してください。FHIR リソースの検索には、次の 2 つの方法があります。
Google Cloud コンソールの FHIR ビューア
GET または POST リクエストを使用した FHIR 検索メソッド
アプリのデモ
アプリを開発したので、クラウド上で動作させて結果を確認します。


まとめ
このプロジェクトでは、わずか 7 つのステップで、Android アプリを作成し、Cloud Healthcare API を使用して、Cloud Healthcare FHIR ストアと BigQuery データセットで患者の FHIR データを保存し、クエリを実行しました。
Android アプリを設定する
Google Cloud Healthcare API を設定する
医療データセットと FHIR データストアを作成する
BigQuery データセットを作成する
FHIR データストアのデータを BigQuery データセットに書き込むための BigQuery ストリームを構成する
Cloud Functions の関数をデプロイして R4 データを FHIR データストアに書き込む
Android アプリから Cloud Functions の関数をトリガーして問診票の回答を送信する
明確な手順をご紹介しましたので、同様の手順で患者 FHIR の編集のクラウドへの同期を試してみてください。
この記事のレビューを行い、協力してくれた Venkat Subramanian、Justin Tansuwan、Jing Tang、Fred Hersch、Vivian Neilley、Vishwaraj Anand に感謝します。
- Google、デベロッパー アドボケイト Abirami Sukumaran
- Google、ソフトウェア エンジニア Omar Ismail