概要
組み込み分析データベースDuckDBの開発チームは10月21日、v1.0以降では最大の機能追加となるメジャーリリース「DuckDB 2.0.0」(コードネーム「Cinnamon Teal」)を公開した。v1.5以降に積み重ねられた約2万件のコミットを反映した今回のリリースは、安定性よりも機能性に重点を置いており、v1.5.3で導入されたQuackリモートプロトコルの改良と、CONNECT文などの新機能によって、従来は単一プロセス内で動作する組み込み用途が中心だったDuckDBを、本格的なクライアント/サーバー型システムへと転換させる内容となっている。長期サポート(LTS)版として2027年10月までサポートされ、合わせて旧バージョンのv1.5もLTS化され2027年3月まで、v1.4は2026年11月17日までサポートが継続される。
サーバー機能とQuackプロトコル
今回の最大の変更点は、v1.5.3で導入されたQuackリモートプロトコルの性能・安定性の改善と、CONNECT文によるサーバー機能の強化だ。DuckDBの内部的なベクターブロックを独自シリアライズ形式でネットワーク越しに直接転送する方式を採用し、変換のオーバーヘッドを避けながらHTTPベースの通信を実現する。新しく追加された「CONNECT文」を使うことで、クエリの実行先をDuckDB自身だけでなくPostgreSQLやMySQLにも切り替えられるようになり、リモートプッシュダウン最適化によって、テーブル全体を転送する非効率な処理を避けてバックエンド側でSQLを直接実行できる。CLIには-serve(サーバー起動)と-connect(接続)の引数が追加され、コマンドラインから直接クライアント/サーバー構成を組めるようになった。デフォルトではlocalhostのみにバインドされ、外部公開時にはリバースプロキシを介した運用が推奨されるなど、セキュリティにも配慮した設計となっている。
非同期I/Oと新データ型、エージェント対応
パフォーマンス面では、ParquetやCSV、DuckDBのネイティブストレージ形式に対するバックグラウンド読み込みを実現する非同期I/Oが導入された。I/O処理とクエリ処理を別々に並列化し、複数の読み込み要求を同時に発行できるようにしたことで、特にS3などのオブジェクトストレージからのリモート読み込みにおいてネットワーク帯域の活用効率が大きく向上する。また、半構造化データを扱う「VARIANT型」がファーストクラスの型として強化され、型情報を持つバイナリデータとして保存されることで、よくあるデータ構造を自動的に「シュレッディング」し、スキーマレスな行を保持しつつも列指向データベースらしい圧縮効率と実行性能を両立させている。さらに注目すべき機能として、Claude CodeやCursor、Codexといったコーディングエージェントがインターフェースを操作していることを検知する「エージェントモード」がCLIに追加された。コンパクトなMarkdown形式の表やJSON形式のエラー、実行前のコスト見積もりを出力するよう最適化され、TPC-Hベンチマークでの検証では出力量を59%削減できたという。
SQLパーサーの刷新とトリガー機能、今後の展望
SQLパーサーは、従来PostgreSQL由来のYACC/Bisonパーサーから独自のPEGベースパーサーに置き換えられ、デフォルトとなった。これにより拡張機能によるランタイムでの構文カスタマイズが可能になり、エラーメッセージにも正確なソース位置情報が含まれるようになる。後方互換性は基本的に維持されるが、意図的な変更点は移行ガイドで案内されており、従来のパーサーもlegacy_parser拡張機能経由で利用できる。加えてBEFORE/AFTER、行レベル・文レベル、REFERENCING OLD/NEW TABLEによる遷移テーブルなどに対応したトリガー機能が新たに追加され、監査ログの記録やマテリアライズドビューの差分更新といった用途に応用できる。ロードマップ上では、トリガーは以前から計画されていたマテリアライズドビュー機能の実現に向けた一歩と位置付けられている。
なお移行に際しては注意点もある。DuckDB 2.0で新たに作成されたストレージファイルは旧バージョンでは読み込めず(2.0自身は旧バージョンの形式を読み書き可能)、ラムダ式の単一アロー構文(x -> x + 1)がデフォルトで無効化されPython風のlambda x: x + 1構文が推奨されるなど、破壊的変更も含まれる。またC++17が最小要件となり、ICUライブラリへの依存が完全に排除された。本番環境への適用に際しては、シャドウ環境での十分な検証を行うことが推奨されており、最初のパッチリリースは2026年11月に予定されている。