会計ソフトfreeeのデータをBigQueryに連携する

会計ソフトfreeeのデータをBigQueryに連携する

・会計ソフトは、売上や経費の計上、入金と請求の消込みなど、経理業務を効率化できる
・ただ、会計データを横断的に分析したり、次の施策検討に活用するには機能が十分とは言えない
・freeeはAPIを公開しており、取引データをGoogle Cloud Run Functionsで取得し、BigQueryに同期できる
・OAuth認証で取得したトークンはSecret Managerで安全に管理する

会計ソフトは売上や経費の計上だけでなく、消込み(取引先からの入金と請求を名寄せする処理)もできる便利なSaaSです。

経理業務が劇的に効率化します。

ただ、会計データを分析したり、そこからネクストアクションを検討することは、まだまだ十分ではありません。

会計データをダウンロードして、BIに取り込めば分析できますが、そもそもデータを分析に適した形式でダウンロードできない場合もあります。

そこで、会計ソフトfreeeを例に、データをBigQueryに連携してみました。

会計ソフトfreeeのAPIは公開されている

freeeのホームページを検索すると、APIリファレンスが公開されていました。

アカウントや申請情報、銀行口座連携など、たくさんありそうです。

リファレンスを下にスクロールすると、Deals 取引(収入・支出)というものを見つけました。

内容を見ると、おそらくこれをBigQueryに連携すれば、ある程度のデータが見れそうです。

Deals 取引(収入・支出)のAPIリファレンス

発生日や金額、収入・支出フラグなど、取引の詳細なデータを取得できます。

Google Cloud Run Functionsでfreeeに接続する

freeeの取引データは、Google Cloud Run Functionsで接続できます。

freeeのOAuth連携を行い、freeeの取引(deals)を取得して、BigQueryにテーブルとして同期します。

freeeの認可画面へリダイレクトしてOAuthを開始し、freeeから返ってきたcodeを使ってtoken交換し、refresh_tokenをSecret Managerに保存します。

初めて接続した時は、Secret Managerを使わなかったのですが、最終的に使うことになった理由は後述します。

そして、freee APIを叩いてデータを取得し、freeeの取引一覧(deals)を期間指定で全件取得して、BigQueryに同期します。

BigQueryに同期したfreeeの取引データ

トークンのエラー沼にご注意

連携は成功しましたが、翌日にデータを更新すると、エラーになりました。

{'error': 'invalid_grant', 'error_description': '指定された認可グラントは不正か、有効期限切れか、無効か、リダイレクトURIが異なるか、もしくは別のクライアントに適用されています。'}

どうやら認証エラーが発生しているようです。

いろいろ検証したところ、トークンが原因でした。

refresh_tokenでaccess_tokenを取得し、access_tokenでfreee APIを呼ぶ流れになっていますが、refresh_tokenを使ってaccess_tokenを取得すると、レスポンスに新しいrefresh_tokenが返ってくることがあります。

その場合、古いrefresh_tokenを使うとエラーになります。

refresh_tokenを使い回すことはできず、最新のrefresh_tokenを常に保持しなければなりません。

refresh_tokenは、APIを実行する度に変わるとは限りません。

そのため、APIを実行し、レスポンスに新しいrefresh_tokenが含まれていたら、そのtokenを保存して更新することでエラーを回避します。

Cloud Runの環境変数にrefresh_tokenを固定せず、Secret Managerをrefresh_tokenの台帳として使うように設計することでエラーを回避できました。

Google Cloud開発お承ります

datacompanyでは、お客様のご予算・環境に応じたクラウド開発を承ります。

お困りごとがございましたら是非ご相談ください。

お問い合わせフォーム

Google Cloud Storage Transfer(ST)の限界

Google Cloud Storage Transfer(ST)の限界

・誰でも簡単にノーコードでStorage間でデータ転送できることが魅力的
・例えば、Google Cloud StorageのバケットAからバケットBに定期的に自動転送
・ただし、任意の日時で繰り返し転送できない 繰り返し設定は時間・日・週のみで、月次も不可
・工数はかかるが利便性や長期的な運用を考慮すると、Cloud Runでフルスクラッチ開発がベター
・Cloud Runなら、任意のスケジュールで転送できる

Google Cloud Storage(GCS)のようなStorage間でデータを転送したい時に役立つのがGoogle Cloud Storage Transfer(ST)です。

便利で簡単に設定できるため、バケット間でデータを転送する時など、知らないうちに利用していたという方も多いと思います。

STは、たびたびアップデートされており、AWS(S3)からGCSも転送できます。

STのユースケース GCSのバケット間の転送

STで、よく使われているケースとして、GCSのバケット間の転送があります。

特に、KPIをトラッキングする企業様において、社内外のデータをGCSで管理されており、それらを運用して統合分析する場合に役立ちます。

実装もとても簡単です。

転送ジョブを作成します

次のステップへ進みます

ソース(転送元)を指定し次へ進みます

転送先を指定し次へ進みます

ジョブの実行タイミングを指定し次へ進みます(本日のテーマです)

