Claude Media
他社の統合報告書をClaudeで比較し自社の開示の抜けを洗う手順

他社の統合報告書をClaudeで比較し自社の開示の抜けを洗う手順

複数社の統合報告書PDFを、自社で決めた開示項目の一覧に沿って1社ずつ抜き出し、出典ページ付きの比較表にまとめる手順です。PDFの上限と引用機能の制約も押さえます。

他社の統合報告書を並べて読み、自社に足りない開示項目を探す作業は、PDFが長いほど「どこに書いてあったか」が曖昧になります。Claudeに任せるなら、3社分をまとめて渡して「違いを教えて」と頼むより、1社ずつ同じ項目表で抜き出し、あとで表を合わせる二段構えにしたほうが崩れません。この記事では、その手順をClaude APIのPDF読み取りと引用機能で組みます。

3社まとめて渡さず、1社ずつ抜き出す

PDFをClaudeに渡す手順そのものは、リクエストの上限が決めています。

数字

PDFをAPIに渡すときの上限

  • リクエストサイズ

    32MB

    PDF以外の内容も含めた全体の上限

  • 1リクエストのページ数

    600

    コンテキストウィンドウが1M未満なら100ページ

  • 形式

    標準PDF

    パスワード・暗号化されたものは不可

PDF supportの記載

統合報告書は図表と写真が多く、1ページあたりの重さが大きいPDFです。PDF supportの説明では、各ページが画像に変換され、抽出したテキストが画像と一緒に渡されます。テキスト分のトークンは1ページ1,500〜3,000トークンが目安で、画像分の計算が別に加わります。仮に100ページなら、テキストだけで15万〜30万トークンです。

文字が小さい・表が複雑・図が多いPDFは、ページ数の上限に届く前にコンテキストウィンドウを埋めることがあります。ページ数の上限内でも、ファイルが大きいとリクエストが失敗する場合があるとも書かれています。複数社を1リクエストに詰め込まず、1社1リクエストにしておく設計は、この制約への現実的な対処です。

2段目の「比較」は、1段目で作った抜き出し結果(テキスト)だけを渡せば足ります。PDFを再送しないので、重さの問題は1段目に閉じます。

先に自社で開示項目の一覧を決める

Claudeに「抜けを探して」と頼むと、基準にした物差しがClaudeの側に任されます。物差しは自社で決めて、項目IDを付けた一覧として渡します。ここでは価値創造プロセス・資本政策・サステナ指標の3群で組んだ例を示します。項目の立て方は自社の関心に合わせて変えてください。

群項目ID見たい内容
価値創造項目IDV1見たい内容価値創造プロセスの図(インプット〜アウトカム)の有無
価値創造項目IDV2見たい内容重要課題(マテリアリティ)の特定プロセスと一覧
資本政策項目IDC1見たい内容資本コストの認識と目標とする資本効率の指標
資本政策項目IDC2見たい内容株主還元方針と、数値目標の有無
サステナ項目IDS1見たい内容温室効果ガス排出量の開示範囲と目標年
サステナ項目IDS2見たい内容人的資本の指標(女性管理職比率、研修時間など)

項目IDを付けるのは、次の段階で表を縦に合わせるためです。「見たい内容」の欄には、判定の基準も一緒に書きます。たとえばC2なら「方針の文章だけなら『一部』、数値目標まであれば『あり』」のように、あり・一部・なしの境目を書いておくと、社ごとの判定がぶれません。

開示基準との突き合わせは別の作業です。SSBJ基準との差分を見る手順はSSBJ開示基準と自社の開示の差分をClaudeで洗い出す手順にあります。この記事は、基準ではなく同業他社の実際の開示を物差しにします。

手順1: 1社ずつ、項目ごとに出典ページ付きで抜き出す

PDFを渡す方法は3つあります。URLでの参照、base64、Files APIのfile_idです。ここではFiles APIで一度アップロードし、file_idで参照する形にします。同じPDFを項目の見直しで何度も投げ直すときに、リクエストの中身が軽くなります。Files APIは1ファイル500MBまでですが、Messagesリクエストに載せる側は上のPDF上限が効きます。

