Enterprise Article Showcaseには、いくつかの注目すべき投稿がありました。Delphi / C++Builder / RAD Studioが、私たちの生活に関わるさまざまな業界で密かに活躍している事実には、常に驚かされます。今回の、Anouar Hamza Cherif氏の投稿は、歯の状態の可視化とその記録に不可欠な歯周チャート作成を容易にする歯科医/研究医向けのマルチプラットフォームアプリ開発に関する経験談です。
では、肩の力を抜いて。痛くはないですよ… 😁
Table of Contents
歯周チャートとは
歯周チャート作成は、歯科において、より正確には歯周病の実践研究の分野において、歯肉および歯周の健康状態や疾患を評価監視するための重要なプロセスです。病変の深さ、組織の喪失など、各歯のさまざまな歯肉パラメータを測定するための歯周プロービングを行ったのち、記録された数値を解釈して疾患分類を定義し、歯周チャートを作成します[1]。
歯周チャート作成に適したツール
歯周チャート作成アプリがあれば、デスクトップでもモバイルでも、患者記録の整理や分析の際に、その場で実データを収集できるなど、研究者のタスクが容易になります。
この目的を実現する理想的なアプリ、あるいは私たちのチームが求める機能コンセプトは次のようになります。
- 使いやすいコマンドを備えた直感的なユーザーインターフェイス
- 複数のプラットフォーム(デスクトップおよびモバイル デバイス)で利用可能
- 検査記録(歯周プロービング値)の保存と読み込み
- 歯周チャートを高品質画像として描画しエクスポートも可能
- 電子カルテソフトウェアのように、患者の検査を整理可能
すべての検査において、歯周プロービング値を保存しそれを可視化するチャートを作成する作業は、一連のプロセスを包括的サポートするアプリがなかったため、手作業で行う必要があり、大変な労力がかかっていました。利用可能な唯一のソリューションは月額料金の有料サービスで、記録をホストし、歯周チャートの描画をサポートするものでした。また、保存機能やホスティング機能のない、単に入力値に従ってその場でグラフを描画するだけのWebサイトもありました。
このような状況下で、私のタスクは、歯周チャートの作成を容易にするため、Delphiを用いてマルチプラットフォームアプリ(デスクトップおよびモバイル)を開発することになったのです。
Delphiを選択した理由
Object Pascal は、簡単なパラダイムの学習の容易な言語であり、私は2011年から使用しています。Delphi IDEには、容易に利用できるようにするさまざまな機能と利点があります。最も注目すべきポイントを、以下に示します。
- 単一のコードベースおよび単一フォームデザインからのマルチプラットフォームターゲットを実現
- インターフェイスと実装セクション間の迅速なコードナビゲーションと迅速なユニットの検索
- データモジュール:アプリケーションフォーム間で共有される単一の共通コンテナによりデータレイヤーコンポーネントとコードを分離
- 使いやすいビルトイングラフィックスフレームワーク
これらの理由から、このプロジェクトの開発にDelphiを選択したのは、当然の帰結でした。
歯周チャートアプリの特徴
本記事執筆時点で、当社の歯周チャートアプリは、WindowsとAndroidで動作し(Delphi FMXフレームワークを活用)、1つのデバイス上のローカル環境で作業をすることも、多数のユーザーが接続するネットワーク環境で作業することも可能です。実際、データ処理とグラフ作成のコードは、このDelphiによるクライアントアプリに完全に含まれていますが、ネットワークサーバー側は、MySQLデータベースに接続してユーザーデータと患者の記録を保存するPHPアプリケーションによって構成されます。
クライアントアプリは、以下のような機能を提供します。
- ネットワーク環境でアプリを使用する場合のユーザー認証(この研究プロジェクトで働く歯科医)
- 入力値の保存(ファイル保存、またはサーバーデータベースへの直接保存)
- 保存された値のロード(同一デバイスまたは他のデバイス上で保存されたファイル、またはサーバー上のデータベース)
- 歯の状態(通常、抜歯、またはインプラント)のマーキング
- すべての歯の追加パラメータ(歯の可動、分岐、歯根間病変) 、すべてのプロービング部位(組織の喪失または隆起、歯茎の出血、歯の可動、細菌プラークなど)をマーキング
- 歯周チャートを描画するための入力値を計算
- 描画されたチャートを画像ファイルにエクスポート
- 病気の進行を評価するための、同一患者のさまざまな検査の比較
- 多くのフィルタリングオプションを使用して、患者の過去の検査をライブラリで整理(ローカル環境でアプリを使用する場合)
- ユーザーデバイス間のレコード同期(ローカルとネットワーク双方のモードで利用可)
- 縦/横画面サイズに合わせてUIサイズを変更
歯周チャートの出力結果
アプリに表示される歯周プロービングデータの出力結果を、以下に示します。
開発に使用したコンポーネント
このプロジェクトでは、Delphi FMXフレームワークに加えて、以下の機能を使用しています。
- FireDAC: 入力値をデータセット(
TFDMemTable
)として格納/操作し、JSONストレージ形式でレコードを保存/ロード - FMXオブジェクトおよびグラフィックスコンポーネント: 歯周チャートの空のテンプレートにパスを描画
- FMXプラットフォームサービス: マルチプラットフォーム エクスペリエンスを実装(画面の向き、ダイアログ、クリップボード、仮想キーボードなど)
- Skia4Delphi: Delphiアプリの最新かつ推奨グラフィカルバックエンドとして、高性能レンダリングを備えた高品質ユーザーインターフェイスを作成するために使用
- Ethea IconFontsImageList: モダンですばらしいUIを実現するための必須コンポーネント。すべてのアイコンの色とサイズを指定できるオプションを備えた、フォントロゴとアイコンを使用するためのカスタムImageListコンポーネントを実装
- DzHTMLText: Digao Dalpiazによって開発された、HTML相当の構文を使用して書式化されるテキストラベルを表示するFMXコンポーネント
- RESTクライアントライブラリ: ネットワークモードでサーバーとのデータ交換に使用。ユーザー認証、サーバーデータのダウンロード、更新、サーバーからの患者記録の読み込み、ユーザーデバイス間の記録の同期などを実装
データが表すもの
歯周病チャートは、プロービング検査で歯科医によって収集された値に従い、すべての歯についての現在の歯周病の状態、程度、患者の口内で最も感染しているゾーンの位置を表します。
コードの働き
歯周チャートテンプレート(ブランク)はアプリバイナリ内でコンパイルされ、各プローブサイトはTPath
オブジェクトであるチャートを作成するための参照として、ピクセル座標によってマークされます。
歯科医が検出した歯周プロービング値は、新しい検査記録としてアプリに入力されます。次に、アプリロジックはこれらの値をプロービング座標上で計算し、ブランクの参照座標と組み合わせてpathdata
文字列を書き込みます。これは、プロービング深度、組織損失などなど特定のパラメータに従って、頬面と舌面の両方で上口と下口におけるさまざまなTPathData
オブジェクトを作成するために使用されます。
これらのTPathData
オブジェクトは、(塗りつぶし領域を描画するTCanvas.FillPath
関数とオープン線を描画する関数TCanvas.DrawPath
関数で使用される)キャンバスオブジェクトでの描画セッションによって、ブランクテンプレート上に描画されます。
最終的に更新されたビットマップ(結果として表示される歯周チャート)が、ユーザーに表示され、ユーザーはそれを画像ファイルにエクスポートできます。
そして最後に、歯科医はプローブ値をレコードとして外部ファイルやサーバー上のデータベースに保存でき、この検査結果を検証できるようになります。
このDelphiプロジェクトの将来計画
近い将来、このプロジェクトは、より多くの機能を備えるべく開発を継続していく予定です。また、このアプリを他のEHRや歯科診療管理ソフトウェアと統合したり、サーバー機能を強化して、より多くの歯科医に利用してもらい、他の機関とも連携することで、研究ネットワークの拡大を図るなど、新しい領域への展開を模索しているところです。
参考文献
[1] Wolf HF, Rateitschak EM, Rateitschak KH, Hassell TM. Color Atlas of Dental Medicine: Periodontology, 2005. Thieme.
この記事は、Enterprise Article Showcaseへ投稿されたものです。RAD Studio、Delphi、C++Builderと関連技術を用いて構築した開発プロジェクトの成功事例をお持ちの方は、ぜひご連絡ください。詳細はこちらをご覧ください。