手書き家計簿・レシートOCR自動化の検証結果|精度・失敗例・月次集計・FAQ・運用チェックリスト(第四回)

再生速度:1.0x1.25x1.5x2.0x
ここまで、紙の家計簿やレシートをGoogleスプレッドシートへ登録する仕組みを作ってきました。
完成した流れは、次のとおりです。
Google Driveのスマートフォンアプリには、領収書や請求書などを撮影し、検索可能なPDFとして保存する機能があります。AndroidではPDFまたはJPGを選択でき、トリミング、回転、色調整、複数ページの追加なども行えます。iPhone・iPadでもDriveアプリから書類をスキャンできます。
今回使用したGemini 3.1 Flash-Liteは、テキスト、画像、PDFなどの入力と構造化出力に対応しています。そのため、読み取った内容を、日付、店舗名、カテゴリ、金額などの決められたJSON形式で返させることができます。
しかし、今回の検証で分かったのは、次の点です。
第4回では、実際の検証結果、失敗した点、毎月の集計方法、運用上の注意点を整理します。
実際に検証した結果
今回、主に次の2種類を試しました。
さらに、手動版とGASによる自動版の両方を確認しました。
検証結果のまとめ
| 検証項目 | 結果 |
|---|---|
| スマートフォンからGoogle Driveへ保存 | 成功 |
| PDFをGASで取得 | 成功 |
| Googleドキュメント形式へのOCR変換 | 成功 |
| OCR原文の自動取得 | 成功 |
| 元画像・PDFをGeminiへ送信 | 成功 |
| GeminiからJSON形式で取得 | 成功 |
| Googleスプレッドシートへの自動登録 | 成功 |
| 複数件の家計データ抽出 | 条件により成功 |
| 処理後のファイル移動 | 成功 |
| エラー・処理時間のログ記録 | 成功 |
| 手書き文字の完全な読み取り | 保証できない |
| 金額の完全な読み取り | 人による確認が必要 |
| 完全無人での家計管理 | 非推奨 |
印字レシートと手書き家計簿の両方で、登録処理まで動くことを確認しました。ただし、すべての文字や金額が正確だったわけではありません。
印字レシートで分かったこと
印字されたレシートは、手書きよりもOCRとの相性がよい結果になりました。店舗名、日付、商品名、税額、合計金額などを文字として取得できました。
たとえば、説明用のレシートに次の情報があったとします。
2026年6月1日
小計 1,200円
消費税 96円
合計 1,296円
クレジット
家計簿へ必要なのは、次の内容です。
ここでは、OCRが文字を取り出し、Geminiが次の判断を行います。
印字レシートでも間違う可能性がある
印字されたレシートだからといって、必ず正しく読めるわけではありません。次のような場合は、精度が落ちる可能性があります。
特に注意したいのが、同じ支払金額の重複です。
カード売上票の金額 1,296円
この2つを別々の支出として登録すると、二重計上になります。
今回のGASでは、「同じレシート内のカード売上票は確認資料として扱い、同じ金額を二重登録しない」とGeminiへ指示しています。それでも、最後は原本との照合が必要です。
手書き家計簿で分かったこと
手書き家計簿では、OCR原文だけを使うと、印字レシートよりも崩れやすい結果になりました。
説明用の原本が次の内容だったとします。
2026年6月2日 〇〇ドラッグ 日用品 980円 現金
2026年6月3日 〇〇鉄道 交通費 420円 ICカード
OCRでは、次のような誤認識が起こる可能性があります。
さらに、文字そのものだけでなく、行の順番が崩れることもありました。日付・店舗名・金額・支払方法、本来は同じ横一列に並んでいる情報が、OCR原文では別々の位置へ移動することがあります。
OCR文字だけではなく、原本もAIへ渡す
この問題への対策として、今回の自動版では次の2つをGeminiへ渡しました。
これにより、Geminiは文字列だけでなく、画像上の位置関係も確認できます。
今回の検証では、OCR原文だけよりも、元画像・PDFを一緒に渡す方が実用的でした。
AIが補正してよい範囲を決める
AIへ「一切推測しないでください」と指示すると、人が見れば明らかなOCR誤認識も修正しなくなることがあります。一方で、「自然な内容へ直してください」とだけ指示すると、根拠のない補完が増える可能性があります。
そこで、今回のプロンプトでは、補正してよい範囲を限定しました。
| 補正してよい例 | 補正しない例 |
|---|---|
| 1.18c → 画像と金額欄から明らかなら1180 | 画像に書かれていない店舗名 |
| 8.460 → 画像と金額欄から明らかなら8460 | 読み取れない金額 |
| カード → クレジットカード | 対応関係が分からない日付 |
| 口座振える → 画像と支払方法欄から明らかなら口座振替 | 記載されていない支出/複数の解釈ができる文字 |
判断できない場合は、空欄または「要確認」にします。AIには自由に考えさせるのではなく、どこまで補正してよいかを決めることが重要です。
自動処理が成功しても、内容確認は必要
GASの実行ログに「実行完了」と表示されても、読み取り内容が正しいとは限りません。
処理自体は正常に終わっています。JSONも正しい形式です。スプレッドシートにも登録されています。しかし、家計データとしては間違っています。
Geminiの構造化出力は、指定したJSON形式に合わせて出力を返しやすくする機能です。ただし、形式が正しいことは、抽出した値の正確性を保証するものではありません。
そのため、今回の仕組みでは自動登録したデータを、次の状態にしています。
人が原本を見て問題がなければ、確認状態を「確認済み」へ変更します。
最低限確認する3項目
すべての商品名を細かく確認すると、自動化した意味が薄くなります。まずは、次の3項目を確認します。
1.利用日
年、月、日が正しいか確認します。特に、次の誤認識に注意します。
2.金額
家計簿で最も重要な項目です。
3.二重登録
同じ原本が2回登録されていないか確認します。今回のGASでは、処理済みファイルIDをスクリプトプロパティへ保存し、同じファイルを再処理しにくくしています。
ただし、同じ画像を別ファイルとして再アップロードした場合は、ファイルIDが変わるため、別の原本として処理される可能性があります。
毎日の使い方
初期設定後の運用は、できるだけ簡単にします。
印字レシートの場合
Google Driveのモバイルスキャンでは、保存先フォルダを選択できます。Androidではホーム画面へDriveスキャンのショートカットを置き、保存先フォルダを指定することもできます。
手書き家計簿の場合
手書き家計簿は、1件ずつ撮影する必要はありません。複数件を1枚にまとめられます。ただし、読み取りやすくするため、次の形式がおすすめです。
横一列に項目をそろえます。
手書き家計簿を読み取りやすくする書き方
AIの性能だけでなく、原本の書き方でも精度は変わります。
1行に1件書く
途中で改行しない方が、項目の対応関係を判断しやすくなります。
金額に「円」を付ける
1280 よりも、1,280円 の方が、金額であることを判断しやすくなります。
日付の形式をそろえる
次のように統一します。
2026年6月2日
2026年6月3日
文字を詰めすぎない・罫線を濃くしすぎない
行と行の間を少し空けます。文字が上下で重なると、別の支出と結び付けられる可能性があります。太い罫線が文字と重なると、読み取りに影響することがあります。細い線または罫線なしでも構いません。
撮影精度を上げる方法
撮影時は次の点を意識します。
Google Driveアプリのスキャン機能では、切り抜き、回転、色調整、汚れや指の除去、再撮影などができます。撮影時に修正してから保存すると、その後のOCRやAIも判断しやすくなります。
「03_要確認」フォルダの運用
自動化では、正常に読めたファイルよりも、読めなかったファイルの扱いが重要です。今回の仕組みでは、次の場合に原本を「03_要確認」へ移動します。
要確認フォルダをためない
「あとで確認しよう」と思って放置すると、未処理のレシートと同じ状態になります。週1回など、確認する日を決めておく方法があります。
月次集計の確認方法
今回のGASでは、03_月次集計シートに月別合計とカテゴリ別合計を表示します。
月別支出合計
| 対象月 | 支出合計 |
|---|---|
| 2026-06 | 82,500 |
| 2026-07 | 76,200 |
ここで確認したいのは、単に支出が増えたか減ったかだけではありません。次のような変化を探します。
月別・カテゴリ別集計
| 対象月 | カテゴリ | 金額 |
|---|---|---|
| 2026-06 | 食費 | 34,800 |
| 2026-06 | 日用品 | 9,200 |
| 2026-06 | 交通費 | 6,400 |
| 2026-06 | 水道光熱費 | 14,100 |
細かく分析する前に、カテゴリ分類が統一されているか確認します。たとえば、「食費/食料品/スーパー/飲食費」が別カテゴリになっていると、正確な比較ができません。今回のコードでは、カテゴリ候補を限定し、食料品などを食費へ寄せる処理を入れています。
グラフを作る方法
03_月次集計シートに集計結果が表示されたら、Googleスプレッドシートのグラフを作れます。
月ごとの増減を見るなら、折れ線グラフが分かりやすいでしょう。カテゴリ別支出は円グラフまたは棒グラフを作ります。ただし、円グラフはカテゴリが多すぎると読みにくくなるため、食費・日用品・住居費・水道光熱費・通信費・交通費・医療費・その他など、大きな分類を中心にします。
グラフをきれいに作ることが目的ではありません。どの支出が増えているかを、ひと目で気づける状態にすることが目的です。
家計管理で見るべき数字
家計簿の数字をすべて細かく分析する必要はありません。まずは、次の4点を確認します。
2.増えたカテゴリ 食費、日用品、交通費など、どこが増えたかを確認します。
3.特別支出 家電、旅行、冠婚葬祭、修理費など、毎月発生しない支出を分けます。
4.未確認・要確認の件数 AIが読み取れなかった件数が多い場合は、撮影方法や手書き形式を見直します。
要確認が多いときは「AIの性能だけを疑う」のではなく、次も確認します。
無料版で使い続けられるのか
Gemini APIには無料利用枠がありますが、利用できるモデルや回数、上限は変更される可能性があります。2026年7月時点の公式料金ページでは、無料枠は一部モデルへ限定的にアクセスでき、入出力トークンを無料で利用できる一方、無料枠へ送信した内容はGoogleの製品改善に使用されると案内されています。有料枠では、送信内容を製品改善へ使用しない扱いです。
そのため、無料で試す場合は次の点を理解しておく必要があります。
Apps Scriptにも上限がある
Apps Scriptにも、ファイル変換、ドキュメント作成、実行時間などの利用上限があります。公式には、一般のGoogleアカウントとGoogle Workspaceアカウントで上限が異なり、割り当ては変更される可能性があります。上限を超えると例外が発生し、処理が停止します。
個人の家計簿を少量ずつ処理する用途と、大量の領収書を一括処理する業務用途では、必要な設計が異なります。
5分トリガーは正確に5分後ではない
今回のコードでは、5分ごとの時間主導型トリガーを使用します。時間主導型トリガーは、最短1分間隔から設定できます。ただし、実際の実行時刻は多少ずれることがあります。また、トリガーは作成したGoogleアカウントの権限で動作します。
そのため、「11時00分に保存→必ず11時05分00秒に処理」とは限りません。今回の家計管理では、即時性よりも、手動で関数を実行しなくてよいことを優先しています。処理されるまで数分待てない場合は、processFirstWaitingFileを手動で実行する方法もあります。
APIキーと個人情報の扱い
APIキーは、第三者へ公開してはいけません。次の場所には記載しないでください。
今回のコードでは、Apps Scriptのスクリプトプロパティに保存します。
レシート画像にも注意する
GASがカード番号や会員番号をスプレッドシートへ出力しないよう指示していても、原本画像自体がGemini APIへ送信されます。次の部分は、必要に応じて写さない、隠す、切り取る方法があります。
特に、家計簿として不要なカード売上票部分は、撮影範囲から外す方法があります。
❓ よくある質問(全12問)
すべて開くと +10XP です。
完成後の運用チェックリスト
4カテゴリすべてにチェックが入ると +20XP です。
初期設定
動作確認
精度確認
日常運用
🎯 理解度チェッククイズ(全5問)
各問正解で +12XP。全問正解で「👑全問正解」バッジを獲得できます。
Q1. 印字レシートの金額判定で、Geminiが使うべき数字はどれ?
小計の金額 消費税の金額 最終的な合計金額Q2. 手書き家計簿の精度を上げるためにOCR原文と一緒にGeminiへ渡しているものは?
過去に登録した家計データ一覧 元の画像・PDF(原本そのもの) カテゴリ候補のスプレッドシートURLQ3. 自動登録されたデータが「実行完了」と表示された場合について正しいのは?
内容も必ず正しいと保証される 処理は成功しても内容が正しいとは限らず、確認が必要 確認状態は自動的に「確認済み」になるQ4. 手書き家計簿を読み取りやすくする書き方として適切なのは?
1件の支出を複数行に分けて詳しく書く 1行に1件、日付の形式を統一し、金額に円を付ける 罫線をできるだけ太く濃く引くQ5. 5分ごとの時間主導型トリガーについて正しいのは?
保存した瞬間から正確に5分00秒後に実行される 実行時刻は多少ずれる可能性があり、即時性より手動実行不要を優先している トリガーは誰のアカウント権限にも依存しない今回の検証で得られた結論
今回の検証では、印字レシートと手書き家計簿を、Google DriveからGoogleスプレッドシートへ登録する一連の処理を作れました。
しかし、最も重要だったのは、AIの性能そのものではありません。
分かったこと1:印字レシートと手書きでは方法を変える
印字レシートはOCRと相性がよい傾向がありました。一方、手書きは文字だけでなく、行の位置関係も崩れることがあります。そのため、手書きでは元画像をAIへ見せることが重要でした。
分かったこと2:完全自動化より半自動化が現実的
AIが金額を1桁間違える可能性は残ります。そのため、「AIが自動登録→人が確認」という役割分担が現実的です。
分かったこと3:紙をやめなくてもデータ管理できる
今回の目的は、紙をなくすことではありません。
OCR・AI =入力と整理の補助
GAS =作業を自動でつなぐ
スプレッドシート =集計と分析
人 =最終判断
と役割を分けることで、紙とデジタルを両立できました。
まとめ
家計管理を続けるために、必ず家計簿アプリへ移行する必要はありません。手書き家計簿が続く人は、紙へ書き続けても構いません。レシートを保管したい人は、紙を残しても構いません。
今回変えたのは、入力と集計の部分です。
AIがすべて自動で処理するわけではありません。OCRも間違います。Geminiも間違います。GASも、APIや利用上限の影響でエラーになることがあります。
それでも、毎回ゼロから入力する作業を、原本と見比べて確認する作業へ減らすことはできます。
これが、今回検証した新しい家計管理の形です。
解決ドットコム ワンポイント
家計簿が続かないときは、「紙かアプリか」という二択にする必要はありません。まず、どの作業が負担なのかを分けて考えます。
問題を解く前に、まず整理する。すべてを置き換えるのではなく、負担になっている部分だけを変える方法があります。
AIに全部任せるのではなく、面倒な下書きを任せて、最後は人が確認するピヨ。
第1回:考え方と全体像/第2回:初期設定/第3回:GASコード完全版/第4回:検証結果・運用(本記事)


