Claude Media
Claude CodeでRMPの資材を確認する — 提出品目一覧と担当品目の照合

Claude CodeでRMPの資材を確認する — 提出品目一覧と担当品目の照合

PMDAのRMP提出品目一覧は、担当品目の販売名で引くだけでは資材まで届きません。一覧・詳細ページ・RMP PDFの役割を分け、照合をClaude Codeに任せる手順と、任せない境界を並べます。

担当している医薬品のRMP(医薬品リスク管理計画)と、追加のリスク最小化活動のために作られた資材が公開されているかは、PMDAのRMP提出品目一覧から辿れます。ただ、一覧の表には資材の有無を示す列がなく、資材の実物は品目ごとの詳細ページにあります。担当品目が数十あると、「どの品目のどの資材を、いつ見たか」が手作業では追いきれません。

この記事では、担当品目の表と保存した一覧を突き合わせる作業をClaude Codeに任せ、資材の確認は人が詳細ページで行う分担を作ります。PMDAの利用上の注意に自動巡回の禁止があるため、Claude Codeに触らせない範囲も先に決めておきます。

一覧・詳細ページ・RMP PDFは、それぞれ何を載せているか

RMPは、個別の医薬品ごとに安全性検討事項、市販後の情報収集活動、リスクを低減する取り組み(リスク最小化活動)をまとめた文書です。情報収集活動とリスク最小化活動には、それぞれ「通常」と「追加」があります。追加の活動には市販直後調査、使用成績調査、市販後の臨床試験、適正使用のための資材による情報提供などが挙がっています。

資材は、この「追加のリスク最小化活動」の一つとして作られるものです。確認先が分かれるので、載っている場所を表にします。

場所載っているもの載っていないもの
RMP提出品目一覧載っているもの販売名、承認取得者名、一般名、RMP(PDF)へのリンク、提出年月と更新年月、詳細ページへのリンク載っていないもの資材の有無・名称
品目の詳細ページ載っているもの添付文書、RMP、RMP資材(医療従事者向けと患者向け)の各リンク載っていないものRMPの本文(PDFへのリンクのみ)
RMP PDF載っているもの安全性検討事項と、通常・追加のリスク最小化活動の計画載っていないもの使用成績調査の実施計画書などの添付資料
承認条件が解除された品目の一覧載っているもの一覧から外れた品目と、再審査時のRMP載っていないもの解除後の後発医薬品(掲載対象外)

一覧の最後の列は「添付文書・RMP資材等」ですが、中身はどの行も「添付文書等」というリンクです。行によっては「添付文書等1」「添付文書等2」と分かれ、詳細ページが複数ある品目もあります。

詳細ページは、販売名、製造販売業者等、添付文書、患者向医薬品ガイドやIF、RMP、RMP資材の順に欄が並びます。ある品目の詳細ページでは、RMPの欄に「○」、RMP資材の医療従事者向けに「適正使用ガイド」、患者向けに「アイクルシグ錠を服用される方へ」が載っていました。資材の名前や数は品目ごとに違うので、一覧から推測せず、品目ごとに詳細ページで読む必要があります。

RMP PDFに載らないものにも触れておきます。使用成績調査の実施計画書などのRMPの添付資料は、公表資料に含めない扱いです。調査の中身まで知りたい場合は、PDFではなく製造販売業者に問い合わせる範囲になります。

自動で巡回させない — PMDAの利用上の注意

一覧ページから案内されている「添付文書等の検索ページ」の利用上の注意には、多大なトラフィックを占有する行為の禁止と、自動的に添付文書等を巡回ダウンロードするアプリケーションを一切認めないことが書かれています。

Claude Codeに「担当品目の詳細ページを全部開いて資材名を集めて」と頼むと、この巡回にあたる動きになりえます。そこで、作業を次のように割ります。

  • Claude Codeに任せる: 人が保存した一覧のHTMLと、担当品目の表との照合。掲載の有無、提出年月、RMPと詳細ページのURLの一覧化
  • 人が行う: 詳細ページを開いて、資材の欄を読むこと。必要な品目だけ、1件ずつ
  • Claudeに渡してよい: 人が開いた詳細ページやRMP PDFの文面。構造化と突き合わせだけを頼む

