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

手書き家計簿・レシートOCR自動化の検証結果|精度・失敗例・月次集計・FAQ・運用チェックリスト
第4回/全4回(最終回)
🤖 AI活用レベル Lv.4獲得可能XP 100 AI×GAS×Google Workspace
2026年7月19日 最終更新
※この記事で使用する店舗名、日付、金額、ファイル名などは、すべて説明用の架空例です。実際の検証データや個人情報は掲載していません。
📊 学習XP:0 / 100
🏅 バッジ:🎧耳から学習✅運用完了🔍深掘り🎯クイズ挑戦👑全問正解
無料で構築するAI半自動家計簿システム 手書きメモとレシートをGoogleスプレッドシートへ自動登録する実践アーキテクチャ 全4回シリーズ完結編
🎧 この記事を音声で聞く(作業しながらの学習にどうぞ)

再生速度:1.0x1.25x1.5x2.0x

ここまで、紙の家計簿やレシートをGoogleスプレッドシートへ登録する仕組みを作ってきました。

完成した流れは、次のとおりです。

手書き家計簿・レシート・領収書スマートフォンで撮影・スキャンGoogle Driveの「01_処理待ち」へ保存GASが定期的にファイルを確認Google Drive OCRで文字を抽出原本画像・PDFとOCR原文をGeminiへ送信家計簿に必要な項目を整理Googleスプレッドシートへ自動登録人が日付・金額を最終確認
システムの全体像 撮影からGoogle Drive保存 OCR AI解析 スプレッドシート自動登録までのデータパイプライン

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スプレッドシートへの自動登録成功
複数件の家計データ抽出条件により成功
処理後のファイル移動成功
エラー・処理時間のログ記録成功
手書き文字の完全な読み取り保証できない
金額の完全な読み取り人による確認が必要
完全無人での家計管理非推奨
Driveへ保存OCRAI解析スプレッドシート登録処理済みフォルダへ移動

印字レシートと手書き家計簿の両方で、登録処理まで動くことを確認しました。ただし、すべての文字や金額が正確だったわけではありません。

印字レシートで分かったこと

印字されたレシートは、手書きよりもOCRとの相性がよい結果になりました。店舗名、日付、商品名、税額、合計金額などを文字として取得できました。

たとえば、説明用のレシートに次の情報があったとします。

〇〇スーパー
2026年6月1日
小計 1,200円
消費税 96円
合計 1,296円
クレジット

家計簿へ必要なのは、次の内容です。

2026/06/01 〇〇スーパー 食料品 食費 1296 クレジットカード

ここでは、OCRが文字を取り出し、Geminiが次の判断を行います。

小計の1,200円ではない/消費税の96円でもない/最終的な合計1,296円を使う/支払方法をクレジットカードへ統一する/レシート1枚を1取引として登録する

印字レシートでも間違う可能性がある

印字されたレシートだからといって、必ず正しく読めるわけではありません。次のような場合は、精度が落ちる可能性があります。

印字が薄い/感熱紙が変色している/レシートが折れている/影が入っている/斜めから撮影している/合計金額の近くに複数の数字がある/クレジットカード売上票が同じ画像に含まれている/レシートが長く、文字が小さく写っている

特に注意したいのが、同じ支払金額の重複です。

レシート本体の合計 1,296円
カード売上票の金額 1,296円

この2つを別々の支出として登録すると、二重計上になります。

今回のGASでは、「同じレシート内のカード売上票は確認資料として扱い、同じ金額を二重登録しない」とGeminiへ指示しています。それでも、最後は原本との照合が必要です。

手書き家計簿で分かったこと

手書き家計簿では、OCR原文だけを使うと、印字レシートよりも崩れやすい結果になりました。

説明用の原本が次の内容だったとします。

2026年6月1日 〇〇スーパー 食費 1,280円 カード
2026年6月2日 〇〇ドラッグ 日用品 980円 現金
2026年6月3日 〇〇鉄道 交通費 420円 ICカード

OCRでは、次のような誤認識が起こる可能性があります。

1,1801.18c
8,4608.460
口座振替口座振える
技術の壁 手書きをOCRだけで読み取ると数字が記号化し行の位置関係が崩れる情報の崩壊の例

さらに、文字そのものだけでなく、行の順番が崩れることもありました。日付・店舗名・金額・支払方法、本来は同じ横一列に並んでいる情報が、OCR原文では別々の位置へ移動することがあります。

OCR文字だけではなく、原本もAIへ渡す

この問題への対策として、今回の自動版では次の2つをGeminiへ渡しました。

