Apple Watch の心電図アプリの計測データを外部に取り出す

iPhone の準備が整ったところで Apple Watch も導入。
6 シリーズの Nike モデルにした。


アルミスペースグレイの筐体に黒系のバンドにしたので「ちょっと重くなるかな?」と心配していたが、あまり強い自己主張なくすっきりとまとまっていてこれはこれでアリだと思うようになった。

ついでで書いておくとバンドはかなり容易に変えられるし、文字盤なども画面操作一発で変更できる。だから、購入アイテムの選択肢に迷ったとき、まず決めるべきは、シリーズ(モデル)筐体の材質と大きさと色だ。

 

それでは、本題。

私の興味の中心はやはり心電図アプリなんだが、その意義とか測定方法などは色々な人が様々なやり方で情報発信しているので、ここでは割愛。

Apple Watch で取得したデータは iPhone に送られるのだが、そのデータの取り出し方に関して書く。

手軽にできる方法は次の二通り。

PDF で書き出す

これはよく知られた方法。
ヘルスケア→心電図(ECG)→ PDF に書き出したいデータを選択
で、この画面になる。

「医師に渡すためにPDFを書き出す」をタップして適当なプリンタから打ち出すか、AirDrop などで Mac に PDF ファイルとして送りあとはファイルとして保管すればいい。

気の利いた医療者ならば、医療システム(電子カルテやPACSと呼ばれる画像サーバなど)のどこかに保管してくれる(はず)だ。

電子カルテにこのように貼ってもらえれば、心電図アプリも本望だろう。

 

PACS や画像ビューアなどにも「画像として」取り込むことはできる(後述するように「データとして」取り込む方がメリット大きいんですが)。

ちなみに PHR (Personal Health Record) という概念があり、今後は日本でも自分の医療データは自分で管理するという時代になると言われている。
今のところ、興味深い試みはあるもののなかなか実現できそうな感じがないんですが・・・。

ヘルスケアデータ全体を zip ファイルで取り出す

これはあまり知られていないかもしれないが、iPhone 内に記録されているヘルスケア系のデータを完全な形ですべて取ってこれるので、以下の方法は有用。

ヘルスケアアイコンをタップして概要のページが出てきたら、画面右上のユーザーアイコンをタップする。


すると次の画面に遷移するので、「すべてのヘルスケアデータを書き出す」を選べばよい。


データをどこに送るか iPhone が訊いてくるので、適当に選ぶ。
たぶん、一番簡単なのは AirDrop で Mac に送ること。
送受信が上手くいけば、Mac の「ダウンロード」フォルダ内に「書き出したデータ.zip」が送られているはずなので、これを解凍する。
apple_health_export フォルダがあるので、これを「書類」あたりに配置しておけばいいでしょう。
なお、心電図データは apple_health_export -> electrocardiograms フォルダ内に CSV ファイル形式で記録されています。
この方法のいい点は、(おそらく)生データが取得できるところ。

「データとして」情報が取って来れると2次的な利用もしやすくなる。
実は apple watch は心電図アプリを使って計測を始めると、生体からの電気シグナルを 1 秒間におおよそ 512 回程度サンプリングしており、そのデータを直接加工することができる。
例えば、


などというデータがあった場合、(この場合は)「S波が歪んでいるのでもうちょっと詳しくみてみたい」ということがある。
これは、適当なプログラムを組めば、以下のように実現できる。
(python という言語を使用。コードはここを参考にさせてもらった)

1550 〜 1650 回のサンプリング値のみを表示させているので、波形形状がより詳細に描かれているのがわかると思う。

もっとマニアックな方法

実は、上記二つ以外にもやり方はあるのだが、プログラミングまで踏み込まないと実現できないのでここでは説明は省略。

 

air-h-128k-il

 

SIM なしでも iPhone 自体はアクチベートできるし、eSIM のみでも回線は開通できる -楽天モバイルを例に-

スマートフォンはアンドロイドを使っていたのだが、アップルにデベロッパー登録している身としては iPhone くらいは持ってないとあかんかなと思い、遂に数年ぶりに iPhone 導入。
サブ機として利用するので回線は楽天モバイルにした(現在、絶賛1年間無料キャンペーン中)。
世間的には ahamo や povo が話題をよんでいるのだが、
・データ通信なんて3Gも使わない
・都心部のみで通話できればいい
という人にはけっこう使い勝手のいい料金体系になっている。


なお、今回は設定を若干楽にするため SIM も物理 SIM はやめて eSIM というカメラで QR コードで読み取って設定するやつにした。

ところで、ネットでは
・iPhone は(物理 SIM でも eSIM でも)SIM がないとアクチベートできない
とか
・iPhone は eSIM のみでは回線は開通できない
みたいな記事をよく見かけた。

もちろん、両方とも間違い。

