OHS と Google Cloud を使用して Android アプリから FHIR データを管理する

1. はじめに

この Codelab では、OHS(Open Health Stack)と Google Cloud Healthcare API を使用して、安全でスケーラブルかつコンプライアンスを遵守した革新的な医療ソリューションを作成する方法を学びます。これらの優れたツールを組み合わせることで、医療従事者と開発者は、患者の治療と転帰を大幅に改善できるデータドリブンなソリューションを構築できるようになります。

Google は、Android-FHIR SDK を使用するモバイルアプリで Open Health Stack と Google Cloud Healthcare API の機能を活用し、ユーザーが Google Cloud で FHIR 患者記録を管理できるようにする予定です。

実装手順を詳しく見ていきましょう。

作成するアプリの概要

この実装では

  • 構造化データ キャプチャ ライブラリを使用して問診票をレンダリングし、FHIR エンジン ライブラリを使用して回答の FHIR コンテンツを保存します。
  • データは、Cloud Healthcare API を使用して Cloud FHIR ストアにアップロードされます。
  • アップロードする前に、まず Firebase を使用して自己認証を行います

8514f90f016ecfc0.png

上の図はフローを表しています。各コンポーネントの詳細については、ブログをご覧ください。

2. 必要なもの

  • ブラウザ(ChromeFirefox など)
  • 課金を有効にした Google Cloud プロジェクト
  • 最新バージョンの Android Studio
  • Android Emulator のセットアップ(実際の Android デバイスも使用できます)

プロジェクトを作成する

  1. Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. 必要な API(BigQuery、Healthcare API)を有効にする

Cloud Shell をアクティブにする

  1. Cloud Shell を使用します。Cloud Shell は Google Cloud で実行されるコマンドライン環境で、bq があらかじめ組み込まれています。

Cloud コンソールで、[Cloud Shell をアクティブにする] をクリックします。

51622c00acec2fa.png

  1. Cloud Shell に接続すると、すでに認証が完了し、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project <YOUR_PROJECT_ID>

gcloud コマンドとその使用方法については、ドキュメントをご覧ください。

3. Healthcare API の設定

  1. Healthcare API が有効になっていることを確認します。Google Cloud コンソールの API ライブラリに移動して Healthcare API を検索し、[有効にする] をクリックします。API が有効になり、Healthcare サービス アカウントをプロジェクトに追加します。
  2. サービス アカウントに BigQuery 管理者権限を付与する Cloud Shell ターミナルで以下の gcloud コマンドを実行して、権限を付与します。
gcloud projects add-iam-policy-binding <<YOUR_PROJECT_ID>> \
--member=serviceAccount:service-<<PROJECT_NUMBER>>@gcp-sa-healthcare.iam.gserviceaccount.com  --role=roles/bigquery.admin

注: PROJECT_ID と PROJECT_NUMBER はコンソールで確認できます。ID についてはドキュメントをご覧ください。

医療データセットを作成する

Cloud Shell で、次のコマンドを実行して Healthcare データセットを作成します。

gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1

ロケーションをリージョンに設定します。

FHIR データストアを作成する

Cloud Shell で、次のコマンドを実行して FHIR データストアを作成します。

gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
  --dataset=<<DATASET_ID>> --location=us-central1 --version=r4

ロケーションをリージョンに設定します。

4. BigQuery の設定とストリーミング

ここでは、FHIR ストアのデータを BigQuery データセットに保存し、BigQuery と BQML の機能を活用してクエリ、プログラム、分析を行えるようにする方法について説明します。

BigQuery データセットを作成する

BigQuery データセットはテーブルのコレクションです。データセット内のすべてのテーブルは、同じデータ ロケーションに保存されます。カスタム アクセス制御を接続して、データセットとそのテーブルへのアクセスを制限することもできます。

Cloud Shell で、次のコマンドを実行します。

bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>

ロケーションをリージョンに設定します。

