構造化データ キャプチャ ライブラリを使用して健康に関するデータをキャプチャして処理する

1. 始める前に

作成するアプリの概要

この Codelab では、構造化データ キャプチャ ライブラリを使用して Android アプリを作成する方法を学びます。アプリは、構造化データ キャプチャ ライブラリを使用して FHIR 問診票と回答をレンダリングして処理します。

学習内容

  • 構造化データ キャプチャ ライブラリを Android アプリケーションに統合する方法
  • アンケートの表示方法
  • QuestionnaireResponse として回答を取得する方法
  • QuestionnaireResponse から FHIR リソースを抽出する方法

必要なもの

この Codelab では、構造化データ キャプチャ ライブラリを中心に説明します。関連のない概念とコードブロックについては軽く触れるにとどめ、そのままコピーして貼り付けられるようにしています。Android アプリを初めて作成する場合は、まず初めてのアプリを作成することから始めます。

2. セットアップする

コードをダウンロードする

この Codelab のコードをダウンロードするには、Android FHIR SDK リポジトリのクローンを作成します。git clone https://github.com/google/android-fhir.git

この Codelab のスターター プロジェクトは codelabs/datacapture にあります。

Android Studio にアプリをインポートする

まず、スターター アプリを Android Studio にインポートしましょう。

Android Studio を開き、[Import Project (Gradle, Eclipse ADT, etc.)] を選択して、codelabs/datacapture フォルダを先ほどダウンロードしたソースコードから選択します。

Android Studio のスタート画面

スターター アプリを実行する

Android Studio にプロジェクトをインポートしたので、アプリを初めて実行する準備ができました。

USB 経由で Android デバイスをホストに接続するか、Android Studio エミュレータを起動して、Android Studio ツールバーの [実行]([実行] ボタン)をクリックします。

Hello World アプリ

ご覧のとおり、まだ何もありません。さっそくアプリにアンケートを表示してみましょう。

3. プロジェクトに構造化データ キャプチャ ライブラリを追加する

構造化データ キャプチャ ライブラリの依存関係を追加する

Structured Data Capture Library の依存関係により、アプリに Structured Data Capture Library を統合できます。プロジェクトの app/build.gradle.kts ファイルの末尾に次の行を追加します。

dependencies {
    // ...

    implementation("com.google.android.fhir:data-capture:1.2.0")
    implementation("androidx.fragment:fragment-ktx:1.6.0")
}

プロジェクトを Gradle ファイルと同期する

すべての依存関係がアプリで使用可能であることを確認するには、この時点でプロジェクトを Gradle ファイルと同期する必要があります。

Android Studio のツールバーから [Sync Project with Gradle Files](Gradle 同期ボタン)を選択します。アプリをもう一度実行して、依存関係が正しく機能していることを確認することもできます。

4. アンケートを表示する

このステップでは、スターター アプリに、FragmentContainerView でアンケートをレンダリングする機能を追加します。

この過程で、Android Studio から必要なインポートを追加するよう求められます。

  • androidx.core.os.bundleOf
  • androidx.fragment.app.add
  • androidx.fragment.app.commit
  • android.util.Log
  • com.google.android.fhir.datacapture.QuestionnaireFragment

ステップ 1: FragmentContainerView を追加する

アプリのレイアウトに FragmentContainerView を追加します。ここに、後で作成する QuestionnaireFragment が表示されます。

  1. activity_main.xml を開きます([res] > [layout] > [activity_main.xml])。
  2. Layout Editor の右上で、[Code]、[Split]、[Design] の各ビューを選択できるようになっています。
  3. コードビューを選択します。レイアウト ビューのオプション
  4. TextView は不要なため、削除します。<TextView から終了タグの /> まで、すべての内容を削除してください。
  5. ConstraintLayout の中に FragmentContainerView を追加します。activity_main.xml ファイルは次のようになります。
    <?xml version="1.0" encoding="utf-8" ?>
    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
    >
    
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

ステップ 2: QuestionnaireFragment を構成する

QuestionnaireFragment をレンダリングするには、JSON エンコードされた FHIR 問診票が必要です。アンケートは小さい(512 KB 未満)ため、フラグメントの作成に使用される引数の BundleString として含めます。パフォーマンス上の理由から、大規模なアンケートは URI として提供する必要があります。

必要に応じて questionnaire.json ファイルを確認できますが、構造化データ キャプチャ ライブラリのメリットの 1 つは、FHIR アンケートの構造(または FHIR に関する情報)を知らなくても、アンケートをレンダリングできることです。このファイルについては、この Codelab の後半で詳しく説明します。

ビルダーを使用して QuestionnaireFragment を作成し、セッター関数を使用してアンケートを設定します。レイアウト コンテナ内で QuestionnaireFragment を表示するには、FragmentManager を使用して FragmentTransaction を作成します。

MainActivity.kt を開き、次のコードを MainActivity クラスに追加します。

// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")

val questionnaireFragment =
  QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()

ステップ 3: QuestionnaireFragment を FragmentContainerView に追加する

レイアウト コンテナ内で QuestionnaireFragment を表示するには、FragmentManager を使用して FragmentTransaction を作成します。FragmentManager は、以前に作成した questionnaireParams を使用してインスタンス化を処理します。

MainActivity クラスに次のコードを追加します。