著作権の注意も同じ場所にあります。添付文書やRMP等の著作権は製造販売業者が持ち、所属する医療機関・薬局などで使う目的を除いて、無断で複製・転載・頒布することが禁じられています。作った台帳は施設内の資料にとどめ、外に出す資料に資材の本文を転記しない運用にしておくと安全です。RMPと資材は各製造販売業者が作成し、各業者の責任で掲載したものである点も、ページに明記されています。

一覧を手元に保存する

RMP提出品目一覧のページは、本文を読み込んだあとにスクリプトが表を呼び出して表示する作りです。ページのURLをそのまま取得しても、「RMP提出品目一覧」の見出しと配信案内の文章までしか返らず、販売名の表は含まれません。

表は五十音順に10個(ア - オ、カ - コ、サ - ソ、タ - ト、ナ - ノ、ハ - ホ、マ - モ、ヤ - ヨ、ラ - ロ、ワ -)に分かれ、各行は販売名、承認取得者名、一般名、RMP、提出年月、添付文書・RMP資材等の6列です。提出年月の欄には、初回の年月と「(2026年02月 更新)」のような更新年月が改行で並びます。

ブラウザでページを開いて表が出てから、HTMLとして保存します。保存後、表が入っているかを先に見ます。

grep -c "RMP提出品目一覧 (" rmp_list.html

0なら表が入っていません。保存形式を変えるか、表を範囲選択してテキストでコピーし、少数の品目だけをClaudeに突き合わせてもらう形に切り替えます。保存のたびに日付入りのファイル名(rmp_list_20261020.html など)にしておくと、後の差分確認に使えます。

担当品目の表と一覧を照合する

担当品目は、販売名 と 一般名 の列を持つCSVにします。一般名はなくても動きますが、販売名の表記ゆれで見落としたときの保険になります。

printf '販売名,一般名\nアイクルシグ錠15mg,ポナチニブ塩酸塩\n' > items.csv
python3 -I rmp_match.py rmp_list.html items.csv > rmp_check.csv

rmp_match.py は標準ライブラリだけで、保存したHTMLの表を読み、担当品目の販売名が一覧の販売名に含まれるかを調べます。販売名で見つからず一般名が一致した場合は「一般名のみ一致」として別に出し、どちらでも見つからなければ「一覧になし」とします。ネットワークには接続しません。

rmp_match.py の全文
import csv, sys, unicodedata
from html.parser import HTMLParser
 
BASE = "https://www.pmda.go.jp"
 
class ListParser(HTMLParser):
    def __init__(self):
        super().__init__()
        self.rows, self.row, self.cell, self.links = [], None, None, []
    def handle_starttag(self, tag, attrs):
        a = dict(attrs)
        if tag == "tr":
            self.row = []
        elif tag == "td" and self.row is not None:
            self.cell, self.links = "", []
        elif tag == "br" and self.cell is not None:
            self.cell += "\n"
        elif tag == "a" and self.cell is not None and a.get("href"):
            self.links.append(a["href"])
    def handle_data(self, data):
        if self.cell is not None:
            self.cell += data
    def handle_endtag(self, tag):
        if tag == "td" and self.cell is not None:
            self.row.append((self.cell.strip(), list(self.links)))
            self.cell = None
        elif tag == "tr" and self.row is not None:
            if len(self.row) == 6:
                self.rows.append(self.row)
            self.row = None
 
def norm(s):
    return unicodedata.normalize("NFKC", s).replace(" ", "").replace(" ", "")
 
def main(list_html, items_csv):
    p = ListParser()
    p.feed(open(list_html, encoding="utf-8").read())
    entries = []
    for name, maker, generic, rmp, month, doc in p.rows:
        entries.append({
            "names": [norm(n) for n in name[0].split("\n") if n.strip()],
            "raw": name[0].replace("\n", " / "),
            "maker": maker[0], "generic": norm(generic[0]),
            "month": month[0].replace("\n", " "),
            "rmp": BASE + rmp[1][0] if rmp[1] else "",
            "detail": BASE + doc[1][0] if doc[1] else "",
        })
    out = csv.writer(sys.stdout)
    out.writerow(["担当品目", "判定", "一覧の販売名", "承認取得者",
                  "提出年月(更新)", "RMP", "詳細ページ"])
    for item in csv.DictReader(open(items_csv, encoding="utf-8-sig")):
        key, gen = norm(item["販売名"]), norm(item.get("一般名", ""))
        hits = [e for e in entries if any(key in n for n in e["names"])]
        verdict = "販売名で一致"
        if not hits and gen:
            hits = [e for e in entries if e["generic"] == gen]
            verdict = "一般名のみ一致(販売名を要確認)"
        if not hits:
            out.writerow([item["販売名"], "一覧になし(解除一覧を確認)",
                          "", "", "", "", ""])
        for e in hits:
            out.writerow([item["販売名"], verdict, e["raw"], e["maker"],
                          e["month"], e["rmp"], e["detail"]])
 