BigQuery ストリーミングを作成する

FHIR ストアで FHIR リソースを作成、更新、パッチ適用、または削除するたびに、リソースの変更を BigQuery にエクスポートするにはストリーミングが必要です。各ストアには、ストリーミング設定を最大 10 個まで含めることができます。

  1. Google Cloud Healthcare コンソールの [ブラウザ] ページに移動します。
  2. 新しく作成したデータセットをクリックします。
  3. 新しく作成したデータストア 7acaa364337086aa.png をクリックします。
  4. [ADD NEW STREAMING CONFIGURATION] をクリックします。

caa2cc881d3406aa.png

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

1e038c694fcca1ef.png

以上です。FHIR ストアのデータを保存し、BigQuery にストリーミングする準備が整いました。

5. Cloud Functions(Healthcare API を使用して FHIR データストアに R4 データを書き込む)

Cloud Functions を使用すると、サーバーレスでコードを記述してクラウドにデプロイできます。スケーラブル、従量課金制、イベント ドリブンで、オープンソースのテクノロジーと言語をサポートします。その他の機能については、ドキュメントをご覧ください。

これから記述する関数は、Cloud Healthcare API を使用して、FHIR R4 形式のデータを認証し、FHIR データストアに書き込むことを目的としています。Cloud Functions の関数を作成するには:

  1. Cloud Functions に移動し、[関数を作成] をクリックします。
  2. 名前を fhir-datastore-proxy、リージョンを us-central1、認証オプションを [Require Authentication] に設定します。
  3. [ランタイム、ビルド、接続、セキュリティの設定] を開きます。5 つのランタイム環境変数を追加します。

名前: CLOUD_FUNCTIONS_ENDPOINT |値: 関数の URL エンドポイント。これは上記の認証ブロックに表示され、https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy という形式になります。

名前: PROJECT_ID |値: プロジェクト ID

名前: DATASET_LOCATION |値: FHIR データストアの場所

名前: DATASET_ID |値:Healthcare Datastore ID

名前: FHIR_STORE_ID |値: FHIR ストア ID

  1. [次へ] を押して次のページに進み、コードを追加します。
  2. インライン エディタが表示されたら、言語として [Java 17] を選択し、HelloHttpFunction.java クラスに移動します。ファイル名を FhirDatastoreProxy.java に変更します。忘れずにエントリ ポイントの名前を gcfv2.FhirDatastoreProxy に変更します。
  3. リポジトリからコードをコピーして、インライン エディタに貼り付けます
  4. pom.xml ファイルに移動し、リポジトリの pom ファイルをインライン エディタにコピーします。
  5. [デプロイ] をクリックすると、まもなく関数が作成され実行されます

注:

  1. この関数で使用される Cloud Healthcare API は、Healthcare API に送信されるリクエストを認証するためにアプリケーションのデフォルト認証情報を使用します。
  2. デプロイされた関数の URL を保存して、Android アプリケーションから呼び出せるようにします。ここまでは、Healthcare API を個別に使用して Android アプリが FHIR データを BigQuery に書き込むために必要なすべてのピースを作成しました。次に、すべてのピースが接続され、アンケートの送信時に API が呼び出されることを確認します。

6. Android プロジェクトと Firebase の設定