出典ページを機械的に取るために、ドキュメントブロックでcitationsを有効にします。有効にすると、回答が「主張を含むテキストブロック」と「その根拠の位置」の組に分かれて返ります。PDFでは位置がページ番号(1始まり)で返り、引用された原文のcited_textは出力トークンに数えられません。

次のコードは、PDF supportと引用機能の説明にあるリクエストの形をもとにした例です。モデル名は説明ページのサンプルに合わせています。使うときは自分の環境で使えるモデルに置き換えてください。

import anthropic
 
client = anthropic.Anthropic()
 
# 一度だけアップロードして file_id を控える
uploaded = client.files.upload(
    file=("company_a_2025.pdf", open("company_a_2025.pdf", "rb"), "application/pdf"),
)
 
ITEMS = """\
V1 価値創造プロセスの図の有無
V2 重要課題の特定プロセスと一覧
C1 資本コストの認識と目標とする資本効率の指標
C2 株主還元方針と数値目標の有無(方針だけなら「一部」)
S1 温室効果ガス排出量の開示範囲と目標年
S2 人的資本の指標(女性管理職比率、研修時間など)
"""
 
PROMPT = f"""上の統合報告書について、次の項目ごとに開示状況を調べてください。
出力は1項目につき「項目ID / あり・一部・なし / 記載内容の要約(60字以内)」の1行にします。
記載が見つからない項目は「なし」とし、推測で埋めないでください。
 
{ITEMS}"""
 
resp = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=2048,
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "document",
                "source": {"type": "file", "file_id": uploaded.id},
                "title": "A社 統合報告書2025",
                "citations": {"enabled": True},
            },
            {"type": "text", "text": PROMPT},
        ],
    }],
)
 
# 主張と出典ページを1行ずつ並べる
for block in resp.content:
    if block.type != "text":
        continue
    pages = sorted({
        (c.start_page_number, c.end_page_number - 1)
        for c in (block.citations or [])
        if c.type == "page_location"
    })
    ref = ", ".join(f"p.{a}" if a == b else f"p.{a}-{b}" for a, b in pages)
    print(block.text.strip(), f"[{ref}]" if ref else "[出典なし]")

終了ページ(end_page_number)は「含まない」番号で返ります。1ページだけの引用は開始1・終了2の形になるので、コードでは1を引いて表示しています。

出力は、例えば次のような形になります(形式の例であり、実際の記載内容ではありません)。

C2 / 一部 / 還元方針の文章はあるが数値目標は見当たらない [p.34]
S1 / あり / 自社と主要な取引先の排出量を開示、目標年を明示 [p.52-53]
V1 / なし / 価値創造プロセスの図は見つからない [出典なし]

「なし」の行に出典がないのは正常です。ただし、これは「Claudeが見つけられなかった」という意味で、「報告書に書かれていない」ことの証明にはなりません。この点は、あとの確認の節で扱います。

引用機能の制約を先に知っておく

出典ページを付ける仕組みには、統合報告書の読み比べで当たりやすい制約があります。

  • ページ番号はPDFビューアー上の通し番号: 印刷された誌面のページ番号ではありません。表紙や目次の分だけずれるので、人が確認するときはビューアーのページ移動で開きます。逆に、プロンプトでページを指定するときも、ビューアーの番号を使う指示が推奨されています。
  • 画像は引用できない: 引用できるのはテキストだけで、図やグラフの中の情報は出典ページを付けられません。価値創造プロセスの図(V1)のように図で表現される項目は、図の説明文や近くの本文が引用されるかどうかに左右されます。図そのものから読み取った結果は、人が該当ページを開いて確かめます。
  • スキャンされたPDFは引用できない: 抽出できるテキストを持たないPDFは対象外です。
  • 構造化出力とは併用できない: 引用を有効にしたうえでoutput_config.formatを指定すると、APIは400エラーを返します。JSON形式で受け取りたい場合は、この記事のようにテキストで受け取って後段で整形します。
  • 引用は全ドキュメントで有効か無効か: 1リクエスト内の一部だけで有効にはできません。

なお、Amazon BedrockのConverse APIでPDFを読ませる場合は、引用を有効にしないとテキスト抽出だけの動作になり、図表を見ません。図表まで読ませたいときは、引用を有効にするか、InvokeModel APIを使います。BedrockとGoogle Cloudではbase64でしかPDFを渡せないことも含め、提供面ごとの差はClaudeをBedrockとGoogle Cloudで使う — API機能の対応差を比較にまとめています。

