Blog

freeeのデータをBigQueryに連携する方法【セットアップから運用のコツまで】

← ブログ一覧へ戻る

freeeのデータを分析しようとすると、多くの人が最初はCSVエクスポート + スプレッドシートで始めます。 それで回っているうちは良いのですが、

  • 毎月同じダウンロード作業を繰り返している
  • 複数事業所のデータを1つにまとめたい
  • Looker Studioでダッシュボードを作りたい
  • AIに「先月の売上の内訳を出して」と聞ける状態にしたい

となった瞬間に、スプレッドシート運用は限界を迎えます。

この記事では、その次のステップである freeeのデータをBigQueryに連携する方法 を解説します。 連携方法の選択肢から、BigQuery側の準備、初回同期、運用で知っておきたいコツまで、実際の手順ベースでまとめます。

なぜBigQueryなのか

freeeのデータの置き場所としてBigQueryをおすすめする理由はシンプルで、「分析できる状態」を一番安く・確実に維持できるからです。

  • SQLで自由に集計できる — 部門別・取引先別・月次推移など、freeeの画面では作りにくい切り口も一発
  • Looker Studioと直結 — 経営ダッシュボードをノーコードで作って社内共有できる
  • 複数事業所を横断できる — 事業所ごとのデータを同じデータセットに並べて UNION するだけ
  • AIから直接読める — Claude CodeなどのAIツールが bq コマンド経由でそのままクエリできる
  • スモールスタートが安い — 会計データ程度の規模なら、BigQueryの費用はほぼ無料枠に収まる

逆に言うと、CSV + スプレッドシートで一番失われるのは「軸」です。取引先・部門・メモタグといった分析の軸がコピペのたびに崩れていきます。 BigQueryにテーブルとして持っておけば、この軸が常にきれいなまま残ります。

関連記事: freeeのデータを分析すると何が分かるのか?実例で解説 — 「分析できる状態」で何ができるのか、5つの実例で紹介しています。

連携方法は大きく2つ

freeeのデータをBigQueryに入れる方法は、大きく分けて2つあります。

  1. freee APIを使って自作する — Cloud Functions等でAPIを叩き、BigQueryにロードするパイプラインを実装する
  2. ツールを使う — Syncflowのような連携ツールで、実装なしで同期する

自作はコントロールが効く反面、OAuth認証・トークン更新・ページネーション・レート制限・スキーマ追従と、地味に考えることが多い方法です。このあたりの詰まりどころは別記事にまとめています。

関連記事: freee APIでデータを取得する方法と実務でハマりやすいポイント — API自作を検討している方はまずこちらを。

この記事では、私たちが提供している Syncflow を使う前提で、最短の連携手順を紹介します。 とはいえ BigQuery側の準備(プロジェクト・権限まわり)はどの方法でも共通 なので、自作派の方にも参考になるはずです。

全体の流れは3ステップ

Syncflowでの連携は次の3ステップです。

  1. freeeにログイン — SyncflowとfreeeをOAuth 2.0で接続(事業所管理者の承認が必要)
  2. BigQueryを設定 — GCPプロジェクトIDとデータセット名を登録し、認証情報を設定
  3. 同期を実行 — 同期したいデータタイプと年度を選んでボタンを押す

セットアップは平均5分。以降は、このうち一番つまずきやすい ステップ2のBigQuery側の準備 を中心に解説します。

BigQuery側の準備

必要な権限は2つだけ

Syncflow(や自作パイプライン)がBigQueryに書き込むには、サービスアカウントに以下の2つのIAMロールがあれば十分です。

ロール ロールID 用途
BigQuery データ編集者 roles/bigquery.dataEditor テーブルの作成・データの書き込み
BigQuery ジョブユーザー roles/bigquery.jobUser クエリジョブの実行

オーナー権限などの強い権限は不要です。最小権限で運用できるのもBigQuery連携の良いところです。

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

gcloud CLIなら、サービスアカウントの作成からキーの発行までは以下で完了します。

# 1. サービスアカウントを作成
gcloud iam service-accounts create syncflow \
  --display-name="Syncflow BigQuery Writer" \
  --project=YOUR_PROJECT_ID

# 2. 必要な2つのロールを付与
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member="serviceAccount:syncflow@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/bigquery.dataEditor"
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member="serviceAccount:syncflow@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/bigquery.jobUser"

# 3. JSONキーファイルをダウンロード
gcloud iam service-accounts keys create syncflow-key.json \
  --iam-account=syncflow@YOUR_PROJECT_ID.iam.gserviceaccount.com

生成した syncflow-key.json をSyncflowのダッシュボードからアップロードすれば認証設定は完了です(キーは暗号化して保管され、平文では保存されません)。

キーを発行できない場合はWIF(キーレス認証)