Google OCRの文字情報 + 元の画像・PDF

これにより、Geminiは文字列だけでなく、画像上の位置関係も確認できます。

どの日付と金額が同じ行にあるか/店舗名がどの支出に対応するか/1.18cが金額欄の1,180に見えるか/口座振えるが支払方法欄の口座振替に見えるか

今回の検証では、OCR原文だけよりも、元画像・PDFを一緒に渡す方が実用的でした。

解決策 OCRのテキストと原本の画像をAIで統合補正することで手書き特有の崩れを正確に補正する

AIが補正してよい範囲を決める

AIへ「一切推測しないでください」と指示すると、人が見れば明らかなOCR誤認識も修正しなくなることがあります。一方で、「自然な内容へ直してください」とだけ指示すると、根拠のない補完が増える可能性があります。

そこで、今回のプロンプトでは、補正してよい範囲を限定しました。

補正してよい例補正しない例
1.18c → 画像と金額欄から明らかなら1180画像に書かれていない店舗名
8.460 → 画像と金額欄から明らかなら8460読み取れない金額
カード → クレジットカード対応関係が分からない日付
口座振える → 画像と支払方法欄から明らかなら口座振替記載されていない支出/複数の解釈ができる文字

判断できない場合は、空欄または「要確認」にします。AIには自由に考えさせるのではなく、どこまで補正してよいかを決めることが重要です。

自動処理が成功しても、内容確認は必要

GASの実行ログに「実行完了」と表示されても、読み取り内容が正しいとは限りません。

原本:1,050円 → AI:10,050円

処理自体は正常に終わっています。JSONも正しい形式です。スプレッドシートにも登録されています。しかし、家計データとしては間違っています。
コア原則 完全自動化の罠を避け半自動で運用する AIの誤認識1080円が10800円になる例を想定し最終決定権は人間が持つ

Geminiの構造化出力は、指定したJSON形式に合わせて出力を返しやすくする機能です。ただし、形式が正しいことは、抽出した値の正確性を保証するものではありません。

そのため、今回の仕組みでは自動登録したデータを、次の状態にしています。

未確認 または 要確認

人が原本を見て問題がなければ、確認状態を「確認済み」へ変更します。

最低限確認する3項目

すべての商品名を細かく確認すると、自動化した意味が薄くなります。まずは、次の3項目を確認します。

1.利用日
年、月、日が正しいか確認します。特に、次の誤認識に注意します。

6月1日6月7日
2026年2028年

2.金額
家計簿で最も重要な項目です。

小計ではないか/税額ではないか/預かり金ではないか/お釣りではないか/桁が増えていないか/小数点やカンマが誤認識されていないか

3.二重登録
同じ原本が2回登録されていないか確認します。今回のGASでは、処理済みファイルIDをスクリプトプロパティへ保存し、同じファイルを再処理しにくくしています。

ただし、同じ画像を別ファイルとして再アップロードした場合は、ファイルIDが変わるため、別の原本として処理される可能性があります。

毎日の使い方

初期設定後の運用は、できるだけ簡単にします。

印字レシートの場合

レシートを受け取るスマートフォンでスキャン保存先を「01_処理待ち」にするGASが自動処理あとでスプレッドシートを確認

Google Driveのモバイルスキャンでは、保存先フォルダを選択できます。Androidではホーム画面へDriveスキャンのショートカットを置き、保存先フォルダを指定することもできます。

手書き家計簿の場合

紙へ数日分の支出を書く1ページをまとめて撮影「01_処理待ち」へ保存AIが支出ごとに分割登録された行を確認

手書き家計簿は、1件ずつ撮影する必要はありません。複数件を1枚にまとめられます。ただし、読み取りやすくするため、次の形式がおすすめです。

利用日|店舗名|内容|金額|支払方法

横一列に項目をそろえます。

スキルに応じた2つの導入アプローチ 手動版はGAS不要ですぐ試せる 自動版は入力作業ゼロで完全自動化へステップアップできる

手書き家計簿を読み取りやすくする書き方

AIの性能だけでなく、原本の書き方でも精度は変わります。

1行に1件書く

6月1日 〇〇スーパー 食費 1,280円 カード

途中で改行しない方が、項目の対応関係を判断しやすくなります。

金額に「円」を付ける

1280 よりも、1,280円 の方が、金額であることを判断しやすくなります。

日付の形式をそろえる

6/1/6月2日/令和8年6月3日 のように混在させない

次のように統一します。

2026年6月1日
2026年6月2日
2026年6月3日

