できるようになること
30分後:
- Googleフォームからレシート・領収書の写真をアップロードすると、スプレッドシートに日付・店名・金額・勘定科目が自動で記録される仕組みが動いている
- 「Gemini APIにレシート画像を読ませて、データを抽出する」という構造が理解できている
その先:
- スプレッドシートの関数を追加して、税抜金額・消費税の自動計算、月別集計まで拡張できる
- 勘定科目はGeminiが自動で振り分けるため、仕訳の手間もなくなる
- アップロードしたレシート画像はGoogleドライブに保存され、シートからリンクで飛べるため原本管理も回る
- freeeや弥生会計などの会計ソフトを使っている場合も、各サービスのインポート仕様に合わせてスプレッドシートのデータを整形すれば、そのまま取り込める
- 同じ構成で名刺読み取り、納品書処理など「紙の情報をデータ化する」タスク全般に応用できる
最終アウトプット
今回作ったレシート自動記録システムの構成は以下の通り。
| 要素 | 役割 |
| Googleフォーム | レシート画像のアップロード(スマホから撮影→送信) |
| Google Apps Script(GAS) | フォーム送信をトリガーにGemini APIを呼び出す処理エンジン |
| Gemini API | レシート画像を読み取り、日付・店名・金額・勘定科目などを抽出 |
| Googleスプレッドシート | 抽出データの記録先(経費管理シート) |
| Googleドライブ | アップロードされたレシート画像の保存先 |
スマホでレシートを撮影し、フォームから送信すると、数秒後にはスプレッドシートに日付・店名・金額・勘定科目が並ぶ。
結論
レシートの手入力は、Geminiの画像読み取りで消せる。コードは1行も書いていない。必要なのはGoogleアカウントとGemini APIキー(無料枠)だけだ。
向いている人:
- 経理専任がいない少人数チームで、経費精算を自分でやっている人
- 会計ソフトの月額コストが割に合わないと感じている人
- レシートを月末にまとめて入力するのが苦痛な人
- Googleスプレッドシートを日常的に使っている人
向いていない人:
- 月に数百枚のレシートを処理する規模。素直にfreeeやマネーフォワードを使うべきだ
- Googleアカウントを使っていない環境
AIで請求書作成システムを作る。Gemini×スプレッドシート×GASを使って会話だけで完成では、請求書を「作る」側を自動化した。今回は、レシートを「記録する」側の自動化だ。2つ合わせれば、少人数チームの経理業務の入出力がどちらもGemini × GASで回る。
具体的な使用方法と手順
前提条件:
- Googleアカウント(無料)
- Gemini(無料)
- Gemini APIキー(無料枠)
全体の流れ:
- Geminiに相談してシステムの全体像を把握する
- Gemini APIキーを取得し、費用上限を設定する
- Googleフォームとスプレッドシートを準備する
- GASのコードをGeminiに書かせて設置する
- テストとデバッグ
- スプレッドシート関数でカスタマイズする
工程1〜5で約30分。工程6は必要に応じて。
Geminiに相談してシステムの全体像を把握する
最初にやることは、自分がやりたいことをGeminiに伝えて、実現方法を確認すること。
今回解決したい課題は明確だ。レシートや領収書を撮影したら、その内容がスプレッドシートに自動で記録される仕組みがほしい。これをGeminiに伝える。
レシートや領収書を管理・入力するシステムを作りたい。まずは簡易的に、レシートや領収書の写真・PDFファイルをアップロードすると、その内容を読み取って、指定されたスプレッドシートのセルにデータを入力する、というシステムが良い。
Geminiは「Gemini API のマルチモーダル機能を使い、Google Apps Script(GAS)で処理するのが最も手軽で精度が高い」と回答した。提案された構成はこうだ。
- 入力インターフェース:Googleフォーム
- バックエンド処理:Google Apps Script(GAS)
- データ抽出:Gemini API(画像読み取り)
- データベース:Googleスプレッドシート
従来のOCR(光学文字認識)ではなく、LLM(大規模言語モデル)のマルチモーダル機能を使うのがポイントだ。OCRは文字を「読む」だけだが、LLMは文字を「理解する」。
レシートのレイアウトがバラバラでも、「日付はここ、金額はここ」と意味を汲み取ってデータを構造化できる。
ポイント
- この段階では細かい仕様を詰める必要はない。「できる」と確認が取れれば十分だ。全体像がわかったら、次のステップに進む
Gemini APIキーを取得し、費用上限を設定する
Gemini APIは、Google AI Studioから無料で利用できる。ただし、設定を誤ると意図しない課金が発生する可能性があるため、先に費用上限を設定しておく。
- Google AI Studio にアクセスし、Googleアカウントでログインする
- 左のメニューから「Get API key」をクリックし、APIキーを作成する
- 作成されたAPIキーをコピーして、メモ帳などに控えておく
費用上限の設定(重要):
Google AI Studioの設定から、1ヶ月の費用上限を「0円」に設定する。これにより、無料枠を超えた場合でもリクエストが拒否されるだけで、課金は発生しない。
ポイント
- APIキーは後でGASのコードに貼り付ける。他人に共有しないこと。キーが漏洩すると、第三者にAPI利用枠を消費される可能性がある
Googleフォームとスプレッドシートを準備する
レシートをアップロードするためのGoogleフォームと、データを記録するスプレッドシートを作る。
Googleフォームの作成:
- Googleフォームを新規作成する
- 質問を追加し、回答形式を「ファイルのアップロード」にする
- 質問名を「レシート・領収証」にする
- 「特定のファイル形式のみ許可」にチェックを入れ、PDF・画像のみを許可しておく
フォーム作成時に「回答者からドライブへのファイルのアップロードを許可しますか?」と聞かれる。許可する。これにより、アップロードされたレシート画像はGoogleドライブに自動保存される。
スプレッドシートとの連携:
- フォームの「回答」タブを開く
- 「スプレッドシートにリンク」をクリックし、新しいスプレッドシートの作成または既存シートを選択する
- スプレッドシートが開いたら、以下の列見出しを設定する
| 列 | 見出し |
| D1 | 日付 |
| E1 | 勘定科目 |
| F1 | 店名 |
| G1 | 金額(税込) |
| H1 | 金額(税抜) |
| I1 | 消費税 |
A列(タイムスタンプ)、B列(レシート画像リンク)はフォーム連携時に自動で作成される。
C列(メールアドレス)はGoogleフォームの設定から「メールアドレスを収集する」をオンにすると追加される。
D列以降がGemini APIとGASで自動入力される列だ。
GASのコードをGeminiに書かせて設置する
ここが仕組みの心臓部だ。フォームが送信されたとき、GASが自動的にGemini APIを呼び出し、レシート画像からデータを抽出してスプレッドシートに書き込む——この一連の処理を、Geminiにコードとして書かせる。
Geminiに送ったプロンプト:
GASのプログラムを作成してほしい。
# やりたいこと
Googleフォームでレシート・領収書の画像がアップロードされたら、そのファイルをGemini APIに送信して、日付・勘定科目・店名・金額を抽出し、スプレッドシートに自動入力する。# 構成
- 入力:Googleフォーム(ファイルアップロード、質問名「レシート・領収証」)
- 処理:GAS → Gemini API(gemini-2.5-flash)
- 出力:スプレッドシートのD列〜G列# スプレッドシートの列構成
- A列:タイムスタンプ(フォーム自動)
- B列:レシート画像リンク(フォーム自動)
- C列:メールアドレス(フォーム自動)
- D列:日付(YYYY-MM-DD)
- E列:勘定科目(消耗品費、交通費、交際費など)
- F列:店名
- G列:金額(税込)
Geminiはこのプロンプトに対して、完成したGASのコードを返してくる。コードの中身を理解する必要はない。やることは3つだ。
- スプレッドシートのメニューから「拡張機能」>「Apps Script」を開く
- 最初から入っているコードを全て消して、Geminiが返したコードを貼り付ける
- コード内の
YOUR_API_KEYを、ステップ2で取得したAPIキーに書き換える - 保存する(フロッピーディスクのアイコン)
トリガーの設定(重要):
コードを貼り付けただけでは動かない。「フォームが送信されたら、このコードを実行する」という自動実行の設定が必要だ。
- GASエディタの左側メニューから「トリガー」(時計のアイコン)をクリックする
- 右下の「トリガーを追加」をクリックする
- 以下の設定にする
- 実行する関数を選択:「onFormSubmit」
- デプロイ時に実行:「Head」
- イベントのソースを選択:「スプレッドシートから」
- イベントの種類を選択:「フォーム送信時」
- 「保存」をクリックする
ポイント
- 設定手順や設定項目がわからなくても問題なし。すべてGeminiに聞いて相談するだけ。
- トリガーの設定を忘れると、フォームを送信してもGASが起動しない。「コードは正しいのに動かない」場合、まずトリガーを確認すること。実際、私もこれで最初つまずいた
- Geminiへのプロンプトでは、抽出項目を「勘定科目」として指定している。Geminiはレシートの内容から「消耗品費」「交通費」「交際費」「会議費」などを自動で判定する。完璧ではないが、後から手動で修正する前提なら十分実用的だ
テストとデバッグ
実際にレシートの写真をGoogleフォームからアップロードして、動作を確認する。
- 作成したGoogleフォームを開く
- スマホでレシートを撮影、または手元にあるレシート画像を送信する
- スプレッドシートを確認する。D列〜G列にデータが自動入力されていれば成功

