レシートが財布に、領収証がフォルダに溜まる。月末にまとめて手入力する。漏れる、間違える、面倒くさい。会計ソフトを入れるほどの規模ではないが、この手作業を放置するわけにもいかない。

Googleフォームからレシートの写真をアップロードするだけで、Gemini APIが内容を読み取り、スプレッドシートに自動記録される仕組みを作った——費用はゼロ、コードも書いていない。

この記事でできるようになること

30分後:

  • Googleフォームからレシート・領収書の写真をアップロードすると、スプレッドシートに日付・店名・金額・勘定科目が自動で記録される仕組みが動いている
  • 「Gemini APIにレシート画像を読ませて、データを抽出する」という構造が理解できている

その先:

  • スプレッドシートの関数を追加して、税抜金額・消費税の自動計算、月別集計まで拡張できる
  • 勘定科目はGeminiが自動で振り分けるため、仕訳の手間もなくなる
  • アップロードしたレシート画像はGoogleドライブに保存され、シートからリンクで飛べるため原本管理も回る
  • freeeや弥生会計などの会計ソフトを使っている場合も、各サービスのインポート仕様に合わせてスプレッドシートのデータを整形すれば、そのまま取り込める
  • 同じ構成で名刺読み取り、納品書処理など「紙の情報をデータ化する」タスク全般に応用できる

結論

レシートの手入力は、Geminiの画像読み取りで消せる。コードは1行も書いていない。必要なのはGoogleアカウントとGemini APIキー(無料枠)だけだ。

向いている人:

  • 経理専任がいない少人数チームで、経費精算を自分でやっている人
  • 会計ソフトの月額コストが割に合わないと感じている人
  • レシートを月末にまとめて入力するのが苦痛な人
  • Googleスプレッドシートを日常的に使っている人

向いていない人:

  • 月に数百枚のレシートを処理する規模。素直にfreeeやマネーフォワードを使うべきだ
  • Googleアカウントを使っていない環境

AIで請求書作成システムを作る。Gemini×スプレッドシート×GASを使って会話だけで完成では、請求書を「作る」側を自動化した。今回は、レシートを「記録する」側の自動化だ。2つ合わせれば、少人数チームの経理業務の入出力がどちらもGemini × GASで回る。

最終アウトプット

今回作ったレシート自動記録システムの構成は以下の通り。

要素 役割
Googleフォーム レシート画像のアップロード(スマホから撮影→送信)
Google Apps Script(GAS) フォーム送信をトリガーにGemini APIを呼び出す処理エンジン
Gemini API レシート画像を読み取り、日付・店名・金額・勘定科目などを抽出
Googleスプレッドシート 抽出データの記録先(経費管理シート)
Googleドライブ アップロードされたレシート画像の保存先

スマホでレシートを撮影し、フォームから送信すると、数秒後にはスプレッドシートに日付・店名・金額・勘定科目が並ぶ。

レシート撮影だけで経費管理。Gemini × Googleフォーム × GASで「入力」を消す
レシートを撮影してアップロードするGoogleフォーム

 

レシート撮影だけで経費管理。Gemini × Googleフォーム × GASで「入力」を消す
レシートの内容をGeminiが読み取って内容をスプレッドシートに転記

具体的な使用方法と手順

前提条件:

  • Googleアカウント(無料)
  • Gemini(無料)
  • Gemini APIキー(無料枠)

全体の流れ:

  1. Geminiに相談してシステムの全体像を把握する
  2. Gemini APIキーを取得し、費用上限を設定する
  3. Googleフォームとスプレッドシートを準備する
  4. GASのコードをGeminiに書かせて設置する
  5. テストとデバッグ
  6. スプレッドシート関数でカスタマイズする

工程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 × Googleフォーム × GASで「入力」を消す
Geminiからの回答

 

ポイント

  • この段階では細かい仕様を詰める必要はない。「できる」と確認が取れれば十分だ。全体像がわかったら、次のステップに進む

Gemini APIキーを取得し、費用上限を設定する

Gemini APIは、Google AI Studioから無料で利用できる。ただし、設定を誤ると意図しない課金が発生する可能性があるため、先に費用上限を設定しておく。

  1. Google AI Studio にアクセスし、Googleアカウントでログインする
  2. 左のメニューから「Get API key」をクリックし、APIキーを作成する
  3. 作成されたAPIキーをコピーして、メモ帳などに控えておく
レシート撮影だけで経費管理。Gemini × Googleフォーム × GASで「入力」を消す
Google AI StudioでAPIを作成する

 

