【サンプルコードあり】Google Driveに格納した請求書の各項目をスプレッドシート自動転記する(freee×GAS×ChatGPT)
chatGPTの普及により、人間が行ってきた作業がAIに置き換えられ、仕事の効率化が進んでいます。
今回はchatGPTを使って、請求書の画像データを読み取り、freeeへ取引計上するフローについて紹介したいと思います。
※注意点(必ずお読みください)
・コードなどは2024年5月11日時点の情報に基づいており、システムのアップデートや仕様変更により使用できない可能性があります。また、動作環境によっては同じコードでも動作しない可能性があります。
・動作については上述の通り個々の環境によって左右されるものですので、動作に関する質問にはお答えできません。
・このコードによって生じた損害に関しては責任を負いかねますので、自己責任による使用でお願いいたします。あくまで考え方の参考程度にしていただけますと幸いです。
この記事を書いた人
公認会計士試験合格後、PwCあらた有限責任監査法人(現PwC Japan有限責任監査法人)の金融事業部へ入社。
会計監査・内部統制監査・アドバイザリー業務に従事。
監査法人退所後は会計コンサル会社に勤め、経理支援やシステム導入に従事し、経理現場の改善に務める。
その後、公認会計士・税理士として独立開業。
1.フローの全体像と解説
フローの全体像は以下のとおりです。
処理の流れとしては
①ユーザーがGoogle Driveの特定のフォルダにスキャンした請求書や領収書をアップロード
②定期的にApp Scriptが起動し、金額や取引日などを請求書から読み取り、特定のスプレッドシートへ転記
③転記されたスプレッドシートからfreee会計へ仕訳を入力
という形で構築してみました。
それぞれの詳しい処理内容については、後ほど説明いたします。
※スプレッドシートからfreeeへ入力するApp Scriptはリライル会計事務所様が提供しているこちらのファイルが非常に使いやすかったので、勝手ながら紹介させていただきます!(リライル会計事務所様への本記事のコードに関するお問合せはお控えください)今回はこのファイルを転記先のスプレッドシートとして自動化を進めようと思います。
①必要なもの
今回の処理フローで使用するソフトは以下のとおりです。
✅️Google Drive
✅️Apps Script
✅️ChatGPT(Chat API)
✅️Googleスプレッドシート
✅️freee会計
・Google Drive
・Google Drive
請求書ファイルの格納先としてはGoogle Driveを採用しています。
Google Driveは画像ファイルをアップロードするだけで、画像から文字検索ができるようになるので非常に便利です(OCR処理)。
また、Android専用になってしまうのですが、Google Driveのアプリ上でスキャンを行うことができます。
これにより、レシートの画像を綺麗にトリミングしつつ、PDFファイルとして保存してくれるので、スマホだけでも紙を綺麗に保存することが可能です。
今回はGASによる処理を想定しているので、相性の良いGoogle Driveにてファイルの格納を行います。
・Apps Script
いわゆるGASと呼ばれるGoogleのサービスで、Googleが提供するアプリをプログラミングで自動化してくれます。
GASは、時間指定でトリガーを簡単にかけることができ、かなり使い勝手がいいです。やったことはないのですが、他の言語だと面倒みたいです。
今回はGoogle DriveとGoogleスプレッドシートを使って自動化を行うので、GASによる自動化を行いました。
・ChatGPT(Chat API)
毎度お馴染みのChatGPTさんです。
今回はChat APIという機能を用いて、GAS上でChatGPTからレスポンスを受け取り、処理に反映させます。
APIが分からない方は、「異なるソフト同士をつなぎ合わせる橋」のようなイメージを持ってもらえればいいかと思います。
このAPIという橋を使ってGASとChatGPTを繋いであげるイメージです。
注意点としては、このChat APIというサービスは従量課金制なので、使いすぎには注意しましょう(月額制のChatGPT Plusとは別物です!)。
Chat APIの料金体系についてはこちらの記事が参考になるかと思います。
・Googleスプレッドシート
ChatGPTで抽出した項目はスプレッドシートの対応する列に自動で入力してきます。
このスプレッドシート上でChatGPTが拾ってきた項目が正しいかチェックし、最終的には後述するfreee会計へデータを流し込みます。
・freee会計
使用する会計ソフトとしてはfreee会計を想定しています。
GASのようなインターネットを経由した自動化処理については、クラウド会計が最も適しています。
ちなみに、freeeのファイルボックスに請求書データをアップロードすれば、AIが仕訳の入力画面で仕訳を推定してくれます。
しかし、一つずつ仕訳をポチポチいれるのは面倒なので、今回のような仕組みを作ってみました。
2.各処理の解説(サンプルコードあり)
ここからは各処理の詳しい解説をしていこうと思います
①ユーザーがGoogle Driveの特定のフォルダに請求書をアップロード
まずはじめに、ユーザーがGoogle Driveの特定のフォルダに請求書の画像をアップロードします。
スキャナでスキャンしたファイルが望ましいですが、スマホのカメラで撮影したファイルでも鮮明に撮れていれば処理は十分可能です。
ここでアップロードする画像が上手く撮れていないと、文字認識が上手くいかない可能性があるので、なるべく丁寧に取るのが望ましいです。
ちなみに後述するコードではファイル形式はPDF・画像のどちらでも大丈夫です。
②定期的にApps Scriptが起動し、金額や取引日などを請求書から読み取り、特定のスプレッドシートへ転記
格納した請求書ファイルは、日時で処理が行われるようにすることで、自動でスプレッドシートに転記される仕組みを作ります。
Apps Scriptの「トリガー」から処理がされるタイミングを選択できるので、今回はこちらを使用します。
定期的に処理されるコードの内容は下記のとおりです。
Google DriveのフォルダIDとスプレッドシートID、ChatGPTのAPIKEYはそれぞれ使用しているコードに置き換えてください。
Google DriveのフォルダIDは、URLの『…/folders/{フォルダID}』の箇所に記載がございます。
GoogleスプレッドシートのスプレッドシートIDは『https://docs.google.com/spreadsheets/d/{スプレッドシートID}/edit#gid={シートID}』
ChatGPTのAPIKEYはopenAIにログイン後、Project API keysのページから発行することができます。
※参考記事
Google DriveのフォルダIDの確認方法
GoogleスプレッドシートのスプレッドシートIDの確認方法
Chat GPTのAPIKEYの発行方法
処理の流れとしては、まずはじめに格納されているPDFおよび画像ファイルをGoogleドキュメントファイルへ変換します。
一度Googleドキュメントファイルへ変換することで、下記のように画像データから文字データを抽出することが可能になります。
試しにマクドナルドのレシートを読み込んでみましたが、かなりの精度で文字認識していることが分かりますね。
こちらの処理をGAS内に組み込むことで、画像からテキストデータを抽出しています。
こうして抽出したテキストデータを、次はChatGPTへAPI経由で投げます。
ChatGPTへ投げるプロンプトは下記の箇所です。
textには先ほど抽出したテキストデータがそのまま入ります。
プロンプトのポイントは、抽出の際に制約条件を加えることです。
ここで制約条件を入れないと、金額を抽出する際に不要な単位が入ってしまったり、存在しない勘定科目を推測してしまいます。
今回は上記のようなプロンプトで動かしてみますが、必要に応じて修正していくのが良さそうですね。
実際に転記されるスプレッドシートはこちらです。
処理された請求書については別フォルダに格納することで、二重で転記されることを防止しています。
また、せっかくなので検索しやすいように抽出した項目を使ってファイル名も設定しようと思います。
ファイル名は電子帳簿保存法で指定されている様式を加味し、「日付_金額_取引先名」としました。
③転記されたスプレッドシートからfreee会計へ仕訳を入力
スプレッドシートへの転記が終わったら内容を確認し、問題がなければfreee会計へとアップロードします。
スプレッドシートを経由せずに、先ほどのGAS上で抽出した項目をfreee会計にアップロードすることもできるのですが、ChatGPTの精度がまだ未知数であることを踏まえると、freee会計にアップロードする前に確認したいところです。
精度の甘い情報をfreee会計にアップロードするのはリスクがありますし、freee会計上で仕訳を1つずつポチポチ修正するのは非効率なので、スプレッドシート上でまとめてチェック&修正を行っているイメージです。
このように、会計ソフトは必ずしも操作性に優れているとは限らないので、誤ったデータを修正するのであれば上流から修正するのが鉄則です。
この上流から修正する考え方については『経理業務を効率化する際のアプローチポイント ~例を交えて説明します~』の記事でも解説しているので、是非ご覧ください。
また、ここではスプレッドシート上で請求書のチェックをしやすくするために、読み取ったファイルのURLも合わせて転記するようコードに記載しています。
2.実際に動かしてみる
それでは、これまでの解説も踏まえて実際にテスト運用してみます。
①使用するファイル
処理する請求書は以下の2つを用意しました。
aaaというファイルはスターバックスコーヒーのレシートをスマホのカメラで撮影したファイルです。
レシートが少し丸まっているので、OCRの精度が試されます。
bbbというファイルはラクスルで名刺を発行した時の請求書です。
こちらはwebでダウンロードしたものなので、文字の読み取りは簡単かなと思います。
②コードを実行
それでは実際にコードを実行してみましょう。
今回は手動で実行するので、Apps Scriptの「実行」を選択します。
実行すると、Google Drive上でGoogleドキュメントファイルが生成されていることが分かります。
また、実行ログを見ると請求書からテキストデータを抽出していることが分かります。
こうして処理が終わると、下記のようにスプレッドシートに各項目が転記されました。
また、Google Driveのファイルは別のフォルダに移動しており、ファイル名もきちんと変更されていました。
チェック用として転記された元ファイルのURLも記述されていますので、チェック作業が簡単にできそうです。
ただ、転記されたスプレッドシートを見てみると、ラクスルの名刺代の勘定科目が設定されていないのと、スターバックスコーヒーの代金が何故か旅費交通費として入力されていますね、、、
金額については、スターバックスコーヒーの金額が税抜金額で入力されてしまってます。
税区分については、なぜかスターバックスコーヒーが非課税仕入の区分となっております。ラクスルは一見問題ないように見えましたが、プロンプトで指定した制約条件(課対仕入、非対仕入、共対仕入、対外仕入のいずれか)を無視した結果となってしまいました。
勘定科目や税区分を間違えるのは仕方ないとして、金額が違うのは少し厳しいですね、、、プロンプトを見直す余地がありそうです。
ただ、あくまで参照する箇所を誤っているだけなので、OCRの精度自体は悪くなさそうです。
こういったところを踏まえると、完全にChatGPT任せという訳にはいかず、人の目で確かめてあげる必要がありそうです。
③修正してfreeeへアップロード
ということで、少しだけスプレッドシートを修正した後に、freee会計へのアップロードを行います。
一通り連携設定を済ませたら、「④取引を送信」からfreee会計へデータをアップロードしてみます。
注意点ですが、こういったテストを行う際は必ずテスト用の事業所を作成して、そちらでテストを行ってください。
実際に使用している事業所で行ってしまうと、思わぬエラーにより誤った数値が反映されてしまうおそれがあります。
freee会計の取引一覧を開くと、取引が登録されていることが確認できました。
3.使ってみた感想
使ってみた感想ですが、今回の処理だとまだまだ精度に改善の余地がありそうといったところでした。
ただ、今回使ったAPIがgpt-3.5-turboなので、より精度が高いgpt-4を使えば結果は変わりそうです(その代わり料金が10倍近くなりますが、、、)。
一方で、大量のデータをまとめて処理できる点は評価できると思いました。
「まとまった請求書データを一括で電子帳簿保存法に適したファイル名に変えたい」
「仮でもいいから取り込む請求書のデータを入力しておいて、後はチェックするだけの体制を作りたい」
こういった場面であれば、活躍できる余地はあるでしょう。
また、今回の事例では計上先の部門を指定しておりません。
基本的に請求書を見ただけで第三者は計上部門を判断できませんので、ファイルの格納先を変えるなどして人間側で区別するのが良さそうですね。
あとは本筋から少しずれますが、ChatGPTに聞くだけである程度プログラミングできたのはかなり便利だと思いました(自分はプログラミングが専門ではないので、0からコードを書けと言われると少し厳しいです)。
これからChatGPTが改善されるにつれて精度も上がってくるかと思いますので、引き続きこういった最先端の技術についてはキャッチアップし、間接的にお客様へ還元できたらと思います。
いかがだったでしょうか?
このように、弊事務所はITとクラウド会計に強い税理士事務所となっております。
経理業務の効率化コンサルティングも行っておりますので、日々の経理業務でお困りの方は、下記ボタンよりお問い合わせください。
相談は無料で受けておりますので、お気軽にご相談ください。 ⇩
⇩まずは無料相談から!⇩
お客様のご要望をお伺いします
※2024/5/14 追記
新たにGPTの新モデルである「GPT-4o」が発表されました。
こちらのモデルは通常のGPT-4と比べて価格が1/4程度なので、APIを利用する際に手が届きやすい価格になりましたので、現在はこちらを使用しております。
また、コードのプロンプト部分にて、各項目の定義を補足したところ、入力ミスによるエラーはほとんど無くなりました。
あとは取引先の表記揺れを防ぐために、「取引先の名前は全角文字を使用してください。また、『株式会社』という文言があれば「㈱」という記載に置き換えてください」のような文言をプロンプトにいれるのがいいかもしれません。
最終更新日:2024年7月27日