お好みの設定で作成し設定完了です

STには限界もある

このように設定すると、任意のタイミングでStorage間のデータを自動で転送します。

ノーコードで簡単な操作だけで、このようなデータ転送を構築できます。

しかし、STには限界もあります。

例えば、毎月1日AM9時に1回だけ転送を設定します。

カスタム頻度で実行を選びます

頻度に「月」がないため設定できません

1時間毎や2週間毎等は設定できますが、毎月は設定できません。

そのため、任意の日時で繰り返し転送できません。

Google Cloud Run Functionsのフルスクラッチでカスタマイズ対応


このようなケースの場合、初期工数はかかりますが、Google Cloud Run Functionsのフルスクラッチ開発がベターになります。

Cloud Run Functionsなら、毎月1日AM9時に1回だけ転送といったように、任意の日時でピンポイントに転送できます。

STはデータ容量やファイル数で課金されるため、それらが多い場合の費用も抑制できます。

Cloud Run FunctionsはPythonに対応。イベント駆動で様々なケースに応じた処理がサーバレスにできる。

Google Cloud開発お承ります

datacompanyでは、お客様のご予算・環境に応じたクラウド開発を承ります。

お困りごとがございましたら是非ご相談ください。

お問い合わせフォーム

VertexAIとBQMLの効率的な使い分け

VertexAIとBQMLの効率的な使い分け

・様々なデータでAIモデルを作れるVertexAI
・人気の売上予測モデルも、AutoMLにデータを読ませればノーコードで自動作成
・ただし、モデル作成は1時間あたり約$21と高額
・非公式だが、Googleが推奨する方法で、費用と精度を両立したモデル作成が可能

生成AIが全盛期ですが、従来のAIもいまだ現役です。

特に、売上予測など、日次バッチでロジックを安定して稼働させたい時に重宝します。

Google Cloudには、たくさんのAIがあります。

SQLやPythonはフルスクラッチでモデルを作れますが、ノーコードでモデルを作るVertexAIのAutoMLは人気があります。

VertexAI AutoML ※公式ページにリンクします

VertexAIは利用料金がとても高い

VertexAIは、ノーコードでAIモデルを作れるため、誰でも簡単に扱えます。

AutoMLは、目的などを選択するだけで、データにあわせたロジックが自動で反映され、予測モデルを簡単に作れます。

しかし、一部のモデルは利用料金がとても高いです。

例えば、売上予測に必要な表形式データを読み込ませると、モデル作成は1時間あたり約$21課金されます。 

VertexAIの料金 ※公式ページにリンクします

モデルを完成させるまでに、様々なパターンを試すのが一般的です。

一度で完璧なモデルができることは稀で、それはほとんど空想のレベルです。

経験則ではありますが、1つのモデルを作るまでに、100回程度は試行錯誤しています。

VertexAIは、モデル作成を実行開始してから完了するまで、とても時間がかかります。

レコード数とカラム数がまったく同じデータで試してみてください。

SQLやPythonでフルスクラッチでモデルを作成するより、明らかに時間がかかります。

仮に、モデル作成1回に1時間かかった場合、100回試行すると、100時間です。

モデル作成は1時間あたり約$21です。

$21×100=$2,100≒32.3万円課金されてしまいます。※執筆当時の為替レートで試算

これでは課金が気になり、モデルを安心して作れません。

VertexAIとBQMLの効率的な使い分け

Google Cloudには、VertexAI以外にもBQMLというAIがあります。

BQMLは、Google CloudのDWH「BigQuery」に実装されているAI機能です。

BQMLはVertexAIとも連携していますが、モデル次第では、安価にモデルを作れます。

BQMLは、時間課金ではなく、クエリ実行でスキャンしたデータ量に応じて課金されます。

つまり、「どれだけのデータを読み取ったか」に応じた課金です。

一般的に、売上予測のデータは軽量で、Byte数が大きくなることは、そうありません。

非公式 Googleが推奨する費用と精度を両立したモデル作成

仕事の関係上、Google Cloudの皆様とお話することがあります。

売上予測のデータが軽量にも関わらず、VertexAIの処理が遅くて課金に悩まされていた頃、原因調査と改善を依頼したことがありました。

調査しても原因は不明で、VertexAIを使うと、処理に時間がかかってしまします。

そこで、以下のような処理を試したところ、費用と精度を両立してモデルを作成できました。

BQMLも、以前より、精度や機能が格段にレベルアップしています。

以前のBQMLに満足できなかった方も、お試しされてはいかがでしょうか。

フルスクラッチにはなりますが、皆様のご参考になれば幸いです。

・まず、VertexAIで最初のモデルを作ります。
・モデルができたら、特徴量をチェックします。
・VertexAIが選んだ特徴量を参考に、BQMLでモデルを再現します。
・モデルを再現したら、お好みの精度になるまで、BQMLでモデルを更新します。

Google Cloud開発お承ります

datacompanyでは、お客様のご予算・環境に応じたクラウド開発を承ります。

お困りごとがございましたら是非ご相談ください。

お問い合わせフォーム