やりたいこと
手元にある実務ファイル——見積書の Excel、契約書の Word、規程集の PDF——を AI に渡して読ませたい。
素朴にやると穴が空く
「ファイルパスを渡せば読んでくれる」と思って始めると、最初の 10 分で詰まります。
穴1: Excel と Word は読めない
Claude Code の Read ツールが扱えるのは、テキスト・画像・PDF・Jupyter notebook だけです。
| 形式 | Claude Code の Read | Gemini CLI の read_file |
|---|---|---|
テキスト(.txt .md .csv .json) | 読める | 読める |
| 画像(PNG / JPG) | 読める | 読める |
| 読める(後述の制限あり) | 読める | |
| 音声 | 記載なし | 読める |
Jupyter(.ipynb) | 読める(出力込み) | 記載なし |
Excel(.xlsx) | 記載なし | 記載なし |
Word(.docx) | 記載なし | 記載なし |
PowerPoint(.pptx) | 記載なし | 記載なし |
実務でいちばん使うファイルが 3 つとも入っていません。 .xlsx は中身が ZIP で固められた XML なので、テキストとして開いても読めるものは出てきません。
議事録の音声を扱うなら Gemini CLI です。read_file が音声に対応しているのはこちらだけです。
穴2: CSV にすれば読めるが、大きいと黙って一部しか見ない
Excel を CSV に変換すればテキストなので読めます。ただし大きい表は最後まで読まれません。
Read ツールは、全体がトークン上限を超えると先頭のぶんだけ返し、PARTIAL view という注記を付けます。続きの読み方(offset と limit)も一緒に返りますが、AI がその続きを読むとは限りません。
これが実務で怖いのは、途中まで読んで集計してしまうからです。「合計を出して」と頼んで返ってきた数字が、実は先頭 300 行だけの合計だった、という壊れ方をします。エラーは出ません。
なお offset と limit を明示してもなお上限を超える場合はエラーになります。1 行が巨大な場合は、読むのではなく検索(Grep)を使うよう案内されます。
穴3: PDF は 10 ページを超えると範囲指定が要る
- 短い PDF は全体を読む
- 10 ページを超える PDF は
pagesパラメータで範囲を指定する("1-5"のような形式) - 一度に最大 20 ページ
つまり 100 ページの社内規程集は、最低 5 回に分けて読むことになります。「規程集を読んで答えて」と一言頼んだだけでは、全体を見ていない可能性があります。
穴4: 画像は勝手に劣化する
大きな画像はモデルの上限に合わせてリサイズ・再圧縮されます。さらにリサイズ後も 500KB を超える画像は、ピクセル寸法を保ったまま低品質の JPEG に再エンコードされます(v2.1.196 以降)。
スキャンした帳票の細かい数字を読ませる用途では、元画像では読めた文字が読めなくなりうるということです。
穴5: 変換コマンドの出力も上限に当たる
「じゃあシェルで変換すればいい」も、そのままでは詰まります。Bash の実行結果が Claude に渡る量には上限があります。
| 結果 | 渡るもの |
|---|---|
| 成功 | 約 30,000 文字までそのまま。超えるとファイルに保存され、パスと短いプレビューだけが渡る |
| 失敗 | 約 10,000 文字まで。超えると先頭と末尾の抜粋のみ |
変換結果を画面に流すのではなく、ファイルに書いてからパスを渡すのが正しい形です。
手順
1. 読める形式に変換してから渡す
変換そのものは各自の環境の話で、この図書館が出典を持っている範囲ではありません。よく使われるのは次のあたりです。
# Excel → CSV(LibreOffice が入っている場合)soffice --headless --convert-to csv --outdir ./converted 見積書.xlsx# Excel → CSV(Python + pandas の場合。シートごとに分ける)python -c "import pandas as pd, sysfor name, df in pd.read_excel('見積書.xlsx', sheet_name=None).items(): df.to_csv(f'converted/{name}.csv', index=False)"変換したファイルはリポジトリに置かず、作業用ディレクトリに出してください。 実務ファイルには取引先名や個人情報が入っていることが多く、うっかりコミットする事故がここで起きます。
2. 大きい表は「読ませる」のをやめる
行数の多い CSV は、読ませるのではなく集計させます。 AI にファイル全体を読ませる代わりに、集計するコマンドを書かせて実行させる形です。
# まず規模を確かめる。これだけなら出力は数行で済むwc -l converted/*.csv && head -3 converted/売上.csv行数を先に見せると、AI が「全部読む」か「スクリプトで集計する」かを判断できます。何行あるか分からないまま読ませるのが、穴2 を踏む典型的な入り方です。
3. PDF はページ範囲を自分で区切る
10 ページを超える PDF は、どこに何が書いてあるかを先に確認してから読ませます。
# 頼み方の例規程集.pdf の目次(1-3ページ)を読んで、「時間外労働」について書かれている章が何ページかを教えてください。そのうえで該当範囲だけを読ませます。全体を通読させると、20 ページずつの読み取りを繰り返してコンテキストを埋め尽くします。
4. 複数ファイルをまとめて渡す(Gemini CLI)
Gemini CLI には複数ファイルを連結して読む read_many_files があり、プロンプト中の @ で起動します。
@./converted/ この四半期の見積書をすべて読んで、金額の合計を出してくださいディレクトリを指定するとサブディレクトリまで辿ります。有効なら .gitignore と .geminiignore を尊重するので、除外設定がそのまま効きます。
対応する画像・PDF・音声・動画は正しくエンコードされてマルチモーダル入力として渡り、それ以外のバイナリは穏当にスキップされます。.xlsx を混ぜても壊れはしませんが、読まれもしません。
確認方法
読めたつもりになっていないかを、その場で確かめます。
# 1. 本当に最後まで読んだかこのファイルの最終行の内容をそのまま引用してください。
# 2. 件数が合っているか読み取った行数を答えてください。wc -l の結果と一致しますか。
# 3. PDF の場合何ページ目から何ページ目までを読みましたか。1 と 2 が食い違うなら穴2 を踏んでいます。 3 で「全体」と答えつつページ数を言えないなら、読んでいないページがあります。
残る限界
- Excel / Word / PowerPoint を直接読む方法は、3 ツールとも出典上は存在しない。 変換が前提になる
- 変換で書式・数式・セル結合は落ちる。 見た目で意味を持たせている表(結合セルの見出しなど)は、変換後に構造が壊れることがある
- スキャンした PDF(画像だけの PDF)をどう扱うかは出典に記載が無い。 画像として読むことになるが、穴4 の再圧縮が効く
- 音声を読めるのは Gemini CLI のみ。議事録用途でツールを選ぶ理由になる
根拠
facts/claude-code/tools-reference.md— Read の対応形式、PDF のpages、画像の再圧縮、Bash の出力上限facts/gemini-cli/tools.md—read_fileの対応形式、read_many_files、@の起動facts/claude-code/context-window.md— コンテキストの上限とその影響