• #確定申告
  • #Claude Code
  • #Python
  • #Google Drive
  • #スプレッドシート
  • #自動化
開発tax-assistantメモ

確定申告資料92件の一括リネームとGoogleスプレッドシート連携

クライアントの確定申告資料(PDF・画像・CSV)がGoogle共有ドライブに92件あり、ファイル名がバラバラだった。Claude Codeを使って命名規則に沿った一括リネームを行い、Googleスプレッドシートの管理表にドライブリンクを登録するところまでを3セッションで完了した。

背景

確定申告の時期になると、様々な金融機関や取引先から届く資料をGoogle共有ドライブに集約している。ただ、スキャンしたまま・ダウンロードしたままのファイル名では中身がわからず、毎年探すのに時間がかかっていた。今年はリネームの段階からClaude Codeに任せることにした。

命名規則の策定

まず統一的な命名規則を決めた。

2025_タイトル_金額.pdf
  • 年度は 2025 固定(確定申告の対象年)
  • タイトルは資料の種類がわかる名前(例: 源泉徴収票_○○銀行
  • 金額は主要な金額を記載(収入額、控除額など)
  • 期間が年度をまたぐ場合や月次資料の場合は年月情報を含める(例: 2025_01-12_カード明細

PDFの中身を読み取ってリネーム

92件のうち、テキスト埋め込みPDFはPyPDF2で直接読めるが、スキャンPDFや画像ファイルは中身がわからない。そこでImageMagickでPDFを画像に変換し、Claude Codeに中身を読み取ってもらう流れにした。

# PDFを画像に変換(ImageMagick)
magick convert -density 150 input.pdf output.png

PyPDF2でテキスト抽出する際、一部のPDFで特殊なエンコーディング問題が発生した。null byte(\x00)が混入しているファイルがあり、テキスト抽出が途中で止まる現象が起きた。バイト列から手動でnull byteを除去してからデコードする対処を行った。

# null byte除去の対処
text = raw_bytes.replace(b'\x00', b'').decode('utf-8', errors='ignore')

バックアップとリネーム実行

リネーム前に before_renamed/ ディレクトリを作成し、全ファイルのコピーを保存した。万が一命名を間違えても元に戻せる安全策。

リネーム自体はPythonスクリプトで一括実行。ファイルの中身をClaude Codeが読み取り、命名規則に沿った新ファイル名を提案、確認後にリネームする流れ。92件を約30分で処理できた。

tax-doc-renameスキルのパッケージング

この作業は来年以降も繰り返すので、Claude Codeのスキルとしてパッケージングした。スキルには以下を含めている。

  • 命名規則のルール定義
  • PDF/画像の読み取り手順
  • PyPDF2のエンコーディング問題の回避策
  • バックアップディレクトリの自動作成

来年の確定申告時期にスキルを呼び出せば、同じ品質でリネームできる。

Googleスプレッドシートへのドライブリンク登録

リネームが終わったら、確定申告の管理スプレッドシートにドライブリンクを登録する。gogcli(Google APIのCLIツール)を使って、スプレッドシートの2025年列にリンクを一括書き込みした。

# gogcliでスプレッドシートにリンクを書き込み
gogcli sheets update --spreadsheet-id <ID> --range "2025!B2:B93" --values <リンクリス>

スマートチップの誤解

当初、Googleスプレッドシートの「スマートチップ」機能を使えばURLを自動的にファイル名で表示してくれると思っていた。しかしスマートチップはGoogle Workspace内のリソース(ドキュメント、スライドなど)に対してのみ機能する。共有ドライブ上のPDFファイルへの直リンクでは、スマートチップによるファイル名表示は使えなかった。結局、リンクテキストを手動で設定する形に落ち着いた。

追加のレシート画像対応

メインの92件を処理した後、追加で6件のレシート画像が見つかった。同じ手順でリネームし、スプレッドシートにも追加登録した。

振り返り

  • 92件 + 追加6件、合計98件のリネームとスプレッドシート登録を3セッション(合計2-3時間程度)で完了
  • PDFのエンコーディング問題は想定外だったが、null byte除去で対処できた
  • スキル化しておいたので、来年は命名規則の説明からやり直す必要がない
  • スマートチップの仕様は事前に調べておくべきだった(試行錯誤の時間がもったいなかった)

使用ツール

ツール用途
Claude Codeファイル中身の読み取り、リネーム名の提案・実行
ImageMagickスキャンPDFの画像変換
PyPDF2テキスト埋め込みPDFの読み取り
gogcliGoogleスプレッドシートへの一括書き込み
Google共有ドライブ確定申告資料の保管場所