OpenClaw×スプレッドシートでレシート自動記帳|画像を送るだけで自動入力する作り方

OpenClaw×スプレッドシートでレシート自動記帳:画像を送るだけで自動入力する作り方

「レシート、撮ったまま溜まっていませんか?」

月末にまとめて打とうとして、手が止まる。

そんな方と一緒に、レシート画像をDiscordに送るとGoogleスプレッドシートに1行追記される仕組みを組み立てます!

OpenClawそのものの説明は1本目の記事にまとめました。ここでは「作って、動くのを確かめる」ところに絞ります。読み終えるまでの目安は10分ほどです。

この記事で分かること

  • 完成形の15列シート
  • Google側の準備と、VPS上のOpenClawの設定
  • 私が実際につまずいた3点と直し方

先に答えをまとめると

Googleのサービスアカウントを作って、記入先のシートをそのアカウントに「編集者」として共有します。そのうえで、VPS上のOpenClawに「画像を読み取ってシートに追記する」スキルを置き、Discordから画像を送ります。

私の環境では、架空のレシート6枚がすべての項目で正しく記入されました。

  1. シートへの書き込みはサービスアカウント、AI(Gemini)はAPIキーと、鍵を分けます
  2. 鍵やトークンはスキルに書かず、VPS上の設定に置きます
  3. つまずきやすいのは「鍵が作れない」「トークンの二重設定」「Discordの権限」の3か所です

目次

完成イメージ:Discordの1枚がシートの1行になる

Discordにレシートの写真を1枚送ると、少し待つだけでシートの末尾に1行増えます。これがゴールです。

DiscordでOpenClawBotに送信したレシート情報が、Googleスプレッドシートへ自動で記帳される処理の流れ
Discord上のOpenClawBotにレシート画像を送信すると、記載内容が解析されてGoogleスプレッドシートへ即座に自動記帳されます。

私のシートは次の15列です。1〜10列目が記帳の中身、11〜15列目は確認と管理用です。

列列名入る内容
1取引日レシートの日付
2店名発行したお店
3登録番号インボイスの登録番号(記載があれば)
4合計支払った合計金額
510%対象額標準税率の対象額
68%対象額軽減税率の対象額
7消費税消費税の額
8支払方法現金、カードなど
9勘定科目消耗品費などの分類
10品目要約買ったものの短いまとめ
11確信度AIが読み取りにどれだけ自信があるか
12要確認フラグ人の目で確かめたい行の印
13理由要確認にした理由
14元画像名読み取った画像のファイル名
15登録日時シートに書き込んだ日時

たとえば食品と日用品を一緒に買ったレシートなら、8%対象額に食品、10%対象額に日用品の分が入ります。元画像名から、どの写真の行かもたどれます。

列は帳簿に合わせて変えてかまいません。ただ、11〜13列目は読み間違いに気づくための列なので、残すのがおすすめです!


全体の流れと用意するもの

データは次の一本道で流れます。

青紫色の背景に白いコントローラー風のシンボルが描かれたDiscordのロゴ
Discordのアイコン。

[Discord]レシート画像を送る

▼

赤いキャラクターシンボルとOpenClawのサービスロゴテキスト
OpenClawのブランドロゴ。

[OpenClaw(VPS上)]画像を受け取る

▼

[Gemini]日付・金額などを読み取る

▼

[追記スクリプト(VPS上)]1行にまとめる

▼

緑色のドキュメントシンボルとGoogle Sheetsのロゴマーク
Google Sheetsのロゴマーク。

[Googleスプレッドシート]末尾に1行追記

大事なのは、鍵が別々にあることです。

GeminiはAPIキー(AIを呼び出す専用の文字列)で呼び、シートへの書き込みはサービスアカウント(プログラム用のGoogleアカウント)で行います。

使う場面使う鍵置き場所
Geminiで画像を読むGeminiのAPIキーOpenClawの設定(VPS上)
シートに1行書き込むサービスアカウントのJSON鍵VPSの設定フォルダ
DiscordとつなぐBotトークン~/.openclaw/.env(VPS上)

Googleは2026年8月27日から、サービスアカウントによるGemini APIへの新規アクセスを一時的に制限します。勧めているのは認証付きAPIキーです(Google Cloud:サービスアカウント鍵の作成と削除)。

用意するもの

  •  OpenClawが動いているVPS(私はOpenClaw 2026.10.4。OpenClawそのものは1本目のOpenClawとは?できることと『自分のVPSで動かす』意味で解説しています)
  •  GeminiのAPIキー
  •  Discord Bot(自分用サーバーに招待済み)
  •  GoogleアカウントとGoogle Cloudのプロジェクト
  •  記入先のスプレッドシート(1行目に15列の見出し)

手順① Google側の準備(サービスアカウントとシート共有)

サービスアカウントは、人ではなくプログラムがGoogleに入るためのアカウントです。

わかりやすく言うと、記帳スクリプト専用の「社員証」。私は記帳以外に使わない専用のものを1つ作りました。

