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つあります。
- freee APIを使って自作する — Cloud Functions等でAPIを叩き、BigQueryにロードするパイプラインを実装する
- ツールを使う — Syncflowのような連携ツールで、実装なしで同期する
自作はコントロールが効く反面、OAuth認証・トークン更新・ページネーション・レート制限・スキーマ追従と、地味に考えることが多い方法です。このあたりの詰まりどころは別記事にまとめています。
関連記事: freee APIでデータを取得する方法と実務でハマりやすいポイント — API自作を検討している方はまずこちらを。
この記事では、私たちが提供している Syncflow を使う前提で、最短の連携手順を紹介します。 とはいえ BigQuery側の準備(プロジェクト・権限まわり)はどの方法でも共通 なので、自作派の方にも参考になるはずです。
全体の流れは3ステップ
Syncflowでの連携は次の3ステップです。
- freeeにログイン — SyncflowとfreeeをOAuth 2.0で接続(事業所管理者の承認が必要)
- BigQueryを設定 — GCPプロジェクトIDとデータセット名を登録し、認証情報を設定
- 同期を実行 — 同期したいデータタイプと年度を選んでボタンを押す
セットアップは平均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の設定が終われば、あとは同期するだけです。
- ダッシュボードで対象の事業所を選択
- 同期したいデータタイプ(仕訳・取引・請求書・経費精算・マスタデータ・試算表など)と対象年度を選択
- 「同期を実行」をクリック
ジョブは非同期で実行され、ステータスは画面でそのまま確認できます。
完了すると、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から直接使える
- 必要な権限は
dataEditorとjobUserの2つだけ。最小権限で運用できる - キー発行が禁止されている組織でも、WIF(キーレス認証)で連携できる
- 同期は全件洗い替えなので、freee側の修正と常に一致する。確定年度は
bq cpで保全 - 手動CSVからの移行は、セットアップ5分で完了する
毎月のCSVダウンロードをやめて、freeeのデータが勝手にBigQueryに揃っている状態を一度体験すると、もう手作業には戻れないと思います。
freeeのデータを自動でBigQueryへ
Syncflowで、freeeのデータをBigQueryへ自動同期。
セットアップは平均5分。クレジットカード登録なしで無料で始められます。