手順2: 抜き出し結果を合わせて比較表にする

1社ずつの結果が揃ったら、PDFは使わずテキストだけで合わせます。3社分の行を貼り、項目IDで縦に揃えた表を作らせます。

以下はA社・B社・C社の統合報告書から抜き出した開示状況です(出典ページ付き)。
項目IDで揃えた比較表を作ってください。
- 列は 項目ID / A社 / B社 / C社 とし、各セルは「あり・一部・なし(p.番号)」の形にする
- 出典ページは元の行にあるものだけを使い、新しい番号を作らない
- 表の後に、3社中2社以上が「あり」で、自社が「なし」の項目を一覧にする

自社の現状は、同じ手順で自社の統合報告書を1社目として抜き出して比較に加えます。「3社中2社以上が『あり』で自社が『なし』の項目」という切り口は、抜けの候補を絞るための一例です。1社しか開示していない項目まで拾うかどうかは、自社の判断で変えます。

この段階では、ページ番号を新しく作らせないことが肝心です。PDFが手元にない状態でClaudeが出典を補うと、実在しない番号が混ざります。指示文に「元の行にあるものだけ」と書いておけば、元の行に出典がない項目は「出典なし」のまま表に残ります。

結果を鵜呑みにしない確認の線引き

比較表は、読む順番を決めるための地図です。そのまま社内資料にはしません。人が確かめる箇所は次のとおりです。

確認する箇所理由確かめ方
「なし」と判定された項目理由図や表の中にだけ書かれた情報を取りこぼしている可能性がある確かめ方PDFを検索して語句を探し、目次から該当章を開く
数値(排出量、比率、目標年)理由要約の過程で単位や対象範囲が落ちることがある確かめ方出典ページの原文と、注記の対象範囲を読む
「一部」の判定理由あり・一部の境目は指示文の書き方に左右される確かめ方判定基準を直して、同じ社でもう一度走らせる
出典ページ理由ビューアーの番号と誌面の番号がずれる確かめ方引用されたcited_textの文言が、そのページにあるかを見る

数値の対象範囲は、特に社をまたぐ比較で効きます。同じ「排出量」でも、開示している範囲が社ごとに違う場合があります。A社の数字とB社の数字を並べる前に、注記まで読んで同じ範囲かを確認してください。

つまずきやすい点

ページ数が上限に収まらない。コンテキストウィンドウが1M未満のモデルでは、1リクエストのページ数は100までです。それを超える報告書は、章ごとのPDFに分けて送るか、1Mのコンテキストで動くモデルを選びます。大きなPDFは、埋め込み画像のダウンサンプリングが効く場合もあります。

同じPDFに何度も質問する。項目を足して再実行する、判定基準を変えて試す、といった反復では、PDFの再読み込みが毎回かかります。プロンプトキャッシュを使うと、繰り返しの分析を速くできます。ドキュメントブロックにcache_controlを付ける書き方で、引用機能とも併用できます。

社数が多い。数十社を同じ項目で回すなら、Message Batches APIでリクエストをまとめて投入できます。大量処理向けの選択肢として、PDF supportで案内されています。

対話画面で試す場合。APIを使わず、ClaudeのチャットにPDFを添付して読ませる方法もあります。添付できる大きさやページ数の条件は、ClaudeのPDF読み込み・画像解析の使い方とアップロード上限と、ClaudeとChatGPTのPDF処理上限を比較するに整理されています。ただし対話画面では、この記事のようにページ番号を機械的に集める流れは組めません。出典の確認はそのぶん人の目に寄ります。

まとめ

統合報告書の読み比べは、物差しを自社で決め、1社ずつ抜き出し、最後に合わせる順で組むと、Claudeの出力を検証しやすくなります。出典ページが付くので、確認の入口は決まります。一方で、図の中の情報と「なし」の判定は、引用機能の外側に残ります。ここを人が見る前提で、比較表は「どの社のどのページを開くか」の索引として使うのが現実的です。

有価証券報告書のほうを同業他社と比較したい場合は、EDINET APIから書類を取り出す経路が使えます。手順はEDINET APIで有価証券報告書を同業他社と比較 — Claude Codeで回す手順にあります。

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