エラーが出た場合の対処:
うまくいかないケースは大きく3つある。
- スプレッドシートに何も入力されない → トリガーが設定されていない可能性が高い。ステップ4の「トリガーの設定」を再確認する
- D列に「エラー発生」と表示される → APIの接続に問題がある。エラーメッセージを確認する
- データが入力されるが、値がおかしい → Geminiの読み取り精度の問題。レシートの画質を上げて再試行する
私の場合、最初のテストで「スプレッドシートに何も入力されない」状態になった。原因はトリガーの未設定だった。設定後、再テストするとGASは動いたが、今度はD列に「エラー発生: API接続エラー (404)」と表示された。
ここで役立ったのが、Geminiに「エラーメッセージをスプレッドシートに直接書き出す」コードを追加してもらったことだ。これにより、GASの実行ログを開かなくても、シート上でエラー内容がわかるようになった。
404エラーの原因は、コード内のAPIモデル名が gemini-1.5-flash になっていたこと。Geminiが古いモデル名でコードを生成していた。gemini-2.5-flash に修正して、問題は解決した。
ポイント
- エラーが出たらGeminiにそのまま伝える。「フォームは動いているが、Geminiが動いていないみたい」「D列にこのエラーが出た」——これだけで原因と修正方法を返してくれる
- APIのモデル名は変わることがある。エラーが出たら、Google AI Studio で現在利用可能なモデル名を確認すること
スプレッドシート関数でカスタマイズする
基本的な自動記録が動いたら、スプレッドシートの関数を使って経費管理として使いやすくする。ここはGASではなく、通常のスプレッドシート関数だけで対応できる。
税抜金額の計算(H列):
=IF(G2="","",ROUNDUP(G2/1.1,0))
G列の金額(税込)から税抜金額を計算する。消費税10%の場合、以下の関数をH2セルに入力し、下の行にコピーする。ROUNDUP で端数を切り上げている。
消費税の計算(I列):
=IF(G2="","",G2-H2)
税込金額から税抜金額を引いた差額が消費税になる。
対象月の表示(K列):
=IF(D2="","",TEXT(D2,"M")&"月")
D列の日付から「○月」を自動表示する。
支払者の自動判定(J列):
これはGAS側で対応した。フォーム送信時のメールアドレス(C列)を参照して、支払者名を自動入力する。
チームメンバーが複数人いる場合、メールアドレスと名前の対応をGASのコードに記述しておけば、誰がアップロードしたレシートかが自動で判別される。
ポイント
- 軽減税率(8%)が適用される品目がある場合は、Geminiのプロンプトに「税率も抽出して」と追加し、税率に応じて計算式を分岐させる方法もある。ただし、現状では品目ごとの税率判定はGeminiの精度に依存するため、手動確認を推奨する
- freeeや弥生会計などの会計ソフトを使っている場合、このスプレッドシートを「入力の中間地点」として活用できる。各会計ソフトにはCSVインポート機能があり、指定のフォーマットに合わせてデータを並べ替えれば、手入力なしで取り込める。スプレッドシート上で列の順序や項目名を会計ソフトの仕様に合わせたエクスポート用シートを1枚作っておくと、定期的なインポートがスムーズになる
評価