STEP
プロジェクトを作り、Google Sheets APIを有効にする

Google Cloudのコンソールで、記帳用のプロジェクトを作ります(ID例:<プロジェクトID>)。「APIとサービス」でGoogle Sheets APIを有効にしておきます。

STEP
サービスアカウントを作る

用途が分かる名前にします(例:<サービスアカウント名>)。メール形式のIDが発行されます。

STEP
JSON鍵を作ってVPSに置く

サービスアカウントの画面で「Add key」→「Create new key」→「JSON」を選びます。保存したファイルはVPSの設定フォルダ(例:<VPSの設定フォルダ>/<鍵ファイル名>.json)に置きます。

STEP
シートを共有する

記入先のシートの「共有」で、サービスアカウントのメール(<サービスアカウントのメール>)を「編集者」で追加します。「通知」のチェックは外します。

鍵ファイルは再ダウンロードできず、初期設定では有効期限もありません。置き場所を決めて大切に保管してください。

スプレッドシートの共有設定でサービスアカウントに編集者権限を付与する画面
Googleスプレッドシートの共有設定を開き、サービスアカウントのメールアドレスを追加して編集者権限を付与します。

共有が必要な理由

サービスアカウントを作っただけでは、シートは開けません。Googleのガイドでも、IAMロール(Google Cloud側の権限)だけではシートのデータに届かないとされています。

共有が必要です(Google Workspace:アクセス認証情報の作成)。

鍵の作成でエラーが出たら 手順3で鍵が作れないときは、組織ポリシーが原因のことがあります。直し方は、このあとの「つまずきやすい3点」①にあります。

手順② VPSとOpenClawの設定から動作確認まで

次はVPS側です。追記スクリプト、スキル、Discordの順に設定します。

ステップ1:追記スクリプトと接続設定を置く

追記スクリプトは、15列分の値を、サービスアカウントの鍵でシート末尾に1行足す小さなプログラムです。私はNodeのスクリプトを、接続設定(シートID <シートID>、鍵ファイルの場所)と一緒にVPSに置いています。

ステップ2:スキル receipt-ledger を置く

スキルは、OpenClawに作業のしかたを教える手順書です。

OpenClaw スキルの作り方は、<workspace>/skills/<名前>/SKILL.md に置くのが基本です。先頭のYAMLには name と description が必須です(OpenClaw:Skills)。

---

name: receipt-ledger

description: <例:レシート画像を読み取り、記帳シートに1行追記する>

---

<指示文:レシート画像から15列の値を読み取るルール>

<スクリプト呼び出し:読み取った値を追記スクリプトに渡す手順>

公式には「Keep credentials out of skill content.」とあります。

そこで私も、APIキーやシートIDはスキルに書いていません。

OpenClawは、届いた画像を画像の読めるモデル(ここではGemini)に渡して読み取らせます。

スキルには「どの値をどの列に入れるか」「迷ったら要確認にする」などのルールを書きます。

ステップ3:Discordとつなぐ

公式の手順に沿って進めます(OpenClaw:Discord setup)。

要点は3つです。

  •  Botトークンは秘密情報です。OpenClawを動かすVPSに設定し、再起動後も残すため ~/.openclaw/.env に置きます
  •  Message Content Intentをオンにします。サーバー内の通常メッセージの受信に必要です
  •  初期設定では、サーバーのチャンネルで@メンションされたときだけ応答します。自分専用のサーバーなら requireMention: false にします
Discord Developer PortalのBot設定でMessage Content Intentを有効にする画面
Discord Developer PortalのBot管理画面を開き、Privileged Gateway Intents内の「Message Content Intent」をオンにしてメッセージ内容の受信を有効化します。

ステップ4:動作確認

私は10月21日に、架空のレシート6枚を送って確かめました。

確認したこと結果
含めた条件和暦の日付、手書き、外税、ポイント併用
照合した項目1枚9項目
一致した数6枚とも9項目すべて一致
要確認フラグ想定どおり、飲食店とスーパーの2枚に付いた

感想:Discordから送った1枚目がシートに1行増えたのを見たときの気持ち

まずは無事に通ってくれて安心しました。エラーや上手く読み込めずに誤情報の記入になることがなかったのが第一段階としてクリアになりました。これを日常で使っていくと、どうしてもくしゃくしゃなレシートや複雑なレシートが出てくるのでそれをどう乗り越えていくのかの問題に集中できるので良かったです。

結果は次の順で見ます。

  1. 要確認フラグが付いた行を探す
  2. 理由の列で、AIが迷った点を読む
  3. 元画像名から写真を開き、その項目だけ見比べる
  4. 確信度が低めの行も同様に確かめる

費用は6枚の請求で約68円、1枚あたり約11円でした。内訳はシリーズ4本目で扱います。