文字を詰めすぎない・罫線を濃くしすぎない

行と行の間を少し空けます。文字が上下で重なると、別の支出と結び付けられる可能性があります。太い罫線が文字と重なると、読み取りに影響することがあります。細い線または罫線なしでも構いません。

撮影精度を上げる方法

撮影時は次の点を意識します。

紙を平らにする/真上から撮影する/影を入れない/文字へピントを合わせる/余白を残しすぎない/紙全体を写す/必要なら白黒・グレースケールを試す

Google Driveアプリのスキャン機能では、切り抜き、回転、色調整、汚れや指の除去、再撮影などができます。撮影時に修正してから保存すると、その後のOCRやAIも判断しやすくなります。

「03_要確認」フォルダの運用

自動化では、正常に読めたファイルよりも、読めなかったファイルの扱いが重要です。今回の仕組みでは、次の場合に原本を「03_要確認」へ移動します。

OCR処理に失敗した/Gemini APIでエラーが出た/利用日を取得できなかった/金額を数値化できなかった/AIが確認必要と判断した/AIの判定確度が低かった/家計データを1件も抽出できなかった

要確認フォルダをためない
「あとで確認しよう」と思って放置すると、未処理のレシートと同じ状態になります。週1回など、確認する日を決めておく方法があります。

毎週日曜日03_要確認を開く原本とスプレッドシートを確認修正後に02_処理済みへ移動

月次集計の確認方法

今回のGASでは、03_月次集計シートに月別合計とカテゴリ別合計を表示します。

月別支出合計

対象月支出合計
2026-0682,500
2026-0776,200

ここで確認したいのは、単に支出が増えたか減ったかだけではありません。次のような変化を探します。

今月だけ大きな支出があった/食費が少しずつ増えている/医療費が一時的に増えた/日用品が複数カテゴリへ分散している/同じ支出が二重登録されている

月別・カテゴリ別集計

対象月カテゴリ金額
2026-06食費34,800
2026-06日用品9,200
2026-06交通費6,400
2026-06水道光熱費14,100

細かく分析する前に、カテゴリ分類が統一されているか確認します。たとえば、「食費/食料品/スーパー/飲食費」が別カテゴリになっていると、正確な比較ができません。今回のコードでは、カテゴリ候補を限定し、食料品などを食費へ寄せる処理を入れています。

グラフを作る方法

03_月次集計シートに集計結果が表示されたら、Googleスプレッドシートのグラフを作れます。

対象月と支出合計の範囲を選ぶ「挿入」を押す「グラフ」を選ぶ折れ線グラフまたは縦棒グラフを選ぶ

月ごとの増減を見るなら、折れ線グラフが分かりやすいでしょう。カテゴリ別支出は円グラフまたは棒グラフを作ります。ただし、円グラフはカテゴリが多すぎると読みにくくなるため、食費・日用品・住居費・水道光熱費・通信費・交通費・医療費・その他など、大きな分類を中心にします。

グラフをきれいに作ることが目的ではありません。どの支出が増えているかを、ひと目で気づける状態にすることが目的です。

家計管理で見るべき数字

家計簿の数字をすべて細かく分析する必要はありません。まずは、次の4点を確認します。

1.支出合計 先月と比べて増えたか、減ったかを見ます。
2.増えたカテゴリ 食費、日用品、交通費など、どこが増えたかを確認します。
3.特別支出 家電、旅行、冠婚葬祭、修理費など、毎月発生しない支出を分けます。
4.未確認・要確認の件数 AIが読み取れなかった件数が多い場合は、撮影方法や手書き形式を見直します。

要確認が多いときは「AIの性能だけを疑う」のではなく、次も確認します。

撮影が暗くないか/文字が小さくないか/1行に複数件書いていないか/カテゴリや金額の位置が毎回変わっていないか

無料版で使い続けられるのか

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キーは、第三者へ公開してはいけません。次の場所には記載しないでください。

GASコード内/Googleスプレッドシートのセル/ブログ記事/SNS/スクリーンショット/公開リポジトリ/チャットやコメント欄

今回のコードでは、Apps Scriptのスクリプトプロパティに保存します。

レシート画像にも注意する

GASがカード番号や会員番号をスプレッドシートへ出力しないよう指示していても、原本画像自体がGemini APIへ送信されます。次の部分は、必要に応じて写さない、隠す、切り取る方法があります。

カード番号/会員番号/氏名/住所/承認番号/ポイント会員情報/処方内容/医療機関の個人情報

