「レシート、撮ったまま溜まっていませんか?」
月末にまとめて打とうとして、手が止まる。
そんな方と一緒に、レシート画像をDiscordに送るとGoogleスプレッドシートに1行追記される仕組みを組み立てます!
OpenClawそのものの説明は1本目の記事にまとめました。ここでは「作って、動くのを確かめる」ところに絞ります。読み終えるまでの目安は10分ほどです。
この記事で分かること
- 完成形の15列シート
- Google側の準備と、VPS上のOpenClawの設定
- 私が実際につまずいた3点と直し方
先に答えをまとめると
Googleのサービスアカウントを作って、記入先のシートをそのアカウントに「編集者」として共有します。そのうえで、VPS上のOpenClawに「画像を読み取ってシートに追記する」スキルを置き、Discordから画像を送ります。
私の環境では、架空のレシート6枚がすべての項目で正しく記入されました。
- シートへの書き込みはサービスアカウント、AI(Gemini)はAPIキーと、鍵を分けます
- 鍵やトークンはスキルに書かず、VPS上の設定に置きます
- つまずきやすいのは「鍵が作れない」「トークンの二重設定」「Discordの権限」の3か所です
完成イメージ:Discordの1枚がシートの1行になる
Discordにレシートの写真を1枚送ると、少し待つだけでシートの末尾に1行増えます。これがゴールです。

私のシートは次の15列です。1〜10列目が記帳の中身、11〜15列目は確認と管理用です。
| 列 | 列名 | 入る内容 |
|---|---|---|
| 1 | 取引日 | レシートの日付 |
| 2 | 店名 | 発行したお店 |
| 3 | 登録番号 | インボイスの登録番号(記載があれば) |
| 4 | 合計 | 支払った合計金額 |
| 5 | 10%対象額 | 標準税率の対象額 |
| 6 | 8%対象額 | 軽減税率の対象額 |
| 7 | 消費税 | 消費税の額 |
| 8 | 支払方法 | 現金、カードなど |
| 9 | 勘定科目 | 消耗品費などの分類 |
| 10 | 品目要約 | 買ったものの短いまとめ |
| 11 | 確信度 | AIが読み取りにどれだけ自信があるか |
| 12 | 要確認フラグ | 人の目で確かめたい行の印 |
| 13 | 理由 | 要確認にした理由 |
| 14 | 元画像名 | 読み取った画像のファイル名 |
| 15 | 登録日時 | シートに書き込んだ日時 |
たとえば食品と日用品を一緒に買ったレシートなら、8%対象額に食品、10%対象額に日用品の分が入ります。元画像名から、どの写真の行かもたどれます。
列は帳簿に合わせて変えてかまいません。ただ、11〜13列目は読み間違いに気づくための列なので、残すのがおすすめです!
全体の流れと用意するもの
データは次の一本道で流れます。

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

[OpenClaw(VPS上)]画像を受け取る
▼
[Gemini]日付・金額などを読み取る
▼
[追記スクリプト(VPS上)]1行にまとめる
▼

[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つ作りました。
Google Cloudのコンソールで、記帳用のプロジェクトを作ります(ID例:<プロジェクトID>)。「APIとサービス」でGoogle Sheets APIを有効にしておきます。
用途が分かる名前にします(例:<サービスアカウント名>)。メール形式のIDが発行されます。
サービスアカウントの画面で「Add key」→「Create new key」→「JSON」を選びます。保存したファイルはVPSの設定フォルダ(例:<VPSの設定フォルダ>/<鍵ファイル名>.json)に置きます。
記入先のシートの「共有」で、サービスアカウントのメール(<サービスアカウントのメール>)を「編集者」で追加します。「通知」のチェックは外します。
鍵ファイルは再ダウンロードできず、初期設定では有効期限もありません。置き場所を決めて大切に保管してください。

共有が必要な理由
サービスアカウントを作っただけでは、シートは開けません。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にします

ステップ4:動作確認
私は10月21日に、架空のレシート6枚を送って確かめました。
| 確認したこと | 結果 |
|---|---|
| 含めた条件 | 和暦の日付、手書き、外税、ポイント併用 |
| 照合した項目 | 1枚9項目 |
| 一致した数 | 6枚とも9項目すべて一致 |
| 要確認フラグ | 想定どおり、飲食店とスーパーの2枚に付いた |
感想:Discordから送った1枚目がシートに1行増えたのを見たときの気持ち
まずは無事に通ってくれて安心しました。エラーや上手く読み込めずに誤情報の記入になることがなかったのが第一段階としてクリアになりました。これを日常で使っていくと、どうしてもくしゃくしゃなレシートや複雑なレシートが出てくるのでそれをどう乗り越えていくのかの問題に集中できるので良かったです。
結果は次の順で見ます。
- 要確認フラグが付いた行を探す
- 理由の列で、AIが迷った点を読む
- 元画像名から写真を開き、その項目だけ見比べる
- 確信度が低めの行も同様に確かめる
費用は6枚の請求で約68円、1枚あたり約11円でした。内訳はシリーズ4本目で扱います。


つまずきやすい3点と直し方
私が実際に引っかかった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をオンにする |
① サービスアカウントキーが作成できないのは、組織ポリシーのせい?
このエラーが出たら、まず疑うのがこのポリシーです。
例外にできるのは、Organization Policy Administratorロール(組織ポリシー管理者)を持つ人です。タグを使ってプロジェクトを除外する方法が案内されています(Google Cloud:サービスアカウントの制限)。
私はプロジェクト単位で一時的に例外にして鍵を作り、直後に元に戻しました。
戻す作業は必須です。ポリシーを無効のまま運用することは勧めません。

② Botトークンの二重設定
私は同じトークンを2か所に書いていて、片方が自動で無効になっていました。公式によると、有効な2つのDiscordアカウントが同じトークンを指すと監視は1つだけ起動し、重複側は無効と表示されます。
動作に害はありませんでした。ただ、どちらの設定が生きているのか迷う原因になるので、1つにまとめておくのがおすすめです。
③ Discord Botが画像に反応しない
Message Content Intentがないと、メッセージ本文や添付ファイルは空で届きます。例外はDMと、Botがメンションされたときです。
私の環境では、起動時にこの項目が「limited(制限あり)」と表示されていました。それでも自分専用サーバーでは6枚とも反応しましたが、Botが画像に反応しないときは、まずここを確かめてください。
よく聞かれる点
まとめ
- シートはサービスアカウント、GeminiはAPIキーと、鍵を分けます
- 記入先のシートは、サービスアカウントに「編集者」で共有します
- スキル receipt-ledger には手順だけを書き、鍵やIDはVPS上に置きます
- Discordはトークンを
~/.openclaw/.envに置き、Message Content Intentをオンにします - 結果は要確認フラグと理由から見ます
権限の絞り方などの安全設定はシリーズ3本目で、費用の内訳は4本目でまとめます。
私たちは挑戦者です。まずは1枚、手元のレシートを送ってみましょう。
OpenClaw スプレッドシート,OpenClaw レシート 自動記帳,レシート 画像 スプレッドシート 自動入力,OpenClaw スキル 作り方,Google スプレッドシート サービスアカウント 共有,サービスアカウントキー 作成できない 組織ポリシー,Discord Bot 画像 反応しない,読み取り精度は?,1枚いくら?,手書きや和暦でも読める?

コメント