Discordで送信した1枚のレシート画像に対し、OpenClawBotが税率内訳を含めて記帳完了を返信した画面
1枚のレシート画像を送信した際の動作検証であり、軽減税率が混在する品目もOpenClawBotが正しく判別して記帳完了を伝えています。
OpenClawで解析されたレシート情報が日付や支払先、金額ごとに整理されて記帳されたGoogleスプレッドシート画面
OpenClawによってレシート画像から抽出された日付、店舗名、金額、勘定科目などの情報がスプレッドシートに正しく自動入力された状態です。

私が実際に引っかかった2点と、先に確かめておきたい1点を、症状から引けるようにまとめます。

症状原因直し方
① 鍵の作成で Key creation is not allowed on this service account. と出る組織ポリシー iam.disableServiceAccountKeyCreation が有効組織ポリシー管理者がプロジェクトを一時的に例外にし、鍵を作ったらすぐ戻す
② Discordの設定の片方が duplicate bot token で無効と表示される同じBotトークンを2か所に設定設定を1つだけ残す
③ Botが画像に反応しないMessage Content Intentがオフ・制限されている可能性Message Content Intentをオンにする

① サービスアカウントキーが作成できないのは、組織ポリシーのせい?

このエラーが出たら、まず疑うのがこのポリシーです。

2024年5月3日以降に作られた組織では、初期状態で有効になっています。

例外にできるのは、Organization Policy Administratorロール(組織ポリシー管理者)を持つ人です。タグを使ってプロジェクトを除外する方法が案内されています(Google Cloud:サービスアカウントの制限)。

私はプロジェクト単位で一時的に例外にして鍵を作り、直後に元に戻しました。

戻す作業は必須です。ポリシーを無効のまま運用することは勧めません。

Google Cloudのメニューから「IAM と管理」内の「組織のポリシー」を選択する画面
Google Cloudコンソールのナビゲーションメニューから「IAM と管理」を開き、「組織のポリシー」へ移動します。

② Botトークンの二重設定

私は同じトークンを2か所に書いていて、片方が自動で無効になっていました。公式によると、有効な2つのDiscordアカウントが同じトークンを指すと監視は1つだけ起動し、重複側は無効と表示されます。

動作に害はありませんでした。ただ、どちらの設定が生きているのか迷う原因になるので、1つにまとめておくのがおすすめです。

③ Discord Botが画像に反応しない

Message Content Intentがないと、メッセージ本文や添付ファイルは空で届きます。例外はDMと、Botがメンションされたときです。

私の環境では、起動時にこの項目が「limited(制限あり)」と表示されていました。それでも自分専用サーバーでは6枚とも反応しましたが、Botが画像に反応しないときは、まずここを確かめてください。


よく聞かれる点

読み取り精度はどのくらいですか?

私の検証では、和暦や外税を含む架空のレシート6枚で、照合した9項目がすべて一致しました。ただし私の環境での結果で、どのレシートでも同じとは限りません。

そのため、確信度・要確認フラグ・理由の3列で、人が確かめる行を絞れるようにしています。最後は人の目で確かめる前提の設計です。

1枚いくらかかりますか?

私の環境では、AIの利用料が請求で1枚あたり約11円でした。VPS代は別にかかります。計算の内訳と抑え方は、シリーズ4本目でまとめます。

手書きや和暦でも読めますか?

私が試した範囲では読めました。6枚の中に和暦の日付と手書きのレシートを含め、どれも9項目すべて一致しています。

試していない書式、たとえば文字がかすれた感熱紙などは、まだ分かりません。まずは手元のレシートを数枚送り、要確認フラグの付き方と理由の書かれ方を見てから、本番に移ると安心です。


まとめ

  • シートはサービスアカウント、GeminiはAPIキーと、鍵を分けます
  • 記入先のシートは、サービスアカウントに「編集者」で共有します
  • スキル receipt-ledger には手順だけを書き、鍵やIDはVPS上に置きます
  • Discordはトークンを ~/.openclaw/.env に置き、Message Content Intentをオンにします
  • 結果は要確認フラグと理由から見ます

権限の絞り方などの安全設定はシリーズ3本目で、費用の内訳は4本目でまとめます。

私たちは挑戦者です。まずは1枚、手元のレシートを送ってみましょう。

OpenClaw スプレッドシート,OpenClaw レシート 自動記帳,レシート 画像 スプレッドシート 自動入力,OpenClaw スキル 作り方,Google スプレッドシート サービスアカウント 共有,サービスアカウントキー 作成できない 組織ポリシー,Discord Bot 画像 反応しない,読み取り精度は?,1枚いくら?,手書きや和暦でも読める?

OpenClaw×スプレッドシートでレシート自動記帳:画像を送るだけで自動入力する作り方

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

始めまして。このブログを運営するTomoyaです。
未経験個人開発者。AI×個人開発(Vibe Cording)で学習して参入してくれる人が増えて広がっていくと良いなと思って始めました。

実際に作成→デプロイ(公開)→運営を行ってそれについての問題や疑問を記録していきます。
また行っていく上で内容(セキュリティ・制限など)にもこだわっていきたいなと思っています。

コメント

コメントする


目次