前書き
先日 ClickHouse のイベントに参加してきました。これまで、Langfuse のバックエンドだったり、社内のデータ分析基盤だったり、自分にとっては近いところにある存在だったりするけど、ちゃんと触ってこなかったので、イベントに参加して実際に最新の ClickHouse のアーキテクチャに触れる貴重な機会を頂けて、とても満足してます![]()
![]()
イベント中に、こんなものを作ってました。サンプル基地局データ約 4,300 万件を地球儀にプロットして、ズームすると密度が解像していく 3D グローブです。
スタックはこんな感じ、フロントを AWS Amplify、集計エンジンを ClickHouse Cloud に任せています。
| カテゴリ | 技術 |
|---|---|
| フロントエンド | React 19 + Vite + TypeScript + Tailwind CSS 4 |
| 3D 描画 | deck.gl 9(GlobeView) |
| バックエンド | AWS Amplify Gen2(HTTP API Gateway + Lambda) |
| データストア | ClickHouse Cloud(cell_towers 約 4,300 万行) |
そして、このアプリのコードは 1 行も自分で書いてません......
後半で触れますが、ClickHouse の MCP / Skills と Claude Code に任せたら、黙々時間の片手間でここまで動いてしまいました。
この記事では、
- ClickHouse って結局なにがすごいのか(基礎)
- 2026 年のいま、どうやって最速で入門するか(Cloud / サンプルデータ / MCP / Skills / Agents)
- 実際に「1 行も書かずに」グローブを作ったときの ClickHouse まわりの勘所
を、順に紹介していきます。
基礎紹介
ClickHouse とは
ClickHouse は、列指向(カラムナ)の OLAP データベースです。ひとことで言うと「巨大なテーブルを、集計クエリでめちゃくちゃ速く舐めるための DB」です![]()
一般的な RDB(PostgreSQL や MySQL)は行指向で、1 レコードを丸ごと読み書きするのが得意です。一方 ClickHouse は 列ごとにデータを格納するので、count() や avg() のような「特定のカラムだけを大量に集計する」処理で本領を発揮します。
ざっくり、速さの理由はこのあたりです。
| 仕組み | 効いてくるところ |
|---|---|
| 列指向ストレージ | 集計に使うカラムだけを読むので I/O が激減 |
| 高い圧縮率 | 同じ型のデータが並ぶので圧縮が効く=読む量がさらに減る |
| ベクトル化実行 | 1 行ずつではなくブロック単位で CPU を回す |
| MergeTree エンジン | ソート済みパーツ + スパースインデックスで範囲スキャンが速い |
冒頭で「Langfuse のバックエンド」と書きましたが、まさに 大量のトレース/スパンを後から集計する という用途は ClickHouse の典型的な得意分野です。観測(observability)系のプロダクトが ClickHouse を採用しているのにはちゃんと理由があるんですね。
パフォーマンス比較
「速い速い」と言われても、どのくらい速いのか、公式のベンチマークを見るのが早いです。
ClickHouse は ClickBench をはじめ、PostgreSQL / Snowflake / Databricks / Redshift / Elasticsearch といった名だたる相手とのベンチを公開しています。
「2018 年比で 2.24 倍速くなった」「ある条件下では PostgreSQL の 1,000 倍速い UPDATE」みたいな主張が並びますが、個人的に好印象なのは すべて再現可能(reproducible)な形で公開している ところです。
数字だけ盛るのではなく「自分の環境で測ってね」というスタンス![]()
そして何より、今回 cell_towers で実際に測った数字が分かりやすかったです。
約 4,327 万行のフルスキャン集計が、だいたい 0.18 秒。
後述するグローブアプリでは、この速さを画面に出して「N 行を X ms でスキャン」と常時見せています。体感として「待たされない」という感覚が、ClickHouse の一番の説得力かもしれません。
今入門するには
「速いのは分かった、でも構築が大変なんでしょ
?」と身構えるところですが、2026 年のいまは ClickHouse Cloud と AI ツール群のおかげで、入門のハードルがかなり下がっています。
ClickHouse Cloud で始める
セルフホスティングもできますが、一番手っ取り早いのは ClickHouse Cloud です。
自前でサーバーを立てる必要はありません。
- サインアップ(メール or Google / Microsoft / AWS Marketplace などの SSO)
- リージョンとサービス名を選ぶ(デフォルトの Scale tier は 3 レプリカ × 4 vCPU / 16 GiB、オートスケール付き)
これだけでセットアップは完了です。
新規アカウントはクレカ登録不要で 無料トライアル(クレジット付き) が用意されています。
金額・期間は変わることがあるので、最新は料金ページで確認してください。トライアル中に今回の cell_towers くらいなら余裕で遊べます。
サンプルデータの使い方
自分のデータがなくても、すぐ試せるように サンプルデータのワンクリックインポート が用意されています。
ClickHouse Cloud のサービス画面で「Data sources → Predefined sample data → Cell Towers → Load data」を選ぶだけ。
OpenCelliD 由来のデータが、公開 S3 バケットから自動で投入されます。
今回のグローブアプリも、この cell_towers をそのまま使っています![]()
ちなみに中身はこんな分布で、5G(NR)はスナップショットの都合で極端に少ないです。
| 無線方式 | 件数 |
|---|---|
| UMTS | 約 2,069 万 |
| LTE | 約 1,210 万 |
| GSM | 約 993 万 |
| CDMA | 約 56 万 |
| NR(5G) | 867 件 |
もちろん、自分でデータを持っている場合は import も可能です。CSV / Parquet / S3 / Kafka など入口は色々ありますが、コツは公式も言うとおり 「1 行ずつではなく数万〜数百万行のバッチで入れる」 こと。
ここだけ守れば、入れる側で詰まることはほぼないです。
ClickHouse Agents の機能
さらに 2026/06/09 に、ClickHouse Agents が public beta で発表されました。
これは ノーコードの agentic 分析サービスで、LibreChat をベースに Claude(Sonnet / Haiku) で動いています。SQL が書けなくても、自然言語で質問すると SQL の生成 → 実行 → 可視化 まで会話の中でやってくれる、というものです。
主な機能はこのあたり。
| 機能 | 内容 |
|---|---|
| ノーコード agent ビルダー | instructions / skills / context を与えて自分用エージェントを定義 |
| チャット分析 | 自然言語の質問から SQL と可視化を生成 |
| サンドボックス code interpreter | Python / Bash / JS を会話内で安全に実行 |
| Skills / memories / artifacts | ワークフローを部品化し、結果を共有可能な成果物に |
| マルチエージェント | サブエージェントを束ねて複雑な分析を分担 |
ClickHouse Cloud ユーザーならすぐ試せます、しかもpublic beta期間中に利用料無料です!![]()
ダッシュボードのメニューからClickHouse agnetsを選択し、遷移できます。