特に、家計簿として不要なカード売上票部分は、撮影範囲から外す方法があります。

❓ よくある質問(全12問)

すべて開くと +10XP です。

Q1.本当に無料で使えますか?
Google Drive、Googleスプレッドシート、GAS、Gemini APIの無料利用枠を使って試すことはできます。ただし無制限ではありません。AIの利用回数、処理量、使用モデル、Apps Scriptの割り当てには上限があり、条件は変更される可能性があるため、利用時点の公式情報を確認してください。
Q2.家計簿アプリを使うより便利ですか?
用途によります。銀行口座やクレジットカード明細を自動連携したい場合は、家計簿アプリの方が便利です。今回の方法は、紙の家計簿を残したい人、レシートを撮影して管理したい人、スプレッドシートへ自分の項目で保存したい人、GASやAIを自分用に調整したい人に向いています。家計簿アプリの代替というより、第3の選択肢です。
Q3.Google OCRだけでは駄目ですか?
印字レシートではGoogle OCRだけでも文字を取り出せる可能性がありますが、OCRは文字化が中心です。どれが最終支払額か、小計と合計のどちらを使うか、カード売上票を二重計上しないか、手書きの行をどう分けるかといった整理には、AIまたは人の判断が必要になります。
Q4.Geminiへ画像だけ送れば、Google OCRは不要ですか?
画像だけでも読み取れる場合があります。今回Google OCRを残した理由は、OCR原文を検証ログとして保存できる、AIの読み取り結果と比較できる、原本画像が読みにくい場合の補助になる、どの段階で誤認識したか確認しやすい、将来AIを使わない運用へ変更しやすいためです。最短構成なら画像だけでも試せますが、検証とトラブル対応を考えるとOCR原文も残す方法があります。
Q5.手書き文字はどんな字でも読めますか?
読めるとは限りません。文字の癖、薄さ、大きさ、傾き、撮影条件、行間によって精度が変わります。1行に1件、日付の形式を統一、金額に円を付ける、行間を空ける、項目の順番をそろえるといった書き方がおすすめです。
Q6.1枚の手書き家計簿に複数件書いても大丈夫ですか?
複数件を抽出するようにプロンプトとJSONスキーマを設定していますが、行の位置関係が崩れる可能性があります。最初は3件程度で試し、読み取り結果を確認してから件数を増やす方法があります。
Q7.商品を1品ずつスプレッドシートへ登録できますか?
コードを変更すれば可能ですが、1レシートの商品をすべて登録すると行数と確認作業が増えます。今回の仕組みでは、レシート1枚=家計簿1件を基本単位としています。日常の家計管理では、店舗・カテゴリ・合計金額が分かれば十分な場合が多いためです。
Q8.同じレシートを2回入れたらどうなりますか?
同じファイルIDであれば、処理済み記録によってスキップされます。ただし、同じ画像を再アップロードすると新しいファイルIDが付く可能性があります。完全な重複防止には、利用日・店舗名・金額・ファイルのハッシュ値を比較し、同じ組み合わせを要確認にする追加処理が考えられます。
Q9.エラーになったファイルは消えますか?
今回のコードでは、エラーが発生した原本を03_要確認へ移動します。原本を自動削除する設計にはしていません。ただし、Driveの権限やファイル移動で別のエラーが起きる可能性もあるため、実行ログとフォルダを確認してください。
Q10.モデル名が見つからないと表示されました
Gemini APIのモデルは追加、変更、終了されることがあります。2026年7月時点ではgemini-3.1-flash-liteは安定版として提供され、画像、PDF、構造化出力に対応しています。将来利用できなくなった場合は、公式モデル一覧で画像入力対応・PDF入力対応・構造化出力対応・Gemini APIで利用可能な条件を満たすモデルを確認します。
Q11.パソコンを起動していなくても動きますか?
5分トリガーを設定していれば、GASはGoogle側で実行されるため、自分のパソコンを起動しておく必要はありません。ただし、トリガーは作成したアカウントの権限で動き、エラー時にはApps Scriptの実行履歴や通知を確認する必要があります。
Q12.事業用の経費管理にも使えますか?
技術的には応用できますが、事業用では取引先、適格請求書発行事業者登録番号、税率、税区分、勘定科目、インボイス対応、証憑の保存要件、電子帳簿保存法への対応などが追加で必要になる可能性があります。家庭用家計簿と税務上の証憑管理は別の問題であり、今回のコードをそのまま正式な会計処理や法定保存の仕組みとして使用できるとは限りません。
既存の家計簿アプリが合わない人のための第3の選択肢 比較表