費用上限の設定(重要):

Google AI Studioの設定から、1ヶ月の費用上限を「0円」に設定する。これにより、無料枠を超えた場合でもリクエストが拒否されるだけで、課金は発生しない。

レシート撮影だけで経費管理。Gemini × Googleフォーム × GASで「入力」を消す
Google AI Studioで利用額上限を設定

 

ポイント

  • APIキーは後でGASのコードに貼り付ける。他人に共有しないこと。キーが漏洩すると、第三者にAPI利用枠を消費される可能性がある

Googleフォームとスプレッドシートを準備する

レシートをアップロードするためのGoogleフォームと、データを記録するスプレッドシートを作る。

Googleフォームの作成:

  1. Googleフォームを新規作成する
  2. 質問を追加し、回答形式を「ファイルのアップロード」にする
  3. 質問名を「レシート・領収証」にする
  4. 「特定のファイル形式のみ許可」にチェックを入れ、PDF・画像のみを許可しておく

フォーム作成時に「回答者からドライブへのファイルのアップロードを許可しますか?」と聞かれる。許可する。これにより、アップロードされたレシート画像はGoogleドライブに自動保存される。

レシート撮影だけで経費管理。Gemini × Googleフォーム × GASで「入力」を消す
ファイルアップロードは必須項目

 

スプレッドシートとの連携:

  1. フォームの「回答」タブを開く
  2. 「スプレッドシートにリンク」をクリックし、新しいスプレッドシートの作成または既存シートを選択する
  3. スプレッドシートが開いたら、以下の列見出しを設定する
見出し
D1 日付
E1 勘定科目
F1 店名
G1 金額(税込)
H1 金額(税抜)
I1 消費税

A列(タイムスタンプ)、B列(レシート画像リンク)はフォーム連携時に自動で作成される。

C列(メールアドレス)はGoogleフォームの設定から「メールアドレスを収集する」をオンにすると追加される。

D列以降がGemini APIとGASで自動入力される列だ。

レシート撮影だけで経費管理。Gemini × Googleフォーム × 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つだ。

  1. スプレッドシートのメニューから「拡張機能」>「Apps Script」を開く
  2. 最初から入っているコードを全て消して、Geminiが返したコードを貼り付ける
  3. コード内の YOUR_API_KEY を、ステップ2で取得したAPIキーに書き換える
  4. 保存する(フロッピーディスクのアイコン)
レシート撮影だけで経費管理。Gemini × Googleフォーム × GASで「入力」を消す
プログラムを設定する

 

トリガーの設定(重要):

コードを貼り付けただけでは動かない。「フォームが送信されたら、このコードを実行する」という自動実行の設定が必要だ。

  1. GASエディタの左側メニューから「トリガー」(時計のアイコン)をクリックする
  2. 右下の「トリガーを追加」をクリックする
  3. 以下の設定にする
    1. 実行する関数を選択:「onFormSubmit」
    2. デプロイ時に実行:「Head」
    3. イベントのソースを選択:「スプレッドシートから」
    4. イベントの種類を選択:「フォーム送信時」
    5. 「保存」をクリックする
レシート撮影だけで経費管理。Gemini × Googleフォーム × GASで「入力」を消す
Apps Scriptからトリガーを設定

 

ポイント

  • 設定手順や設定項目がわからなくても問題なし。すべてGeminiに聞いて相談するだけ。
  • トリガーの設定を忘れると、フォームを送信してもGASが起動しない。「コードは正しいのに動かない」場合、まずトリガーを確認すること。実際、私もこれで最初つまずいた
  • Geminiへのプロンプトでは、抽出項目を「勘定科目」として指定している。Geminiはレシートの内容から「消耗品費」「交通費」「交際費」「会議費」などを自動で判定する。完璧ではないが、後から手動で修正する前提なら十分実用的だ

テストとデバッグ

実際にレシートの写真をGoogleフォームからアップロードして、動作を確認する。

  1. 作成したGoogleフォームを開く
  2. スマホでレシートを撮影、または手元にあるレシート画像を送信する
  3. スプレッドシートを確認する。D列〜G列にデータが自動入力されていれば成功
レシート撮影だけで経費管理。Gemini × Googleフォーム × GASで「入力」を消す
レシートの内容をGeminiが読み取って内容をスプレッドシートに転記

 

エラーが出た場合の対処:

うまくいかないケースは大きく3つある。

  1. スプレッドシートに何も入力されない → トリガーが設定されていない可能性が高い。ステップ4の「トリガーの設定」を再確認する
  2. D列に「エラー発生」と表示される → APIの接続に問題がある。エラーメッセージを確認する
  3. データが入力されるが、値がおかしい → 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のコードに記述しておけば、誰がアップロードしたレシートかが自動で判別される。

レシート撮影だけで経費管理。Gemini × Googleフォーム × GASで「入力」を消す
関数とGAS、どちらもGeminiに相談しながら作っていく

 

ポイント

  • 軽減税率(8%)が適用される品目がある場合は、Geminiのプロンプトに「税率も抽出して」と追加し、税率に応じて計算式を分岐させる方法もある。ただし、現状では品目ごとの税率判定はGeminiの精度に依存するため、手動確認を推奨する
  • freeeや弥生会計などの会計ソフトを使っている場合、このスプレッドシートを「入力の中間地点」として活用できる。各会計ソフトにはCSVインポート機能があり、指定のフォーマットに合わせてデータを並べ替えれば、手入力なしで取り込める。スプレッドシート上で列の順序や項目名を会計ソフトの仕様に合わせたエクスポート用シートを1枚作っておくと、定期的なインポートがスムーズになる

評価

項目 評価 コメント
コスト ★★★★★ (5/5) Googleフォーム、スプレッドシート、GAS、Googleドライブ、すべて無料。Gemini APIも無料枠で運用可能。Google AI Studioで費用上限0円に設定すれば、意図しない課金は発生しない
クオリティ ★★★★☆ (4/5) 印刷されたレシートの読み取り精度は高い。勘定科目の自動振り分けも概ね妥当。ただし、手書きの領収書や感熱紙で印字が薄くなったレシートでは精度が落ちる。金額の読み取りミスがゼロではないため、定期的な目視確認は必要
使いやすさ ★★★★☆ (4/5) 日常の操作はスマホでレシートを撮って送信するだけ。専用アプリほどのUI体験ではないが、追加インストール不要でブラウザから使える手軽さがある
汎用性 ★★★★☆ (4/5) 同じ構成で名刺読み取り、納品書の自動入力、伝票処理など「紙の情報をデータ化する」タスク全般に応用できる。Geminiへのプロンプトを変えるだけで抽出項目を自由にカスタマイズできる
難易度 ★★★☆☆ (3/5) GASへのコード貼り付け、APIキー取得、トリガー設定など、初回セットアップにはいくつかの手順がある。コードを書く必要はないが、「GASエディタを開く」「トリガーを設定する」といった操作は初見では戸惑う可能性がある

使用ツール・コスト / 所要時間

  • コスト: 無料
  • 所要時間: 約 30 分

編集者あとがき

経費管理の本質は「記録すること」ではない。「判断すること」だ。この支出は妥当か、予算に対してどうか、来月はどう調整するか。

しかし現実には、ほとんどの時間が「記録すること」に消えている。レシートを見て、日付を打ち込み、金額を入力し、勘定科目を選ぶ。判断以前の作業だ。そしてこの作業が面倒だから後回しにし、月末にまとめてやって、漏れが出る。

今回やったことは、この「記録する」をGeminiに渡しただけだ。レシートの写真を送ると、数秒で日付・金額・店名・勘定科目がシートに並ぶ。それだけのことだが、経費管理に対する心理的なハードルが明らかに下がった。

以前の記事では請求書を「作る」側をGeminiで自動化した。今回は「記録する」側を自動化した。気づけば、経理業務の中で人間がやることは「確認する」と「判断する」だけになりつつある。

ただ、考え込んでしまうこともある。

手入力をしていたときは、1枚ずつレシートを見ていた。だから「今月は交際費が多いな」「この出費は本当に必要だったか」という感覚が、入力作業を通じて自然に生まれていた。自動化すると、その感覚が薄れる。データは正確に記録されるが、数字に対する肌感覚は鈍くなる。

便利になった分、何かを失っているのかもしれない。自動化したあとに「確認する」工程を意識的に入れないと、ただ数字が溜まるだけのシートになる。仕組みを作って終わりではなく、どう使うかを考え続ける必要がある。

ジョン

Author

ジョン

techtech.club 編集長。メディアで起業し、元はスタートアップのプロダクトマネージャー。一度テクノロジーに賭けて挫折した。その経験がいまの生き方や考え方、事業の起点になっている。ここで書くのは答えではない。投資・キャリア・事業など専門家でなくても自分の頭で判断するための材料と視点。読者に教えるのではなく、一緒に考える側にいたい。