最新バージョンの Android Studio と Android Emulator を使用します(Android の実機を使用することもできます)。準備が整ったら、次の手順を行います。

  1. FHIR アプリサンプル リポジトリのクローンを作成します(https://github.com/google/fhir-app-examples)。
  2. Android Studio を開き、[Import Project](Gradle、Eclipse ADT など)を選択して、先ほどダウンロードしたソースコードから cloudfunction/ フォルダを選択します。app/google-services.json を開きます。空です。入力する必要があります。

./gradlew signingReport を使用して SHA-1 鍵を生成し、デバッグ バリアントの SHA1 フィールドをメモします。

Firebase コンソールを使用して(ステップ 1 と 2 に沿って)Firebase にアプリを追加します。[デバッグ用の署名証明書 SHA-1] でフィールドに、前のステップの値を入力します

google-services.json をダウンロードし、Firebase のコンテンツを app フォルダ内の空のファイルに置き換えます。

Firebase SDK はすでに Gradle のビルドファイルに追加されている

  1. FhirApplication.kt を開き、baseUrl フィールドを Cloud Functions の関数の URL に設定します。
  2. [Sync your project with Gradle files] を選択します。Android Studio のツールバーで

これで、実装のセットアップと依存関係の追加が完了しました。

7. アンケートの設定と回答

すでにリポジトリにある問診票の設定を行いましたが、コードを詳しく見ていきます。

  1. app/src/main/res/layout/activity_main.xml ファイルの ConstraintLayout 内に FragmentContainerView があることを確認してください。
  2. QuestionnaireFragment に、フラグメントをレンダリングするための JSON エンコードされた FHIR 問診票があることを確認してください

今回は、json - "new-patient-registration-paginated.json&quot;使用してフラグメントをレンダリングします。ファイル MainActivity.ktAddPatientFragment.ktAddPatientViewModel.kt を確認します。

フラグメント、json、モデルを確認できたので、アプリを実行してアンケートの各フィールドに回答を入力してみましょう。

文字列、日付、数値フィールドなどの条件が検証されます。

アプリを実行し、作成されたレコードをログで確認できます

9e1bb440074f1a88.png

フラグメントの使用について詳しくは、こちらをご覧ください。アンケートのフラグメントと回答の設定については以上です。

8. FHIRStore と BigQuery データセット結果の表示

セットアップと更新が完了したので、[Sync Project with Gradle Files] をクリックします。完了したら、

  1. Android Emulator でアプリを実行し、質問票が読み込まれるのを確認します。
  2. 質問に回答し、上部の [送信] をクリックします。
  3. 「Patient is saved」というメッセージが表示されます。アプリ

FHIR ストア結果を表示する

Google Cloud Healthcare FHIRViewer コンソールに移動します。

1064f03b4e1e45f5.png

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

BigQuery データセット結果を表示する

Google Cloud BigQuery コンソールに移動し、[エクスプローラ] ペインで、このプロジェクト用に作成したデータセットに移動します。

7c483ec6d578b8cd.png

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

faafeae4a837a41c.png

これで、クラウド データセットに保存した FHIR データに対して、BigQuery SQL、アナリティクス、ML を実行できるようになりました。

9. 検索とオフラインの機能

OHS を搭載した Android FHIR SDK アプリでオフライン機能を確保するには、ここで説明する実装で有効にする必要がある設計ガイドラインに従ってください。

FHIR リソースの検索には、次の 2 つの方法があります。

  1. Google Cloud コンソールの FHIR 閲覧者
  2. GET または POST リクエストを使用した FHIR 検索メソッド

10. アプリのデモ

アプリの開発が完了したので、アプリを動かしてクラウドで結果を確認してみましょう。

11. クリーンアップ

この投稿で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。
  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

12. 完了

これで、このプロジェクトでは、わずか 7 つのステップで、Android アプリケーションを作成し、Cloud Healthcare API を使用して、Cloud Healthcare FHIR ストアと BigQuery データセットに患者 FHIR データを保存し、クエリを実行しました。

  1. Android アプリを設定する
  2. Google Cloud Healthcare API を設定する
  3. 作成された医療データセットと FHIR データストア
  4. BigQuery データセットを作成しました
  5. FHIR データストア データを BigQuery データセットに書き込むように BigQuery ストリームを構成する
  6. R4 データを FHIR データストアに書き込む Cloud Functions の関数をデプロイ
  7. アンケートの回答の送信時に Android アプリから Cloud Functions の関数をトリガー

手順がわかったので、患者の FHIR 編集のクラウドへの同期について、同じ手順を試してみてください。