完成後の運用チェックリスト

4カテゴリすべてにチェックが入ると +20XP です。

初期設定

動作確認

精度確認

日常運用

🎯 理解度チェッククイズ(全5問)

各問正解で +12XP。全問正解で「👑全問正解」バッジを獲得できます。

Q1. 印字レシートの金額判定で、Geminiが使うべき数字はどれ?

小計の金額 消費税の金額 最終的な合計金額

Q2. 手書き家計簿の精度を上げるためにOCR原文と一緒にGeminiへ渡しているものは?

過去に登録した家計データ一覧 元の画像・PDF(原本そのもの) カテゴリ候補のスプレッドシートURL

Q3. 自動登録されたデータが「実行完了」と表示された場合について正しいのは?

内容も必ず正しいと保証される 処理は成功しても内容が正しいとは限らず、確認が必要 確認状態は自動的に「確認済み」になる

Q4. 手書き家計簿を読み取りやすくする書き方として適切なのは?

1件の支出を複数行に分けて詳しく書く 1行に1件、日付の形式を統一し、金額に円を付ける 罫線をできるだけ太く濃く引く

Q5. 5分ごとの時間主導型トリガーについて正しいのは?

保存した瞬間から正確に5分00秒後に実行される 実行時刻は多少ずれる可能性があり、即時性より手動実行不要を優先している トリガーは誰のアカウント権限にも依存しない

今回の検証で得られた結論

今回の検証では、印字レシートと手書き家計簿を、Google DriveからGoogleスプレッドシートへ登録する一連の処理を作れました。

スマートフォンで撮影Driveへ保存OCRGeminiGASスプレッドシート

しかし、最も重要だったのは、AIの性能そのものではありません。

分かったこと1:印字レシートと手書きでは方法を変える

印字レシートはOCRと相性がよい傾向がありました。一方、手書きは文字だけでなく、行の位置関係も崩れることがあります。そのため、手書きでは元画像をAIへ見せることが重要でした。

分かったこと2:完全自動化より半自動化が現実的

AIが金額を1桁間違える可能性は残ります。そのため、「AIが自動登録→人が確認」という役割分担が現実的です。

分かったこと3:紙をやめなくてもデータ管理できる

今回の目的は、紙をなくすことではありません。

紙 =自分が続けやすい記録方法
OCR・AI =入力と整理の補助
GAS =作業を自動でつなぐ
スプレッドシート =集計と分析
人 =最終判断

と役割を分けることで、紙とデジタルを両立できました。

コンセプト 紙の自由さとデジタルの集計力をAI OCR GASでいいとこ取りする 紙を捨てるのではなく面倒な転記と集計だけをシステムに任せる

まとめ

家計管理を続けるために、必ず家計簿アプリへ移行する必要はありません。手書き家計簿が続く人は、紙へ書き続けても構いません。レシートを保管したい人は、紙を残しても構いません。

今回変えたのは、入力と集計の部分です。

紙へ書く撮影するAIが下書きを作る人が確認するスプレッドシートで集計する

AIがすべて自動で処理するわけではありません。OCRも間違います。Geminiも間違います。GASも、APIや利用上限の影響でエラーになることがあります。

それでも、毎回ゼロから入力する作業を、原本と見比べて確認する作業へ減らすことはできます。

紙でも続く。無料利用枠から試せる。集計だけをデジタル化する。
これが、今回検証した新しい家計管理の形です。
作業を減らしお金の使い方を振り返る時間を作る 家計管理の本当の目的はきれいな表を作ることではなくお金の使い方を把握し次への判断をすること

解決ドットコム ワンポイント

家計簿が続かないときは、「紙かアプリか」という二択にする必要はありません。まず、どの作業が負担なのかを分けて考えます。

書くことは苦にならない。でも集計が面倒集計だけデジタル化する
レシート撮影まではできる。でも入力が面倒入力だけAIに手伝ってもらう
自動登録は便利。でも誤登録が不安確定は人が行う

問題を解く前に、まず整理する。すべてを置き換えるのではなく、負担になっている部分だけを変える方法があります。

🐤
カイピヨくんの一言
AIに全部任せるのではなく、面倒な下書きを任せて、最後は人が確認するピヨ。
家計簿が続かない本当の理由は意志ではなく作業の多重化であることを示すフロー図
📚 全4回シリーズ完結
第1回:考え方と全体像/第2回:初期設定/第3回:GASコード完全版/第4回:検証結果・運用(本記事)

\ 最新情報をチェック /