main(sys.argv[1], sys.argv[2])

試しに、担当品目として次の3つを入れて実行すると、CSVの判定は下のようになりました。

担当品目判定一覧の販売名
アイクルシグ錠15mg判定販売名で一致一覧の販売名アイクルシグ錠15mg
アイザベイ硝子体内注射液判定販売名で一致一覧の販売名アイザベイ硝子体内注射液20mg/mL
アイセントレス錠600mg判定一覧になし(解除一覧を確認)一覧の販売名(なし)

2行目のように、担当品目側の販売名が規格を省いた形でも、一覧の「20mg/mL」付きの名前に含まれるので一致します。逆に、複数規格を1行にまとめた行(例: 「A錠2.5mg / 5mg」)に対し、担当品目側が「A錠5mg」と書くと一致しません。表記が揃わない品目は、判定列が「一覧になし」になるので、その行だけ目で見ます。

このスクリプトは、表が6列の行で成り立っていることを前提にしています。一覧の列構成が変わると何も拾えなくなるので、出力が0行のときは「掲載なし」ではなく、まず保存したHTMLの構造を疑ってください。直し方もClaude Codeに任せられます。

一覧になかった品目の切り分け

「一覧になし」は、RMPがないという意味とは限りません。上の例のアイセントレス錠600mgは、一覧にはなく、承認条件としてのRMPの策定・実施が解除された品目の一覧に載っていました。

切り分け

一覧に出てこない品目の確かめ方

  1. Q販売名の表記ゆれ(規格・全角半角・会社名の付記)ではないか?
    答えがいいえのとき

    一般名でも照合し直します。「一般名のみ一致」の行が出れば、別の販売名で載っています。

    答えがはい
  2. Q承認条件が解除された品目の一覧にあるか?
    答えがいいえのとき

    一覧から外れたあとも、通常の安全対策は続きます。再審査時に提出されたRMPが、解除一覧に残っています。

    答えがはい
  3. Q後発医薬品か?
    答えがいいえのとき

    解除後の後発医薬品は解除一覧の掲載対象外です。確認したいときは、先発医薬品の再審査時に提出されたRMPを参照します。バイオ後続品は解除一覧の掲載対象です。

    答えがはい

それでも見つからないとき

製造販売業者(MRやウェブサイト)に、現在行っているリスク管理の活動を問い合わせます。

解除の審査では、RMPに記載されたリスクやリスク最小化の資材の情報が医療現場に十分浸透しているかなどが見られます。解除一覧に載る「再審査時RMP」は、解除までの過程を知る資料であり、現在の運用を示すものではありません。見るときは、評価結果が書かれた再審査報告書も併せて見る、という案内がページにあります。

資材の有無は、詳細ページから台帳に写す

一覧の照合で得た詳細ページのURLを、人が1件ずつ開いて資材の欄を読みます。台帳の列は次のようにしておくと、後で差分を取れます。

列入れる内容出どころ
販売名入れる内容担当品目の名前出どころ担当品目の表
提出年月(更新)入れる内容一覧の表記そのまま出どころ一覧
追加のリスク最小化活動入れる内容資材を含む活動の名称出どころRMP PDF
医療従事者向け資材入れる内容資材名出どころ詳細ページ
患者向け資材入れる内容資材名出どころ詳細ページ
見た日・見た人入れる内容日付と担当者名出どころ人が記入

詳細ページの資材欄をコピーしてClaudeに渡し、台帳の列に整えてもらう場合は、頼み方で結果が変わります。たとえば次のようにします。

添付した詳細ページのテキストから、RMP資材の欄にある名称を
「医療従事者向け」「患者向け」に分けて箇条書きにしてください。
- テキストにない資材名は書かない
- どちらの欄か判別できないものは「不明」として原文のまま残す
- 欄が空なら「記載なし」とする

「記載なし」と書かせるのは、空欄を資材の名称で埋められるのを避けるためです。モデルの知識から、その薬にありそうな資材を補ってしまう失敗を、指示で先に塞いでおきます。