編集者あとがき
経費管理の本質は「記録すること」ではない。「判断すること」だ。この支出は妥当か、予算に対してどうか、来月はどう調整するか。
しかし現実には、ほとんどの時間が「記録すること」に消えている。レシートを見て、日付を打ち込み、金額を入力し、勘定科目を選ぶ。判断以前の作業だ。そしてこの作業が面倒だから後回しにし、月末にまとめてやって、漏れが出る。
今回やったことは、この「記録する」をGeminiに渡しただけだ。レシートの写真を送ると、数秒で日付・金額・店名・勘定科目がシートに並ぶ。それだけのことだが、経費管理に対する心理的なハードルが明らかに下がった。
以前の記事では請求書を「作る」側をGeminiで自動化した。今回は「記録する」側を自動化した。気づけば、経理業務の中で人間がやることは「確認する」と「判断する」だけになりつつある。
ただ、考え込んでしまうこともある。
手入力をしていたときは、1枚ずつレシートを見ていた。だから「今月は交際費が多いな」「この出費は本当に必要だったか」という感覚が、入力作業を通じて自然に生まれていた。自動化すると、その感覚が薄れる。データは正確に記録されるが、数字に対する肌感覚は鈍くなる。
便利になった分、何かを失っているのかもしれない。自動化したあとに「確認する」工程を意識的に入れないと、ただ数字が溜まるだけのシートになる。仕組みを作って終わりではなく、どう使うかを考え続ける必要がある。
こちらもおすすめ
ニュースを消費せず、思考に変える習慣。
一人の限界を超えるための、テックメディア。


































