name: receipt-organizer description: 確定申告用の領収書整理。指定フォルダの領収書をリネーム・振り分けし、Gmailの領収書メールも取り込みます。「領収書整理」「receipt」で起動。 user_invocable: true
Receipt Organizer - 領収書整理スキル
指定フォルダの領収書ファイルをリネーム・振り分けし、Gmailの領収書メールも取り込む。
フォルダ構成(デフォルト)
以下はデフォルトの振り分けカテゴリ。Step 1 でユーザーに確認し、カスタマイズ可能。
| フォルダ | 内容 |
|---|---|
通信費・ITサービス/ |
IT関連サービス、通信費、PC・周辺機器 |
教育・研修/ |
書籍、セミナー、学習サービス |
交通費・旅費/ |
交通費、出張関連 |
交際費/ |
会食、お土産 |
日用品/ |
日用品全般 |
医療費/ |
医療・薬 |
水道光熱費/ |
水道光熱費 |
健康保険・年金/ |
社会保険 |
業務委託依頼/ |
外注費 |
その他/ |
上記に当てはまらないもの |
命名規則
YYYYMMDD_店名_内容.拡張子
- 日付はPDF内容 or メール日付から取得
- 店名はわかりやすい名前(Apple, Amazon 等)
- 内容は簡潔に(iCloudPlus, MacBookAir 等)
実行手順
Step 1: 対象フォルダ・期間・整理内容の確認
AskUserQuestion で確認:
questions: [
{
question: "領収書フォルダのパスを教えてください(例: ~/Documents/receipts/)",
header: "フォルダパス",
multiSelect: false,
options: [
{ label: "~/Documents/receipts/", description: "デフォルトパス" },
{ label: "Google Drive", description: "Google Drive上の領収書フォルダ(パスを入力してください)" }
]
},
{
question: "どの期間の領収書を整理しますか?",
header: "対象期間",
multiSelect: false,
options: [
{ label: "今月", description: "今月分の領収書を整理" },
{ label: "先月", description: "先月分の領収書を整理" },
{ label: "今年全体", description: "今年1月〜現在の領収書を整理" }
]
},
{
question: "何を整理しますか?",
header: "整理対象",
multiSelect: true,
options: [
{ label: "ルートの未整理ファイル", description: "領収書フォルダ直下のファイルをリネーム&振り分け" },
{ label: "Gmail領収書の取り込み", description: "Gmailの領収書メールを取り込み(Gmail API対応 or テキスト化)" },
{ label: "フォルダの棚卸し", description: "各フォルダの内容をリストアップして確認" }
]
}
]
ユーザーが指定したフォルダパスを以降の処理で使用する。カテゴリフォルダが存在しない場合は作成する。
Step 2: ルートの未整理ファイル処理
lsでルートのファイル一覧取得(README.mdとフォルダは除外)- 各PDFをReadツールで読み取り、日付・店名・内容を特定
- リネーム案をテーブルで表示し、AskUserQuestionで確認
questions: [
{
question: "以下のリネーム&振り分けを実行しますか?(テーブルを確認してください)",
header: "確認",
multiSelect: false,
options: [
{ label: "全て実行", description: "テーブル通りに一括処理" },
{ label: "1つずつ確認", description: "ファイルごとに確認しながら処理" }
]
}
]
- 確認後、
mvでリネーム&移動を実行
Step 3: Gmail領収書の取り込み
対象の送信者リスト(よく来る領収書の例):
from:apple.com subject:領収書→ iCloud+等from:amazon subject:注文→ Amazonfrom:stripe.comORsubject:領収書 stripe→ Stripe経由の各種サービス
処理フロー:
- 対象期間で各送信者を検索
- 見つかったメールの一覧を表示
- ユーザーに取り込み対象を選択してもらう
- メールの種類に応じて処理を分岐:
Gmail API が設定済みの場合(credentials.json が存在)
Gmail API(gmail.readonly スコープ)を使用して添付PDFを直接ダウンロード:
- PDF添付のメール → Gmail APIで添付ファイルをダウンロード
- HTML本文が領収書のメール → HTML取得 → PDF変換
Claude Code に Python スクリプトを生成・実行させる。スクリプトは以下を行う:
- OAuth2 認証(初回のみブラウザ認証)
gmail.readonlyスコープでメールと添付ファイルを取得- 命名規則に従ってファイルを保存
Gmail API が未設定の場合(フォールバック)
Claude Code の Gmail MCP ツール(gmail_search_messages, gmail_read_message)を使用:
- HTML本文に領収書内容が含まれるもの → テキストファイルとして保存
- PDF添付のみのもの → メールリンクを案内(手動ダウンロード)
テキストファイルのフォーマット:
領収書(Gmailより取り込み)
==============================
発行元: {発行元名}
適格請求書発行事業者登録番号: {あれば記載}
日付: {YYYY年M月D日}
注文番号: {あれば記載}
書類番号: {あれば記載}
内容:
{サービス名・商品名}
金額:
小計: ¥{税抜}
消費税({税率}%): ¥{税額}
合計: ¥{税込}
支払方法: {カード情報}
出典: Gmail メールID {messageId}
取り込み日: {YYYY-MM-DD}
Step 4: 完了レポート
処理結果をサマリーとして表示:
- 移動したファイル数
- 作成したファイル数(PDF / テキスト)
- 手動ダウンロードが必要なもの一覧(Gmail API未設定の場合、メールリンク付き)
- 各フォルダのファイル数
重要なルール
- 確認してから実行: ファイル移動前に必ずリネーム案を提示
- 既存ファイルを上書きしない: 同名ファイルがある場合は末尾に
_2等を付与 - PDFを読んで日付特定: ファイル名の日付ではなくPDF内容の日付を使う
- 勝手に振り分けない: 判断に迷う場合はユーザーに確認
gmail.readonlyのみ使用: メールの送信・削除・変更は一切行わない- credentials.json をGitにpushしない: 認証情報はローカル保管