会社のセキュリティポリシーで「サービスアカウントキーの発行禁止」になっているケースは珍しくありません。 SyncflowはWorkload Identity Federation(WIF)にも対応しているので、その場合もキーを一切発行せずに連携できます。

認証方式 特徴 向いているケース
サービスアカウントキー JSONキーをアップロード。セットアップが簡単 手軽に始めたい
Workload Identity Federation キーレス認証。SA impersonation または直接アクセス キー発行が制限されている組織

WIFの具体的なセットアップコマンドはヘルプページに載せているので、該当する方はそちらを参照してください。

データセットの設定

あとはSyncflowの設定画面で以下を入力するだけです。

項目 説明 デフォルト値
GCPプロジェクトID 書き込み先のGoogle Cloudプロジェクト -
データセット名 テーブルが作成されるデータセット freee
ロケーション データセットのリージョン asia-northeast1

設定を保存するタイミングで、プロジェクトとデータセットへのアクセスが自動検証されます。権限不足ならこの時点でエラーになるので、「同期を実行したのに書き込めていなかった」という事故は起きません。

freee × BigQueryの分析基盤を今日から

Syncflowなら、この記事の手順でfreeeのデータがBigQueryに自動同期されます。
無料で始められて、クレジットカード登録は不要です。

初回同期を実行する

BigQueryの設定が終われば、あとは同期するだけです。

  1. ダッシュボードで対象の事業所を選択
  2. 同期したいデータタイプ(仕訳・取引・請求書・経費精算・マスタデータ・試算表など)と対象年度を選択
  3. 「同期を実行」をクリック

ジョブは非同期で実行され、ステータスは画面でそのまま確認できます。 完了すると、BigQueryのデータセットに journals_latest のようなテーブルが並び、その瞬間からSQLで分析できる状態になります。

知っておきたい同期の仕様

項目 内容
書き込み方式 全件洗い替え(WRITE_TRUNCATE)。毎回最新の全データで置き換わる
APIレート制限 freee API側の制限に達したら自動待機してリトライ(最大3回)
OAuthトークン 有効期限切れ前に自動更新
自動同期 有料プランで曜日指定・日付指定のスケジュール実行が可能

特に重要なのが 全件洗い替え という点です。差分更新ではないので、freee側で過去の仕訳を修正しても、次の同期でBigQuery側も必ず最新と一致します。「どこかで差分が壊れてデータがズレる」タイプの事故が構造的に起きません。

運用のコツ

確定した年度は bq cp でスナップショットを残す

洗い替え方式の裏返しとして、再同期のたびにテーブルは最新データで置き換わります。 年度締めが完了した年度の仕訳は今後変わらないので、コピーして確定データとして残しておくのがおすすめです。

# 2025年度の仕訳データをコピーして保存
bq cp YOUR_PROJECT:freee.journals_latest YOUR_PROJECT:freee.journals_2025

ワイルドカードテーブルで年度横断クエリ

年度ごとのテーブルを作っておくと、全年度をまたいだ分析が1クエリで書けます。

SELECT *, _TABLE_SUFFIX AS fiscal_year
FROM `YOUR_PROJECT.freee.journals_*`
ORDER BY journal_date

AIツールから直接クエリする

BigQueryに入ってさえいれば、Claude CodeのようなAIツールから bq コマンド経由で直接クエリできます。

bq query --use_legacy_sql=false \
'SELECT FORMAT_DATE("%Y-%m", journal_date) AS month, SUM(amount) AS total
 FROM `YOUR_PROJECT.freee.journals_latest`
 WHERE account_item_name = "売上高" AND entry_side = "credit"
 GROUP BY month ORDER BY month'

「先月、想定外に伸びた科目を出して」とAIに聞ける状態は、データがBigQueryに整って置いてあってこそです。 ChatGPTにCSVを渡して頑張らせるより、はるかに再現性の高いアプローチです。

まとめ

freee × BigQuery連携のポイントをまとめると:

  • BigQueryは「分析できる状態」を維持するのに最適な置き場所。SQL・Looker Studio・AIから直接使える
  • 必要な権限は dataEditorjobUser の2つだけ。最小権限で運用できる
  • キー発行が禁止されている組織でも、WIF(キーレス認証)で連携できる
  • 同期は全件洗い替えなので、freee側の修正と常に一致する。確定年度は bq cp で保全
  • 手動CSVからの移行は、セットアップ5分で完了する

毎月のCSVダウンロードをやめて、freeeのデータが勝手にBigQueryに揃っている状態を一度体験すると、もう手作業には戻れないと思います。

freeeのデータを自動でBigQueryへ

Syncflowで、freeeのデータをBigQueryへ自動同期。
セットアップは平均5分。クレジットカード登録なしで無料で始められます。