初期化された状態の iPhone の電源をオンにした後、Mac や WiFi などを経由してアップルのアクチベーションサーバと通信できさえすれば iPhone 自体はアクチベートできる
電源投入時にネットに繋がっていなくても iPhone はご丁寧にも「WiFi に接続してください」や「Mac とケーブルで接続してください」といったガイド画面が出してくれるので、その指示に従っていくだけでいい。

(まずは、iPhone 自体を SIM なしでアクチベートする)

いったん iPhone 自体がアクチベートされてしまえば、SIM の設定はその後でもできる。もちろん、eSIM のみでも回線開通は可能だ。
楽天モバイルの場合は、回線開通の方法や専用通話アプリ(これを使うとかけ放題になる)のインストール方法などが書かれた冊子が送られてくるので、その指示に従えばここら辺の設定はそれほど面倒ではない。

Rakuten Link という専用通話アプリの通話品質も少なくとも横浜や東京23区内では使えるレベルにはあると感じた(三大キャリア並とは言ってない)。

なお、Rakuten Link に関してもうちょっと詳しく知りたいという人は

などをご覧ください。
現状での実装の質はひとまず置くとして、RCS(Rich Communication Services)という国際規格に乗っ取ったアプリです。アヤしくない。

 

通話サービスエリアの状況を見ると(特に)山間部では微妙(下の図は楽天モバイルサイトより2021年2月15日取得)。


(濃い赤が自社回線によるエリア。ピンクが au や docomo から借りている回線によるエリア。青が2021年夏までにサービス提供できるエリア)

楽天モバイルをメイン回線で使うのはまだちょっと無理があるかもしれないが、都心部で割り切って使う分には問題ないでしょう。

 

(環境)
iPhone 12 (SIM フリー)
楽天モバイル UN-LIMIT VI
SIM: eSIM

 

air-h-128k-il

? 楽天モバイルでは iPhone12 は動作保証外らしいので、ご利用は自己責任でお願いします。

 

最近の iPhone/iPad の「プライベートアドレス」がわかりにくい件

スマフォ・タブレレットなどのデバイスをセキュリティに配慮して MAC アドレス制限つきのルーターに接続することはよくあると思うが、最近の iPhone/iPad だとルーターにそのデバイス固有の MAC アドレス(Media Access Control address。74:8F:3C:XX:XX:XX みたいなやつ)を登録したのでは繋がらないようだ。

最初、この仕様変更を認識しておらず、当然、接続できず。
「あれ、パスワード誰か変更した?」と訝しがりながら何回かパスワード(もちろん正しいもの)を入力した。
当然、無駄な結果に終わりましたとさ。

これはおかしいとネットで調べてわかったことなのだが、最近の iOS/iPadOS は、ネットワーク毎に本来の MAC アドレスとは異なる MAC アドレスを生成してルーターに接続するようだ。

だから、デバイス固有の MAC アドレスをルーターに登録したところでデバイス自体は MAC アドレスを偽装?しているので、ルーターはそのデバイスからの接続要求をはじいてしまう。

また、紛らわしいのは、apple は新たに生成されたアドレスを「プライベートアドレス」と呼んでいるところだ。
ローカルの IP アドレスではないってのが要注意ポイントでしょうか。

解決策は、「プライベートアドレス」の方をルーターに登録すればいいようなんだが、「プライベートアドレス」自体を使わないという選択肢もある。

やり方は、以下の通り(iPad のスクショで説明)。
「設定」画面で wi-fi の項目を選んでネットワーク一覧を表示させる。ここで対象とするネットワークの i マークをタップ。


すると画面遷移するので、


「プライベートアドレス」のボタンを横にスライドさせてオフにすれば、この偽装 MAC アドレス機能?を使わない設定になります。

 

air-h-128k-il

(追記)android も 10 から、「MAC アドレスのランダム化」がデフォルトになったようだ。もちろん、この機能をオフにして使うことは可能。ただし android 端末は機種が様々なので、その画面上での操作がやりにくい。もしこの機能を切りたければ、試行錯誤するかネットでまめに情報を探すしかないだろう。

 

M1 Mac に M1(Arm) 対応の JDK をインストールする

この記事でも書いたのだが、Azul というところから M1(Arm アーキテクチャ CPU。apple silicon ) 対応の JDK(Java Development Kit) がリリースされている。

どの程度高速化されるのかは不明だが、可能なら Java も M1 ネイティブで動かしたい。

開発元の zulu は、マイクロソフトと共同で windows arm OS 向けの JDK を作成していたところ。

信用してもいいでしょう。

ということで、インストール&基本設定の仕方から。

JDK のインスコ

まず、Azul のダウンロードページに飛ぶ。


今回は、Java 15 の .dmg を選びました。(2022年春時点での長期サポート版は 17 ですが、17 へのアップグレードは後述)
たぶん、dmg がもっとも導入が楽です。
ダウンロード後、dmg ファイルを「開く」。インストーラーが立ち上がるので、後は指示に従って答えていけば OK です。
この画面でのダブルクリックも忘れずに。

一応、これだけでも、所定の位置(/Library/Java/JavaVirtualMachines/ 以下)に JDK は入ります。