あとは、AIエージェントのサポートのもとで、チャット形式でデータの可視化や分析ができるようになります。
ちゃんと学びたい場合
手を動かして雰囲気を掴むのは上記で十分ですが、腰を据えて学ぶなら公式のテックブログがおすすめです。ベンチの裏側、MergeTree の内部、実運用のチューニングまで、一次情報がしっかり書かれています。
しかも日本語で!
料金
気になるお金の話。ClickHouse Cloud は使った分だけの従量課金で、料金は公式の Pricing calculator で構成ごとに試算できます。
個人的に効いたのが、アクセスがないアイドル状態だとコンピュートが自動で止まり、課金がデータ保存量(ストレージ)だけになるところです![]()
クエリが来たら自動で立ち上がるので、今回みたいに「たまに触るデモ」だと、置いておくだけのコストがほとんど気になりません。
今回のような 個人の技術デモ規模 なら、無料トライアルのクレジットで十分まかなえます。本格運用するときは、リージョン・レプリカ数・コンピュート/ストレージのバランスを calculator でいじりながら感覚を掴むのがおすすめです![]()
自分で開発するなら — MCP / Skills をエージェントに繋ぐ
ここまでは「使う側」の話でした。ここからは、ClickHouse を使ったアプリを自分で開発するときの話です![]()
冒頭のグローブアプリも、自分で SQL やコードを書くのではなく、Claude Code に ClickHouse の MCP サーバーと公式 Skills を繋いで 作りました。
この 2 つを入れておくと、コーディングエージェントが 「スキーマ設計」「クエリ最適化」「トラブルシュート」を ClickHouse のベストプラクティス込みで面倒見てくれる ようになります。
① ClickHouse MCP サーバーを追加する
ClickHouse Cloud は リモート MCP サーバー を提供していて、ローカルにサーバーを立てたり接続情報をベタ書きしたりせず、OAuth でそのまま繋げるのがいちばん楽です![]()
まず Cloud 側で有効化します。サービス画面の左メニュー Connect → Connect with MCP を開き、トグルを ON にすると MCP 用の URL が出てきます。
https://mcp.clickhouse.cloud/mcp
あとは Claude Code に HTTP トランスポートで登録するだけ。接続情報(ユーザー名やパスワード)はどこにも書きません。
claude mcp add --transport http clickhouse-cloud https://mcp.clickhouse.cloud/mcp
登録したら Claude Code を起動して /mcp を実行し、clickhouse-cloud を選んで OAuth で認証 します。
/mcp
ブラウザで ClickHouse Cloud のログインを済ませれば接続完了です。
OAuth 方式なので、CLICKHOUSE_PASSWORD のような秘密情報を .mcp.json に書かなくて済むのが嬉しいポイント
しかも run_select_query は SELECT 限定(読み取り専用) なので、エージェントに繋いでも破壊的なクエリは走りません。スキーマや行数を見ながらクエリを書いてくれるので、設計の精度がぐっと上がります。
② 公式の Agent Skills を追加する
ベストプラクティス集である Skills は、これ一発で入ります。
npx -y skills add clickhouse/agent-skills --all
Skills を入れておくと、エージェントが「とりあえず動くけど ClickHouse 的には微妙」なクエリではなく、LowCardinality や MergeTree の ORDER BY 設計まで踏まえた書き方 を最初から提案してくれます。ハルシネーションを抑える効果が大きいです。
黙々時間に作ったもの — 4,300 万点の基地局グローブ
では、この「MCP + Skills を繋いだエージェント」が実戦でどれだけ効くか。冒頭のグローブアプリを例に、ClickHouse まわりの勘所だけ抜き出して紹介します。
構成はシンプルで、ブラウザの deck.gl から Lambda 経由で ClickHouse Cloud に投げるだけです。
[Browser / deck.gl GlobeView]
│ GET /api/towers?mode=agg&res=3&radios=LTE,UMTS&bbox=...
▼
[API Gateway (HTTP API) → Lambda (@clickhouse/client)]
│ パラメータバインドした SQL
▼
[ClickHouse Cloud default.cell_towers / cell_towers_h3]
勘所1: ズームに応じて H3 で事前集約する
4,300 万点をそのままブラウザに送ったら当然破綻します。そこで ズームレベルに応じて H3(六角形の地理インデックス)の解像度を変えて間引き ます。
ポイントは、ライブで geoToH3 集約すると数秒かかってしまうので、res 2〜6 をあらかじめ集約したテーブルを 1 枚用意しておく ことです。
CREATE TABLE IF NOT EXISTS default.cell_towers_h3
(
h3_res UInt8,
radio LowCardinality(String),
h3 UInt64,
cnt UInt64,
center_lon Float64,
center_lat Float64
)
ENGINE = MergeTree
ORDER BY (h3_res, radio, h3);
-- res 2〜6 を投入(geoToH3 で六角形セルに丸める)
INSERT INTO default.cell_towers_h3
SELECT 3, radio, geoToH3(lon, lat, 3), count(), avg(lon), avg(lat)
FROM default.cell_towers
GROUP BY radio, geoToH3(lon, lat, 3);
-- ...res 2/4/5/6 も同様
radio を LowCardinality(String) にしているのがミソです。無線方式は実質 5 種類(UMTS / LTE / GSM / CDMA / NR)しかないので、辞書エンコードでメモリもストレージもぐっと減ります。ORDER BY (h3_res, radio, h3) で、ズーム別 + 方式別の絞り込みがそのままインデックスに乗ります。
ズームと解像度の対応はこんな感じです。zoom 8 以上まで寄ったら、集約をやめて生の点(raw モード)を出します。
| zoom | モード | H3 res |
|---|---|---|
| < 2 | agg | 2 |
| 2 〜 3.5 | agg | 3 |
| 3.5 〜 6.5 | agg | 4〜5 |
| 6.5 〜 8 | agg | 6 |
| ≥ 8 | raw(生の点) | — |
勘所2: クエリはパラメータバインドで組む
ビューポート(表示範囲の bbox)や radio フィルタはユーザー入力なので、文字列連結ではなく ClickHouse の query parameters で組み立てます。インジェクション対策にもなるし、型も効きます。
SELECT h3,
toFloat64(sum(cnt)) AS cnt,
sum(center_lon * cnt) / sum(cnt) AS lon,
sum(center_lat * cnt) / sum(cnt) AS lat
FROM default.cell_towers_h3
WHERE h3_res = {res:UInt8}
AND radio IN {radios:Array(String)}
AND center_lon BETWEEN {w:Float64} AND {e:Float64}
AND center_lat BETWEEN {s:Float64} AND {n:Float64}
GROUP BY h3
ORDER BY sum(cnt) DESC
LIMIT {limit:UInt32}
SETTINGS max_execution_time = 10
地味にハマったのが、sum(cnt) をそのまま返すと JSON で数値ではなく文字列になってしまう点です。toFloat64(sum(cnt)) で明示的にキャストして、フロント側で数値として扱えるようにしています。大きな整数を JSON で渡すときの定番の罠ですね。
勘所3: 「速さ」を画面に出す
ClickHouse の HTTP レスポンス(JSON)には statistics.elapsed と statistics.rows_read が入っています。これを拾って画面右上に出すだけで、「⚡ N 行スキャン / X ms」 という、いちばん伝えたい体験がそのまま演出になります。
// ClickHouse レスポンスの statistics をそのまま表示用に変換
const elapsedMs = Math.round(json.statistics.elapsed * 1000)
const rowsRead = json.statistics.rows_read
地球儀をぐりぐり回すたびに「4,300 万行を 0.18 秒」みたいな数字が更新されていくのは、デモとして地味に効きます![]()
ちなみに pan / zoom のたびに毎回投げると往復が増えるので、300ms のデバウンスをかけています。ドラッグ中に 10 連射、みたいなことを防ぐ定番のやつです。
そして冒頭の「1 行も書いてない」の種明かしですが、ここまでの H3 集約テーブルの設計も、パラメータバインドのクエリも、toFloat64 の罠回避も、ぜんぶ ClickHouse Skills を入れた Claude Code が提案してくれた ものです。ベストプラクティスが手元のエージェントに最初から入っている、というのが今回いちばん体感した「楽さ」でした![]()
![]()
最後に
ずっと「近くにあるのに、ちゃんと触ってこなかった」存在だった ClickHouse でしたが、いざ入門してみると、
- 速さは想像以上(4,300 万行を 0.18 秒は気持ちいい)
- 入門のハードルが下がっている(Cloud + サンプルデータのワンクリック)
- MCP / Skills / Agents で、SQL もコードも AI に任せられる
気になった方は、まず無料トライアルでサンプルデータを入れて、ClickHouse Agents に「基地局を無線方式ごとに数えて」とでも話しかけてみてください。SQL を一文字も書かなくても、集計結果とグラフがすぐ返ってきて、たぶん「え、もう終わったの?」ってなります![]()







