VWork バイブコーディングフレームワーク

動物病院の電子カルテをオープンソースで——英語だけのOpenVPMを日本語化し、紙カルテの移行(和暦・Shift_JIS)まで本番構成で確かめた記録

動物病院の電子カルテは、月額の利用料がかかるクラウド型が中心です。「紙カルテのままでは限界だけれど、固定費は増やしたくない」「カルテのデータは自院で持っておきたい」という病院には、選択肢があまりありません。

そこで、オープンソースの動物病院向け管理システム OpenVPM を日本語化し、紙カルテからの移行まで含めて、本番と同じ構成で動くことを確かめました。先に結論を書きます。

日本語になった予約表

なぜ OpenVPM を選んだか

「動物病院 電子カルテ」は月170回ほど検索されていますが、オープンソースで使えるものは多くありません。

長く続いている OpenVPMS(オーストラリア中心)は、公式サイトに「病院で使うには当団体の有料会員であることがライセンスの条件」と書かれていて、自由には使えません。GitHub にある他のものは、学生の課題のようなものか、更新が止まっているものでした。

OpenVPM は2026年3月に始まった新しいプロジェクトで、開発が活発です。Next.js と PostgreSQL で作られていて、APIも公開されています。スターは35と小さいですが、カルテから在庫まで必要なものがそろっていたので、これを土台にしました。

翻訳の仕組みが無い——どう日本語を入れたか

本家には、多言語化の方針を書いた文書(docs/I18N.md)だけがありました。「英語を正とし、訳が無ければ英語に戻す」「新しいライブラリはむやみに足さない」「小さく分けて段階的に」という方針です。

これに沿って、次のようにしました。

  1. 英語の文言そのものを鍵にする、小さな翻訳関数を足す。 訳が無い文言は英語のまま出るので、英語の画面は何も変わりません
  2. 画面の直書きの文言を、変換スクリプトで一括して翻訳関数に通す。 TypeScript の構文を読んで、画面のテキスト・入力欄の説明・通知・表の見出しなどを拾いました。対象は約150ファイル、約3,800か所です
  3. 訳は、ローカルの LLM(gemma4)で下訳し、機械で検査する。 数字や {name} のような差し込みが消えていないか、英語に無い差し込みを勝手に足していないかを検査し、落ちたものは英語のまま残しました
  4. 用語は動物病院の言い方にそろえる。 Patient は「患者」、Client は「飼い主」、Records は「カルテ」、Controlled Substances は「麻薬・向精神薬」です

途中で分かったことがいくつかあります。

患者の一覧

日本の病院に合わせて直したこと

会計の画面

紙カルテからの移行

本家には、他の電子カルテから CSV で移す仕組みがあります。飼い主 → 患者 → ワクチン歴 → 診療記録の順に取り込み、毎回「試し実行」で件数と問題のある行を見てから確定します。

ただ、そのままでは日本の紙カルテには使えませんでした。

日本語版では、この4つを直しました。列名は「姓・名・電話番号・動物名・動物種・品種・性別・生年月日・接種日・来院日・主訴・所見・診断・治療」などをそのまま読み、「犬・猫・ウサギ」「去勢オス・避妊メス」、日付は「2019/3/5」「2019年3月5日」「令和元年5月1日」「R5.3.5」と全角数字、ファイルは Shift_JIS を自動で判定します。

取り込みの画面

本番と同じ構成で、Shift_JIS の CSV 4本(飼い主2件・患者3頭・ワクチン歴3件・診療記録2件)を取り込みました。データベースを直接見て、「令和3年2月20日」が 2021-02-20 に、「去勢オス」が male_neutered に、飼い主番号だけの(メールアドレスが無い)飼い主もきちんと入っていることを確かめています。

紙カルテを全部打ち込むのは大変なので、通院中の患者とワクチン歴から始め、過去の記録は来院のたびに足していくのが現実的だと思います。

本番の構成で確かめたこと

開発用のサーバーではなく、本番用のビルドで「サーバーの用意 → 病院の登録 → 移行 → バックアップ → 別のデータベースへの復元」まで通しました。

まだできていないこと

導入するなら

日本語版の本体は無料で、ソースコードは GitHub で公開しています。

本家 OpenVPM とは提携していない、非公式の日本語版です。医療機器ではないので、診断や投薬の判断は獣医師が行ってください。