JAVA_HOME を設定し、PATH を通す

現在 BigSur デフォルトの shell は zsh なので、~/.zprofile などに以下の2行を加える。

JAVA_HOME='/Library/Java/JavaVirtualMachines/zulu-15.jdk/Contents/Home'
PATH=$JAVA_HOME/bin:$PATH

これで、Java でのコンパイルなどが可能となります。

何はなくても Hello, World!

動作確認のために定番「こんにちは、世界」します。

public class HelloWorld{
   public static void main(String[] args){
     System.out.println("Hello World!");
   }
}

上のコードをエディタで HelloWorld.java として保存。
あとは端末からコンパイル&実行。

%javac HelloWorld.java
%java HelloWorld
Hello World!

どこまで M1 の恩恵を受けているかまではわかりませんが、無事、M1 Mac でも Java コードが動いてるのが確認できました。

15 → 17 へのアップグレード

現在(2022春)の長期サポート版は Java 17 です。
ですので JDK も15 → 17 へのアップグレードを試みましょう。
15 の時と同様に Azule のダウンロードページに行って、M1 対応の JDK をダウンロードしましょう。


今回も .dmg で大丈夫です。
指示に従ってインストールを進めると所定の場所に JDK の実体が配置されます(15 が消えるわけではない)。

以降はこちらのバージョンを使いたいので、JAVA_HOME を以下のように書き換えましょう。

JAVA_HOME='/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home'
PATH=$JAVA_HOME/bin:$PATH

以上でアップグレードは完了です。

 

猪股弘明
HorliX 開発者
OpenDolphin-2.7m 開発者

 

(追記)ここでは JavaFX に関しては一切触れていませんが、これがかなり微妙な感じで・・・んー、ごにょごにょ。興味のある方は『JavaFX on M1 Mac』をどうぞ。

 

 

ORCA, OpenDolphin, HorliX

所要とはいえ ORCA日本医師会がソースコードを公開、配布しているレセコンソフト)とOpenDolphin(電子カルテ。これもオープンソース) と準備してきたので、HorliXHoros/OsiriX ベースの画像ビューア。オープンソース) も起動。
特に深い意味はないんですが。

いや、しかし、壮観ですな。

一台の Mac の上で動いているってのにちょっと感動してます。


 

ところで、OpenDolphin・HorliX は、精神科医の猪股弘明先生の開発したバージョンを使ってます。

OpenDolphin

OpenDolphin は、オープンソースですから、当然、派生バージョンは色々とありますが、OpenDolphin-2.7m (今回、試したバージョン)は本家(dolphin-dev)に割合忠実です。これにはそれ相応の理由がありました。
OpenDolphin について』、『OpenDolphin と電子カルテの3要件とメドレー』あたりがわかりやすいでしょうか。開発者本人がその経緯を語っています。

私も今回 OpenDolphin に触れてあれこれ感想を持ちましたので、機会があったら何か書いてみたいと思います。

HorliX

画像ビューア HorliX に関する使い勝手などに関しては『COVID-19 による肺炎CT画像!<HorliXにて表示>』(精神科医高木希奈先生のアメブロ)に動画入りで紹介されていますので、そちらもご参照ください。

ところで、先生、最近、ブログで

HorliX と薬機法

という法律ガラミにしては?面白い記事を書いているので、こちらもよかったらどうぞ。

ORCA

ところで ORCA に期待(懸念?)されていることは、本当に今の設計のままで意味のあるクラウド化ができるのかってことですが、これも猪股先生、一つの提案をしてくれました。

将来的には医療情報の類はクラウドに上げて一元管理・ビッグデータとしての活用を図る・・云々みたいな話は、まあそうだろうなとは思うのですが、このとき医療機関側が欲しい情報を取ってこれる環境になっていないとデメリットの方が大きく、実際には誰も参加しないだろうなと思います。
(法的にも医療情報の管理責任は、現状だと医療機関側です。業者ではありません)
欲しい情報を効率よく取ってこれるかどうかは、データ構造の整合性に大きく依存するのではないでしょうか。
これを実現する割と有効な選択肢は現在だといわゆるウェブフレームワークの採用かなと思ったわけです。

オルカの職人芸的なデータベースの使い方も嫌いではありませんが(笑)、この後の展開を考えるとなるべくデータ間の「辻褄が合うように」整合性をはかっておく、モデル化しやすいように準備しておく、というのはあっていいのかなと思った次第です。

メーリス上で議論され、最終的には ORCA管理機構の人に「フレームワークの採用も検討してまいります」とまで言わせしめました。→結局、ORCA 管理機構、独自にウェブフレームワークを開発して、WebORCA をリリース。

また、最近では、ORCA のデータベース(PostrgreSQL)から直接データを抜いて、各種指標を加工する方法を提案しています。猪股先生ご自身が『ORCA の日計表と関連テーブル・内部会計フローなどについて』にまとめてくれています。

 

ANN2b