電子カルテ・医療システムを操作する記事です。ご使用のシステムの利用規約を確認のうえ、自己責任でお試しください。患者さんの情報は、外部の生成AIに送らないでください。
Chromeの拡張機能Tampermonkeyを使うと、電子カルテの細かいけれど頻度の高い操作を自動化できます。デジカルに導入して業務の流れが一新された経験と、Claude Codeを使った作り方、実際に作った機能の例を紹介します。
今回は、これまでも何回か触れてきたTampermonkeyについてご紹介したいと思います。タイトルでは「電子カルテ自動操作ツール」としていますが、もともとは電子カルテ専用のものではなく、Chromeの拡張機能の一つです。Chrome上で表示されるサイトの操作を自動化できるツールであり、電子カルテに限らず、さまざまなWebサービスに応用することができます。
私自身、このツールを導入したのは比較的最近なのですが、使い始めて1週間ほどで業務の流れが完全に変わりました。電子カルテ周りの細かい操作が大きく改善され、体感としては「業務が一新された」と言ってよいレベルでした。
私が使用しているデジカルは、比較的軽快に動作する電子カルテで、慣れてしまえばかなり使いやすい部類だと思います。ただ、その軽さを維持するためなのか、細かい補助機能やカスタマイズ性については、ある程度割り切られている印象があります。例えば、「この操作を毎回数クリックでやらなければいけない」「ちょっとした定型処理なのに毎回手で行う必要がある」といった場面が、日常診療の中で少しずつ積み重なっていきます。
一つ一つは数秒程度の操作でも、外来では患者さんごとに何十回、何百回と繰り返されるため、結果的にはかなり大きな負担になります。しかし、Tampermonkeyを導入することで、こうした“細かいけれど頻度の高い操作”を自動化できるようになったことが、非常に大きかったと感じています。
特に重要なのは、「現場で実際に使っている人間が、自分で不便を埋められる」という点です。電子カルテベンダー側に要望を出しても、すぐに改善されるとは限りませんし、そもそも小さな不便は後回しになりやすいものです。しかしTampermonkeyを使えば、自分自身でその隙間を埋めることができます。これは開業医や小規模診療所にとって、かなり大きな武器になるのではないかと思っています。
また、Tampermonkeyが特に衝撃的なのは、生成AIとの掛け合わせによって一気に実用性が上がった点です。これまでは、Tampermonkeyを本格的に活用しようと思うと、JavaScriptなどのプログラミング知識が事実上必須でした。そのため、「便利そうではあるけれど、実際には一部のプログラミングができる人しか使えないツール」という側面があったと思います。しかし現在は、生成AIの登場によって状況が大きく変わりました。やりたい操作を指示することで、コードを生成できるようになり、以前と比べると圧倒的に導入ハードルが下がっています。
つまり、
生成AIによるプログラミング能力
TampermonkeyによるChrome操作自動化
電子カルテという日常的に大量操作を行う環境
この3つを掛け合わせることで、日々の業務効率が「少し改善する」というレベルではなく、次元が変わるレベルで改善される可能性があります。
特に外来診療では、「数クリック減る」「数秒短縮される」という小さな改善が、患者さん全員分積み重なります。そのため、体感としては想像以上にインパクトが大きいです。私自身、導入後は「今まで手でやっていた作業は何だったのか」と感じる場面がかなり増えました。
今回は、その導入の経緯や、実際に私が作成したツールについて紹介していこうと思います。一方で、この仕組みは応用範囲が非常に広く、1記事だけでは到底扱いきれません。具体的な操作方法や、実際にどのように電子カルテへ組み込んでいるのかについては、別記事でも順次紹介していきたいと思います。
Tampermonkeyとの出会い
Tampermonkeyとの出会いについてですが、これは私自身が何か新しく発見したというような話では全くありません。もともとは、別の開業医の先生が、電子カルテをより便利に使うための自動化ツールとしてTampermonkeyを紹介されているのを拝見したのがきっかけでした。
その先生はデジカルを使われていたわけではなかったのですが、「電子カルテを自動操作して業務効率化できる」という発想そのものにかなり衝撃を受けました。そこで、自分でも試しに導入してみたところ、デジカルでも問題なく動作し、実際の診療業務でも十分実用的に使えることが分かりました。
最初は正直に言って、半信半疑だったのですが、実際に使ってみると想像以上に便利で、「これはかなり可能性がある」と感じたのを覚えています。特に、普段毎日繰り返している細かな操作を自動化できるという点は、開業医の外来業務との相性が非常に良いと感じました。
Tampermonkeyとの付き合い方
詳細については別記事で扱おうと思うのですが、Tampermonkeyにはいろいろツール作成方法があります。その中の一つとして、プロジェクトファイルを1個作っておき、その中でClaude CodeやCodexを使いながらコードを組み立てていく、というやり方があります。
デジカルのカルテの構造だったり、APIの手法だったりという部分については、自分で調べて取得していかなければいけません。その中で得た知見をどんどん集積していく→集積した情報を元に開発→実際に運用して、足りない情報を再度収集→開発→検証、、、、というループで作成していきます。
そのため、一つのファイルにコードを書いたり、取得した情報をまとめたりする形で、プロジェクトファイルを作っておくと非常に便利です。一度調べて取得した情報は、他のツール作成時にも応用できるためです。
私自身、ここしばらくClaude Codeと相談しながら作り続けてきたファイルや、その過程でのやり取りなどが残っているものですから、その内容も踏まえつつ、「開業医の先生向けに最初どう紹介したら分かりやすいか」という点についても相談し、記事を書いてもらいました。
以下では生成AIに書いてもらった文章を少し紹介してみようと思います。
※ここから先は私自身の文章ではなく、生成AIに整理してもらった内容になります。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
電子カルテを自分好みに改造する技術——Tampermonkeyとは何か、何ができるのか
対象読者: ITに興味はあるけど、プログラミングは未経験〜初歩の開業医の先生
はじめに
DigiKarを使いながら、こんなことを思ったことはないでしょうか。
朝イチの保険証のオンライン資格確認、1人ずつカルテを開いて確認してメモして戻って……を全員分繰り返している
マイナ保険証の確認後、毎回同じ情報を手でカルテに転記している
受付で「この患者はデジスマ払いか精算機か公費か」を毎回目視で判断してラベルを設定している
問診に気になる回答があっても、忙しいと見落とすことがある
急性上気道炎の病名、2週間後に治癒処理しなきゃと思いながらそのままになっている
診察終了後の受付メモ消去し、終了ラベルを手動で更新しているが、地味に手間がかかる
これらはどれも「電子カルテの仕様上、仕方ない」と諦めがちな問題です。
でも実は、ブラウザに小さなプログラムを追加するだけで、すべて解決できます。
実際にどう変わったか、具体的に言うと:
作業 | Before | After |
|---|---|---|
全患者の保険資格確認+メモ登録 | 毎朝10分・手作業 | ワンクリック・全自動 |
マイナ保険証情報のカルテ転記 | 1件30秒・手入力 | ワンクリックで自動整形して貼り付け |
施設ラベル(デジスマ/公費/精算機)設定 | 1人ずつ目視+手操作 | 全患者一括・自動判定 |
重要な問診の見落とし | 目視確認のみ | 赤字自動着色・確認後は青字 |
病名の2週間後治癒処理 | 日付を手計算して1件ずつ | 日付自動計算・一括処理 |
診察終了後の受付メモ消去+終了ラベル | 複数クリック操作 | ワンクリック |
そのための道具が Tampermonkey です。
Tampermonkeyとは
Tampermonkeyは、Chromeに追加できる拡張機能(無料)です。
仕組みはシンプルで、「このウェブサイトを開いたとき、このプログラムを自動で実行する」というルールを書けます。
電子カルテはウェブブラウザ上で動くシステムなので、Tampermonkeyで動作を拡張できます。メーカーに頼まなくても、自分で機能を追加できるのです。
3つの基本技術
Tampermonkeyのスクリプトは、主に3つの技術の組み合わせで動いています。
1. DOM(ドム)——画面の部品を操作する
DOMとは何か
ウェブページはHTMLというコードで作られています。DOMとは、そのHTMLをプログラムから操作するための仕組みです。
わかりやすく言うと、**「画面に表示されているすべての部品に、プログラムから触れる仕組み」**です。
ボタン、テキスト、入力欄、表——これらすべてが「部品(要素)」として存在していて、プログラムから読んだり、クリックしたり、書き換えたりできます。
実際の例
DigiKarで「患者メモ」ボタンを自動でクリックする処理はこう書きます:
// ボタンを探してクリックする
const btn = document.querySelector('button[data-variant="iconOnly"]');
btn.click();
document.querySelector は「この条件に合う部品を画面から探してきて」という命令です。
部品をどうやって特定するか
画面上のボタンや入力欄を特定するには、「その部品の特徴」を指定します。
button[data-variant="iconOnly"]→ data-variantという属性がiconOnlyのボタンinput[placeholder="キーワードを入力"]→ 特定のプレースホルダーを持つ入力欄textarea.css-1n5s5ou→ 特定のクラスを持つテキストエリア
Chromeの開発者ツール(F12)で画面上の部品を右クリック→「検証」すると、その部品のコードが確認できます。
2. API(エーピーアイ)——データを直接取得する
APIとは何か
電子カルテのようなウェブシステムは、画面を表示するとき裏側でデータを取得しています。
たとえばDigiKarの受付画面を開くと、裏側では「今日の受付一覧をください」というリクエストをサーバーに送り、患者データを受け取っています。このデータのやり取りの仕組みをAPIといいます。
DOMよりAPIが優れている点
DOM(画面から読む) | API(データを直接取る) | |
|---|---|---|
速度 | 画面が表示されるまで待つ必要がある | 即座に取得できる |
精度 | 表示形式に左右される | 生のデータが取れる |
安定性 | 画面のデザイン変更で壊れる | 変更に比較的強い |
実際の例
今日の受付一覧を取得する処理:
const res = await fetch(
"/public_api/current_medical_institution/reception_list?yyyymmdd=20260510",
{ credentials: "include" },
);
const data = await res.json();
// data.patient_visits に患者の一覧が入っている
これで画面に表示されている内容だけでなく、生年月日・施設ラベル・保険情報など、画面に出ていないデータも一気に取れます。
APIはどうやって見つけるか
Chromeの開発者ツール(F12)→「ネットワーク」タブを開いた状態で画面を操作すると、裏側で行われているリクエストがすべて見えます。ここから「これが欲しいデータだ」というAPIを特定できます。
3. React対応——現代のウェブシステムの特殊性
ReactとSPA
DigiKarはReactというフレームワークで作られたSPA(シングルページアプリケーション)です。
通常のウェブサイトはページを移動するたびに画面全体が読み込まれますが、SPAはページ遷移しても実際にはページが切り替わらず、必要な部分だけ書き換えます。
これが便利な反面、スクリプト側には2つの注意点があります。
注意点① URLが変わってもページ読み込みイベントが発生しない
通常のウェブサイトなら「ページが読み込まれたときに処理を実行」と書けばいい。でもSPAは内部的にURLを書き換えるだけで、ページ読み込みは起きません。
対策として、URLの変化を自前で監視します:
// URLが変わったことを検知する仕組み
let lastUrl = location.href;
new MutationObserver(() => {
if (location.href === lastUrl) return;
lastUrl = location.href;
// ここでURL変化後の処理を実行
}).observe(document.body, { childList: true, subtree: true });
注意点② 入力欄への値セットが普通のやり方では動かない
Reactは入力欄の値を自前で管理しています。普通にinput.value = "値"と書いても、Reactが認識しません。
対策として、ブラウザの内部機能を使ってセットします:
// React管理下のinput/textareaに値をセットする方法
const nativeSetter = Object.getOwnPropertyDescriptor(
HTMLTextAreaElement.prototype,
"value",
).set;
nativeSetter.call(textarea, "新しい値");
textarea.dispatchEvent(new Event("input", { bubbles: true }));
実際にどうやって作るか——Claude Codeとの連携
正直に言うと、自分でゼロからコードを書く必要はありません。
流れはこうです:
「こんなことをしたい」をClaudeに伝える
開発者ツールで画面の部品やAPIを確認して、Claudeに共有する
動かしてみて、うまくいかなければエラーをそのままClaudeに貼る
修正してもらって、また試す
この繰り返しで、プログラミング未経験でもスクリプトが作れます。
重要なのはプログラムを書けることではなく:
どの部分が非効率かを発見できること(現場感)
開発者ツールで必要な情報を拾えること(少しの慣れ)
エラーを正確に共有できること(コミュニケーション)
これは医師としての問題発見能力と親和性が高いです。
実際に作った機能の例
できあがったスクリプトは現在18本。カテゴリごとに紹介します。
【受付業務】毎朝10分の作業が1秒になった
保険資格確認+メモ登録(全自動)
朝の受付業務で最も時間を取られていた「保険証のオンライン資格確認」を完全自動化しました。
手作業だとこうなります:
患者のカルテを開く
「保険等」タブをクリック
編集ボタンをクリック
「オンライン資格確認」をクリック
結果を確認
受付メモに「保険資格有効」ラベルを登録
受付画面に戻る
次の患者へ…(×当日予約患者全員分)
「🔍全員確認」ボタンを1回押すだけで、予約患者全員のカルテを自動で巡回し、資格確認→メモ登録→次の患者、を繰り返します。確認結果は受付一覧に✅や⚠️バッジで表示されます。
「毎朝10分かかっていた作業が、ボタン1つで終わるようになった」
施設ラベル一括自動設定
受付画面でデジスマ払い・公費対象・精算機払いの患者を自動で識別し、施設ラベルを一括設定します。
デジスマアイコンがある → 🌐デジスマ🌐
生年月日から公費対象年齢と判定 → 🔷公費🔷
保険欄に「障害」「ひとり親」などのキーワード → 🔷公費🔷(成人でも)
それ以外 → 🔶精算機🔶
👶家族👶 はスキップ
2026年施行の公費拡大(高校3年生まで)も判定日を見て自動で切り替えます。
午前午後の区切り登録(ワンクリック)
午前の診療終了後、受付画面に「サンプル患者」を自動で登録し、受付メモに ---午前午後の区切り--- を入力します。ボタン1つで午前の終わりをマーキングできます。
仕組み:患者番号を入力→検索→受付ボタンをクリック→メモ登録、という一連の画面操作をすべて自動化しています。
【カルテ入力】転記・確認ミスをゼロに
マイナ保険証情報のカルテ自動貼り付け
オンライン資格確認後のマイナンバー画面から、保険情報・公費情報を自動で読み取ってカルテに整形して貼り付けます。
貼り付けられる内容の例:
【オンライン資格確認】公費
受給者証名 : 小児医療証
公費負担者番号 : **********
有効期間(開始) : 2024年8月1日
有効期間(終了) : 2026年9月30日
〔受給者証券面〕
自己負担上限額 : 自己負担上限額(一部負担金)0円
注意事項 : この医療証は、県外では使えません
手で転記すると1〜2分、入力ミスのリスクもある作業が数秒で完了します。
患者メモワンクリック入力
よく使う患者メモをボタン1つで登録します。
🟪マイナ → 「🟪マイナ保険証🟪」
🟧S → 「🟧S」
💊前回血液検査 → 「💊前回血液検査 2026年5月10日」(その日の日付を自動挿入)
既存のメモがある場合は上書きせず改行して追記します。
問診ハイライト(重要項目を見落とさない)
「妊娠の可能性はありますか?」「2週間以内に海外渡航はありますか?」などの重要な問診にYESの回答があった場合、自動で赤字に着色します。該当しない場合も青字に変わり、確認済みであることが一目でわかります。
男性患者には妊娠・授乳の項目を青字にしない、といった細かい制御も実装しています。
【検査・病名管理】繰り返し作業を自動化
病名一括処理(治癒・中止・2週間後治癒)
複数の病名を一括で処理します。
「疑い」の病名 → 一括中止
「2週間後治癒」: 今日の日付から14日後を自動計算して治癒日として登録
インフルエンザ疑い→当日中止や、急性上気道炎、扁桃炎の受診日から14日後治癒の病名を処理する場面で、数十件を自動で片付けます。
GFR・総コレステロール自動計算・登録
検査結果が入力されると、クレアチニン・年齢・性別から推算GFRを、LDL・HDL・TGから総コレステロールを自動計算して検査結果テーブルに登録します。
計算式(日本腎臓学会2009式・Friedewald式)をスクリプトに組み込んでいます。 ※細かい話ですが、検査会社によっては、一項目ごとにお金が取られるので、数十円を節約できます。
【診察終了後】後処理もワンクリック
受付メモ消去+終了ラベル(ワンクリック)
診察終了後の処理を1ボタンにまとめました。
受付メモの内容を消去
「⬛️終了」「⬛️終了陽性🔥」「⬛️終了陰性🧊」などのラベルを選んで貼り付け
感染症の結果を陽性・陰性で記録する場合も、ボタンを1つ押すだけです。
まとめ
技術 | 役割 | 難易度 |
|---|---|---|
DOM操作 | 画面の部品をクリック・読み取り・書き換え | ★★☆ |
API通信 | 裏側のデータを直接取得 | ★★★ |
React対応 | 現代のウェブアプリ特有の挙動への対応 | ★★★ |
Tampermonkey | 上記をブラウザに組み込む仕組み | ★☆☆ |
最初の壁は「開発者ツールを開いて情報を見る」ことへの慣れです。それさえ乗り越えれば、Claude Codeと組み合わせることで医師でも十分に実装できます。
電子カルテは「使うもの」から「育てるもの」に変わります。
Clinic Tech Lab — 開業医 × IT の実践知
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
補足
ここからは、また私自身の文章に戻ります。
いかがでしょうか。結構、今まで私がClaude Codeなどと相談しながら進めてきた内容や、実際に今まさに走りながら実装している内容を、うまく整理してまとめてくれたのかなと思っています。これだけの内容を、自分で一から整理して書こうとすると、実際かなり時間がかかると思いますが、今回の文章については、本当に1分くらいで生成AIがまとめてくれました。そういう「整理する能力」「情報を構造化する能力」というのも、改めてかなりすごいなと感じています。
今回は導入編として
今回は導入といいますか、「こういうものがある」ということを知っていただくための記事になります。具体的な実装という面については、また今後ご紹介していけたらなと思っています。
おそらく最初に見た先生は、わけの分からない用語が出てきたり、プログラミングコードが一部出てきたりするので、若干引いてしまっている先生も結構みえると思います。ただ実際はそんなに難しくありません。正直に言うと、私自身も、ここに書いてあるコードを理解しているわけではありませんし、プログラミングコードそのものは、理解できなくても道具として使えます。
一方で、Tampermonkeyを使う上で、一番ハードルが高いのは「必要な情報を自分で取りに行かなければいけない」という部分だと思います。デジカルがどういう構造になっているのか、どのボタンがどの処理をしているのか、APIでどう通信しているのか、といったことを、自分で調べながら進めていく必要があります。この部分については、私自身もかなり迷いながらやりましたし、確かに最初は少し面倒くさいかもしれません。ただ、実際にやっていること自体は、そこまで高度な技術ではありません。
どちらかというと、少し試して、動かしてみて、エラーを見て、生成AIに相談して、また試す、ということの繰り返しです。なので、技術力というより、むしろ粘り強さがあれば十分できるんじゃないかなと思っています。