// Step 3: Add the QuestionnaireFragment to the FragmentContainerView
if (savedInstanceState == null) {
  supportFragmentManager.commit {
    setReorderingAllowed(true)
    add(R.id.fragment_container_view, questionnaireFragment)
  }
}
// Submit button callback
supportFragmentManager.setFragmentResultListener(
  QuestionnaireFragment.SUBMIT_REQUEST_KEY,
  this,
) { _, _ ->
  submitQuestionnaire()
}

詳しくは、フラグメントの使用方法をご覧ください。

Android Studio のツールバーで [実行]([実行] ボタン)をクリックして、Codelab を実行しましょう。次のように表示されます。

エミュレータでレンダリングされたアンケート

アンケートを操作して、回答を入力してみます。ブール値、テキスト、日付など、いくつかの異なる回答ウィジェットが使用されています。これらは、元の FHIR アンケートの基盤となる型に基づいて自動的にレンダリングされました。

技術的には、アンケートを表示するために必要なのはこれだけです。おめでとうございます!

ユーザーが入力した回答を確認できない場合、アンケートはあまり役に立ちません。アンケート回答を取得する次のステップに進みましょう。

5. 質問票の回答を取得する

前の手順では、アプリで FHIR アンケートをレンダリングしました。

このセクションでは、アンケートの回答を QuestionnaireResponse として取得します。

submitQuestionnaire() メソッドを見つけて、次のコードを追加します。

// Get a questionnaire response
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container_view)
        as QuestionnaireFragment
val questionnaireResponse = fragment.getQuestionnaireResponse()

// Print the response to the log
val jsonParser = FhirContext.forCached(FhirVersionEnum.R4).newJsonParser()
val questionnaireResponseString =
    jsonParser.encodeResourceToString(questionnaireResponse)
Log.d("response", questionnaireResponseString)

アンケートの回答を取得するには、先ほど作成したアンケート フラグメントを取得し、getQuestionnaireResponse() メソッドを使用します。これにより、HAPI FHIR QuestionnaireResponse が返されます。これは、直接使用することも、Android FHIR SDK の他の部分と組み合わせて使用することもできます。この Codelab では、他の HAPI FHIR ライブラリを使用して JSON 文字列に変換し、ログに表示します。

アプリを再度実行して、最新の変更内容で再ビルドします。実行されたら、アンケートに情報を入力して [送信] をタップします。ログには、QuestionnaireResponse を JSON として含むメッセージが表示されます。

D/response: {"resourceType":"QuestionnaireResponse","item":[{"linkId":"PR","text":"Patient information","item":[{"linkId":"PR-name","text":"Name","item":[{"linkId":"PR-name-given","text":"First Name","answer":[{"valueString":"Dani"}]},{"linkId":"PR-name-family","text":"Family Name","answer":[{"valueString":"Lee"}]}]},{"linkId":"PR-birthdate","text":"Date of Birth","answer":[{"valueDate":"1990-02-14"}]},{"linkId":"PR-id","text":"Identifying information","item":[{"linkId":"PR-name-id-url"},{"linkId":"PR-name-id","text":"Patient Id","answer":[{"valueString":"12345"}]}]}]}]}

6. QuestionnaireResponse から FHIR リソースを抽出する

スターター プロジェクトに含まれているアンケートは、シンプルな患者登録フロー用です。最終的には、アンケートの回答に基づいて FHIR Patient リソースを作成することをおすすめします。アンケートの回答から FHIR リソースへのこの変換は、データ抽出と呼ばれます。これを行うには、構造化データ キャプチャ ライブラリの ResourceMapper クラスを使用します。

データ抽出を行うには、データ抽出の実行方法に関する情報を含むようにアンケートを作成する必要があります。幸いなことに、サンプル アンケートは定義ベースの抽出用にすでに設定されています。

submitQuestionnaire() メソッドを見つけて、次のコードを追加します。

lifecycleScope.launch {
  val questionnaire =
    jsonParser.parseResource(questionnaireJsonString) as Questionnaire
  val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
  Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}

ResourceMapper.extract() には、HAPI FHIR 問診票が必要です。これは、先ほどの問診票 JSON 文字列を解析して作成できます。また、QuestionnaireResponse も必要です。これは先ほど取得済みです。この関数は、1 つ以上の抽出されたリソース(この場合は単一の Patient リソース)を含む HAPI FHIR トランザクション Bundle を返します。

アプリを再度実行して、最新の変更内容で再ビルドします。実行されたら、情報を入力して [送信] をタップします。ログに、抽出された FHIR Bundle の JSON 表現を含むメッセージ extraction result が表示されます。

D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}

7. 完了

構造化データ キャプチャ ライブラリを使用して、アプリで FHIR 問診票と回答を処理している。

  • アンケートを表示する
  • アンケートの回答を取得する
  • QuestionnaireResponse から FHIR リソースを抽出する

これで、起動して実行できるようになります。

アプリケーション全体で FHIR リソースをより多くの方法で操作したい場合は、次の手順に進んでください。Android FHIR SDK の FHIR エンジン ライブラリで、アプリケーションで FHIR リソースをローカルに保存して管理し、リモート FHIR サーバーとデータを同期する方法を確認してください。

学習した内容

  • Android アプリに Structured Data Capture Library を追加する方法
  • QuestionnaireFragmentResourceMapper を使用して FHIR アンケートを操作する方法

次のステップ

  • 構造化データ キャプチャ ライブラリのドキュメントを読む
  • レンダリングされたアンケートのデザインをカスタマイズする
  • 独自の Android アプリで構造化データ キャプチャ ライブラリを適用する

詳細