kintone・スプレッドシートの業務データをAWSに集めて可視化する最小構成。S3・Athena・Quick Sightの組み方と、費用が増える所の見分け方
kintoneと
この
この
データ分析基盤の最小構成は「取り出す・置く・整える・見る」の4層でできている
kintoneと
| 層 | 役割 | AWSで |
|---|---|---|
| 取り出す | 決まった |
Amazon EventBridge Scheduler と |
| 置く | 読み出した |
Amazon S3 |
| 整える | ファイルを |
Amazon Athena と |
| 見る | 集計した |
Amazon Quick Sight |
この
逆に、
取り出しは、kintoneはカーソルAPI、スプレッドシートはSheets APIで定時に丸ごと写す
取り出しの
kintoneはカーソルで一括取得し、使い終わったカーソルは消す
kintoneから
定時の
import json, os, urllib.request
BASE = os.environ["KINTONE_BASE_URL"] # https://(サブドメイン).cybozu.com
TOKEN = get_secret("kintone-api-token") # Secrets Manager から読む
def call(method, path, body=None):
req = urllib.request.Request(
f"{BASE}{path}", method=method,
data=json.dumps(body).encode() if body else None,
headers={"X-Cybozu-API-Token": TOKEN, "Content-Type": "application/json"},
)
with urllib.request.urlopen(req) as res:
return json.load(res)
def fetch_all(app_id):
cur = call("POST", "/k/v1/records/cursor.json", {"app": app_id, "size": 500})
rows, done = [], False
try:
while True:
page = call("GET", f"/k/v1/records/cursor.json?id={cur['id']}")
rows.extend(page["records"])
if not page["next"]:
done = True # 全件を受け取るとカーソルは自動で消える
return rows
finally:
if not done:
# 途中で失敗したときは、カーソルを自分で消して残さない
call("DELETE", "/k/v1/records/cursor.json", {"id": cur["id"]})サイボウズの
スプレッドシートは、表示用の文字ではなく値で受け取る
Googleスプレッドシートは、
| 指定 | 金額の |
日付の |
向いている |
|---|---|---|---|
| 指定なし |
画面と |
画面と |
人が |
| UNFORMATTED_VALUE と |
数値 | シリアル値 | 集計に |
| UNFORMATTED_VALUE と |
数値 | 書式どおりの |
日付の |
集計に
スプレッドシートは、
S3には、取り出したままのデータと整えた後のデータを別の場所に置く
S3の
s3://(会社名)-analytics/
raw/ … 取り出したまま。上書きしない
kintone/app=12/dt=2026-10-04/records.json
sheets/sales/dt=2026-10-04/values.json
curated/ … Athenaで整えた後。Parquet形式
sales_daily/dt=2026-10-04/
athena-results/ … Athenaのクエリ結果の置き場所raw の
バケットは
Athenaでは、日付で区切った表とParquetへの変換で読む量を減らす
Athenaの
まず、
CREATE EXTERNAL TABLE raw_kintone_app12 (
record_id string,
department string,
amount bigint,
ordered_on string,
updated_at string
)
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://(会社名)-analytics/raw/kintone/app=12/'
TBLPROPERTIES (
'projection.enabled' = 'true',
'projection.dt.type' = 'date',
'projection.dt.format' = 'yyyy-MM-dd',
'projection.dt.range' = '2026-10-01,NOW',
'storage.location.template' = 's3://(会社名)-analytics/raw/kintone/app=12/dt=${dt}/'
);(kintoneの
次に、
集計の
パーティション射影には、
読む量の
可視化はQuick Sightの取り込み(SPICE)を定時に更新し、見せる範囲は行単位で絞る
Quick Sightの
AWSの
部門ごとに
費用は「読む量」「使う人数」「置く量」の3つで増える
この
| 部品 | 何に |
増えに |
|---|---|---|
| Athena | クエリが |
Parquetへの |
| Quick Sight | 作る |
見るだけの |
| S3 | 置いている |
raw の |
| Lambda と |
動いた回数と |
取り出しは |
中
AWSの
株式会社bundlyzeでは
作る順番は、1つのアプリと1つのグラフから始める
最初の
- 見たい
数字を 1つ 決める。 「部門別の 月ごとの 受注額」のように、 元の アプリと シートが 決まる ものに する - 取り出しの
関数を kintoneは作る。 カーソルの 削除まで、 スプレッドシートは 見出しの 確かめまで 入れる。 失敗したら 担当者に 通知する - S3の
場所を raw・curated・athena-results の分ける。 3つを 作り、 raw の 保存期間を 決める - Athenaの
表を raw の作る。 表に パーティション射影を 設定し、 curated への Parquetの 書き出しを 毎日の 処理に 入れる。 ワークグループに 読む量の 上限を 入れる - Quick Sightの
データセットと 取り込みのグラフを 作る。 更新を 取り出しの 後の 時刻にし、 最終更新日を 画面に 出す - 2週間ほど
毎日 取り出しの見る。 失敗、 見出しの 変更、 数字の 食い 違いが ないかを、 元の アプリと シートの 集計と 突き合わせて 確かめる
この
参照した公式の資料(確認日:2026年10月3日)
料金の
- kintone REST API
「(レコードの :1回の一括取得) カーソルを 作成する」 取得件数、 有効期限、 ドメインあたりの カーソル数、 limit と offset を 使えない 点 - kintone REST API
「(レコードの :全件を一括取得) カーソルから レコードを 取得する」 取得し終えた カーソルが 自動で 削除される こと - Sheets API リファレンス「spreadsheets.values.get」:valueRenderOption と
dateTimeRenderOption の 選択肢と 既定値 - AWS
「Amazon Athena の :読み込んだ料金」 データの 量に 応じた 料金、 圧縮と 列指向の 形式で 読む量が 減る こと、 ワークグループの 上限 - AWS「Use partition projection with Amazon Athena」:パーティション射影の
仕組みと、 範囲外や 空の 日付で 0件が 返る 注意 - AWS「Use columnar storage formats」:Parquet などの
列指向の 形式 - AWS「Set data usage control limits」:ワークグループの
読む量の 上限 - AWS「Refreshing SPICE data」:取り込みの
更新の 予定、 差分の 更新、 予定の 時刻から 10分以内に 始まる こと - AWS「Using row-level security」:行単位の
セキュリティ - AWS
「Amazon Quick Sight の :作る料金」 人・ 見る 人の 役割ごとの 料金と、 取り込み (SPICE)の 容量 - AWS「Blocking public access to your Amazon S3 storage」:S3の
ブロックパブリックアクセス
よくある質問
kintoneやスプレッドシートのデータを、AWSに移さずに集計することはできませんか?
件数が
取り出したデータは、毎日全件を写すのと、変わった分だけ写すのと、どちらがよいですか?
中
Athenaの費用は、何を見ておけば予想しやすくなりますか?
Athenaの