DuckDB UIをEC2上で使えなかった話
DuckDBをエンジニア以外にも展開したい
はじめに
株式会社DeltaXでCTOを務める福田です。
近年、データドリブンな意思決定が重要視される中、エンジニア以外のメンバーにも手軽にデータ分析環境を提供したいというニーズが高まっています。DeltaXでもBigQueryを使ってデータの解析を行っていますが、大量のアクセスログファイルなどはAWS内に残っているデータもあります。
そういったデータはS3内にParquet形式などで保存されていますが、いままではAthenaを使って解析を行っていました。
最近ではJSON,CSV,Parquetなど、ありとあらゆるデータを読み込むことができるDuckDBが注目されています。データのソースとしてS3のパスを直接指定することも可能です。
しかしCLIツールであるため、いざ非エンジニア向けに展開しようとすると、難しい面がありました。
DuckDBとは何か?
DuckDBは「組み込み型の分析データベース(in-process OLAP)」として設計された、モダンなデータ分析基盤です。従来のデータベースシステムとは異なり、サーバーレスで動作し、アプリケーションプロセス内で高速な分析処理を実現します。
技術的特徴
【アーキテクチャ】
- サーバーレス設計: 専用サーバー不要、単一プロセス内で完結
- 列指向ストレージ: OLAP(分析処理)に最適化された内部構造
- ベクトル化実行エンジン: CPU効率を最大化する実行最適化
【データ処理能力】
- 多様なデータソース: Parquet、CSV、JSON等を直接クエリ
- クラウドネイティブ: S3、GCS等のオブジェクトストレージに対応
- 標準SQL: 豊富な分析関数をサポート
【運用性】
- ゼロコンフィグ: 複雑な設定やチューニングが不要
- 軽量デプロイ: 単一バイナリまたはライブラリとして配布
- マルチプラットフォーム: Python、R、JavaScript等からの利用が可能
端的に言えば「SQLiteの分析特化版」です。データエンジニアリングの複雑性を抑えつつ、エンタープライズ級の分析処理を実現します。
DuckDBの実用性:なぜ組織に導入したいのか
データ分析の民主化において、DuckDBが提供する価値は以下の点で際立っています。
1. インフラストラクチャの簡素化
従来のアプローチでは、データ分析基盤として以下が必要でした:
- 専用のデータウェアハウス(Redshift、BigQuery等)
- ETLパイプラインの構築・運用
- 分析用サーバーの管理
DuckDBのアプローチでは:
-- S3上のデータを直接分析(インフラ追加なし)
INSTALL httpfs;
LOAD httpfs;
SET s3_region='ap-northeast-1';
SELECT date_trunc('month', order_date) as month,
category,
sum(amount) as total_sales
FROM read_parquet('s3://company-data/sales/*.parquet')
WHERE order_date >= '2025-01-01'
GROUP BY 1, 2
ORDER BY 1 DESC, 3 DESC;
2. 分析の即時性
データパイプラインの構築を待つことなく、S3に配置されたデータを即座に分析可能:
-- 複数のデータソースを瞬時に結合
SELECT
u.department,
s.product_category,
sum(s.revenue) as total_revenue
FROM read_parquet('s3://hr-data/users.parquet') u
JOIN read_csv('s3://sales-data/transactions/*.csv', AUTO_DETECT=true) s
ON u.user_id = s.user_id
WHERE s.transaction_date >= current_date - interval '30 days'
GROUP BY 1, 2;
3. 分析結果の永続化
分析結果を効率的にS3に保存し、チーム間での共有を実現:
-- 分析結果をParquet形式で保存
COPY (
SELECT * FROM monthly_sales_summary
WHERE year = 2025
) TO 's3://reports/2025-sales-summary.parquet'
(FORMAT PARQUET, COMPRESSION ZSTD);
これらの特徴により、従来のデータエンジニアリングコストを大幅に削減しながら、高度な分析環境を提供できるのがDuckDBの魅力です。
DuckDB Local UIとは何か?
このようにDuckDBは有用なのですが、主たるインターフェースはCLIで、非エンジニアには敷居がありました。そこに登場したのがDuckDB Local UI(以下、Local UI)です。Webサーバーとして起動し、ブラウザ経由でDuckDBを利用できます。
これを使えば非エンジニアにも展開できるのではと考えました。
参考:機能の全体像は公式の紹介記事がわかりやすいです。
なぜEC2でホスティングしたいのか?
背景(狙い)
- S3上のデータ(Parquet等)をDuckDBで直接分析できる利点を、非エンジニアにも開放したい
- 通信量とセキュリティの観点から、AWS内にサーバーを置いてWeb UIで提供できれば理想的(VPN経由で各自のブラウザからアクセス)
仮説(当初の想定)
- 「DuckDBにはLocal UIがある。これをEC2上で立ち上げ、チームに配布すればよいのでは?」
検証と結果(使ってみて分かったこと)
- 起動時にブラウザを自動で開こうとする
- ヘッドレス/サーバー環境では失敗し、プロセスが止まる・待機するケース
- 関連議論: https://github.com/duckdb/duckdb-ui/issues/27
- リモートアクセスを前提としていない(localhost前提)
- 同一ホスト以外からの接続を許容しない設計・実装
- 関連議論: https://github.com/duckdb/duckdb-ui/issues/22
- UIアセットはui.duckdb.orgから取得(リバースプロキシ)
- 一部のサブネットなど外部接続制限のあるネットワークでは利用が難しい
補足(コミュニティでの動き)
- 参考情報(非公式の実験リポジトリ): https://github.com/skyscopetech/duckdb-ui-remote-docker
- 関連PR(未マージのものがある可能性): https://github.com/duckdb/duckdb-ui/pull/25
結論(現時点の理解)
- 名称の通り、DuckDB Local UIは「ローカル利用」を前提とした設計であり、サーバー常駐で多数に配る用途は現状の前提外
参考:公式の紹介記事(全体像)
関連Issues(挙動・方針の議論)
実装根拠とコード断片(解析メモ)
以下は、ui extension(DuckDBのUI拡張、C++)の実装です。
- リッスンアドレス(localhost固定)
- ファイル:
src/http_server.cpp
- 断片:
server.listen("localhost", local_port);
- 補足: UIのローカルHTTPサーバーは
localhost
に固定バインドされます。0.0.0.0
での待受けは現状想定されていません(Issue #22参照)。
- ブラウザ自動起動の仕組みと抑止関数
- ファイル:
src/ui_extension.cpp
- 断片(自動起動):
const auto command = StringUtil::Format("%s %s", OPEN_COMMAND, local_url);
return system(command.c_str());
- 断片(登録関数):
REGISTER_TF("start_ui", StartUIFunction); // ブラウザ自動起動あり
REGISTER_TF("start_ui_server", StartUIServerFunction); // 自動起動なし
- 補足: ヘッドレス環境では
start_ui_server()
の利用で自動起動を避けられます(Issue #27の文脈)。
- リモートUIアセット(ui.duckdb.org)へのプロキシ
- ファイル:
src/include/settings.hpp
,src/http_server.cpp
- 断片(デフォルト設定):
#define UI_REMOTE_URL_SETTING_DEFAULT "https://ui.duckdb.org"
- 断片(プロキシ):
httplib::Client client(remote_url);
auto result = client.Get(req.path, req.params, headers);
- 補足: UIの静的アセット(HTML/JS/CSS等)をui.duckdb.orgから取得する設計のため、インターネット到達性が前提です。閉域・私設ネットワークでは、そのままでは動作しません。
まとめ
- DuckDBは「手元で完結する高速OLAPエンジン」として非常に有用で、S3/Parquetを直接扱える点が大きな強み
- DuckDB Local UIはローカル利用に最適化された公式GUIであり、非エンジニアのオンボーディングに効果的
- 一方で、サーバー/ヘッドレス環境でのホスティングやリモート多人数利用は、現状は想定外(Issues #22/#27参照)
- nginxでリバースプロキシすることも検討しているが、他の方法も検討中
付記
本記事のDuckDB Local UIに関する解析はSerenaとClaude Codeで実施し、ブログ記事の執筆にはCodexを使用しました。

DeltaXは、学習塾を探しているお子様やその保護者の方向けに「塾選び」をサポートする学習塾検索サイト『塾選』 を運営しています。 こちらでは技術的な内容をメインで取り扱います。 delta-x.co.jp/
Discussion