RMP PDFから追加のリスク最小化活動を抜く

詳細ページの資材名は、RMPに書かれた追加のリスク最小化活動と対応しているはずです。PDFを渡して、活動の名称を抜き出してもらい、資材名と突き合わせます。

添付のRMPのPDFから、次の2点を抜き出してください。
1. 安全性検討事項(重要な特定されたリスク/重要な潜在的リスク/重要な不足情報)
2. 追加のリスク最小化活動に挙がっている活動の名称
各項目に、PDF内のページ番号と原文の該当箇所を付けること。
PDFにない内容は補わず、「PDFに記載なし」と書くこと。

ページ番号と原文を付けさせると、人が確かめる手間が減ります。詳細ページの資材名と、RMPの追加のリスク最小化活動の名称が合わないときは、どちらが古いかを決めつけず、台帳に「要確認」と書いて製造販売業者に問い合わせる扱いにします。

繰り返し使う規則はCLAUDE.mdに置く

照合のたびに同じ指示を書かないよう、作業用フォルダのCLAUDE.mdに規則を置きます。次はその一例です。

## RMP資材の台帳づくり
- PMDAのページに自動でアクセスしない。ネットワーク取得をしない
- 入力は、人が保存した一覧HTML、担当品目CSV、人が渡したテキストとPDFだけ
- 資材の有無・名称は、渡された文面にあるものだけ書く。記憶で補わない
- 一覧にない品目は「RMPなし」と書かず、「一覧になし」と書いて解除一覧の確認に回す
- 結果にはPDFのページ番号か、元のテキストの引用を付ける

患者の情報は、この作業に必要ありません。担当品目の表にも、患者や処方の情報は入れないでください。所属機関で生成AIの利用が承認されているかの確認は、この作業にも当てはまります。業務での線引きは病院薬剤師の生成AIガイダンスの記事にまとまっています。

更新を追う — メールと保存版の差分

RMPと資材は、公開後も更新されます。追い方は2つあります。

1つは、PMDAメディナビのメール配信です。RMP提出品目一覧の情報は、新規掲載のほか、安全性検討事項の新設・削除・名称変更、リスク区分の変更、追加のリスク最小化活動の新設・削除といった重要な更新があったRMPについて配信されます(2019年5月から)。資材は、添付文書改訂を伴う変更などの重要な更新があったものが配信対象です(2020年1月から)。

もう1つは、保存した一覧どうしの差分です。日付入りで残した前回と今回の2ファイルに同じスクリプトを走らせ、出力CSVを diff に渡します。

python3 -I rmp_match.py rmp_list_20261020.html items.csv > new.csv
python3 -I rmp_match.py rmp_list_20260915.html items.csv > old.csv
diff old.csv new.csv

差分が出た行は、更新年月が変わったか、RMPのファイル名が変わった行です。そこから台帳の該当品目を詳細ページで見直します。

落とし穴

更新年月が動かなくても、資材は変わっていることがある

一覧の「(2026年02月 更新)」のような表記が、RMPの更新だけを指すのか、資材の更新も含むのかは、一覧のページに説明がありません。資材の重要な更新はメディナビの配信対象に別建てで入っているため、一覧の差分だけで済ませず、メールの受信も併用します。

担当品目の確認作業を、Claudeに任せる範囲

この作業は、品目を探す部分と資材を読む部分に分けると、任せる範囲がはっきりします。探す部分は、販売名を表記ゆれ込みで一覧と突き合わせ、一覧にない理由の切り分け先を示すところまでです。ここは出力に誤りがあっても、元の一覧と照らして直せます。

読む部分は、資材の有無と中身であり、医療現場の資料の根拠になります。人が詳細ページを開き、見た日と担当者を台帳に残すところは、Claude Codeに渡さない作業です。薬局での記録の残し方は疑義照会の記録の手順、不動在庫のような表計算の集計はClaude for Excelの返品候補の洗い出しで扱っています。

まとめ

RMP提出品目一覧は、担当品目にRMPがあるかを探す入口です。資材の有無は一覧にも載っておらず、詳細ページで人が読む必要があります。Claude Codeに任せるのは、保存した一覧と担当品目の表の照合までにとどめ、「一覧になし」は解除一覧と後発医薬品の扱いで切り分けます。台帳には、見た日と見た人を残してください。

この記事を共有:XはてブLinkedIn