まずはサクッと経費登録アプリを作ってみた

2025年4月11日金曜日

Appsheet ChatGPT

まずはサクッと経費登録アプリを作ってみた!!!

目次を表示/非表示
アプリ画面キャプチャ

背景と目的

中小法人や個人事業主にとって、経費の記録や精算は地味に手間がかかる業務のひとつです。特に税理士さんから「領収書だけでは用途が分からないので経費にできません」と言われたことがある方も多いのではないでしょうか。

税理士:具体的にどこの誰と何のために使った経費なのか?説明してください。
わたし:・・・

私自身もまさにその一人で、紙のレシートを整理するのも億劫だし、いちいち使途をメモするのも続かない……。そこで、できるだけ「サクッと」記録が済む方法を模索した結果、スマホ×AppSheet×GAS×Geminiという構成で、経費登録を簡略化するアプリを作ってみました。

使った技術

  • AppSheet(Googleのノーコードアプリプラットフォーム)
  • ChatGPT(スクリプト生成・修正相談)
  • Google Apps Script(データ処理ロジック)
  • Gemini API(OCRテキストから勘定科目を推定)
※詳細な情報は別記事にてそれぞれ紹介しています!!

これらはすべて基本的に無料で使えます。特にプログラミング経験のない方でも、ChatGPTなどの支援を受けながらであれば十分構築可能だと実感しました。

やりたいこと

  • スマホでレシートを撮影
  • OCRで読み取った内容から「何の費用か?」を自動判定
  • Gemini APIを活用して、最適な勘定科目を1つ出力
  • 結果をスプレッドシートに自動記録

従来はExcelに手打ちしていた内容が、スマホで1ステップで済むようになり、記録漏れや誤分類のリスクが大きく減りました。

実行フロー

  1. AppSheetで入力アプリを作成
  2. スプレッドシートと連携
  3. ChatGPTでGASコードを作成
  4. Gemini APIを呼び出す処理をGASに組み込む
  5. 未処理データがあるときだけ、1件ずつ自動分類

この流れを押さえれば、請求書処理や報告書の自動整理など、他の業務にも応用できるはずです。

GASスクリプト全文

メイン処理:


const GEMINI_API_KEY = 'XXXX'; // ←自分のAPIキーをここに

function classifyExpenseAccountWithGemini_LimitedToOne() {
  const spreadsheetID = "YYYY"; // ←自分のスプレッドシートIDをここに
  const sheet = SpreadsheetApp.openById(spreadsheetID).getActiveSheet();
  const dataRange = sheet.getRange("K2:M");
  const data = dataRange.getValues();

  for (let i = 0; i < data.length; i++) {
    const [currentK, ocrText, flag] = data[i];

    if (!flag && ocrText) {
      const prompt = "以下は領収書のOCRテキストです(ノイズが含まれています)。\n"
                   + "この中から、会計処理に必要な情報のみ抽出して、最も適切な「勘定科目」を1つだけ日本語で出力してください。\n"
                   + "出力は勘定科目名のみとしてください(例:交際費、旅費交通費、通信費など)。\n\n"
                   + "OCRテキスト:\n" + ocrText;

      try {
        const account = callGeminiAPI(prompt);
        sheet.getRange(i + 2, 11).setValue(account); // K列
        sheet.getRange(i + 2, 13).setValue("完了");   // M列
      } catch (e) {
        Logger.log("Error at row " + (i + 2) + ": " + e);
        sheet.getRange(i + 2, 11).setValue("要分類");
        sheet.getRange(i + 2, 13).setValue("エラー");
      }

      break;
    }
  }
}

Gemini API 呼び出し関数:


function callGeminiAPI(promptText) {
  const url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=" + GEMINI_API_KEY;

  const payload = {
    contents: [{
      parts: [{ text: promptText }]
    }]
  };

  const options = {
    method: "post",
    contentType: "application/json",
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };

  const response = UrlFetchApp.fetch(url, options);
  const json = JSON.parse(response.getContentText());

  if (json.candidates && json.candidates.length > 0) {
    return json.candidates[0].content.parts[0].text.trim();
  } else {
    throw new Error("Gemini API response error: " + JSON.stringify(json));
  }
}

まとめ

スマホで撮って、ほぼ自動で仕分けして、経費登録が終わる。そんな仕組みを、自分で(文系でも)作ることができました。初期構築に少し時間はかかりますが、一度整えば継続がとにかく楽です。

もし「市販の経費精算システムは高すぎる…」「最低限だけでいいから簡単に済ませたい」と思っている方には、この方法がきっと役立つと思います。