サードパーティライブラリ
ClickHouseは、他のデータベースへの接続、ディスクから/へデータを読み書きする際のデコード/エンコード、特定の特殊なSQL関数を実装するためなど、さまざまな目的でサードパーティライブラリを利用しています。 ターゲットシステムで利用可能なライブラリに依存しないように、各サードパーティライブラリはClickHouseのソースツリーにGitサブモジュールとしてインポートされ、ClickHouseと一緒にコンパイルおよびリンクされます。 サードパーティライブラリとそのライセンスのリストは、以下のクエリを使用して取得できます。
リストされているライブラリは、ClickHouseリポジトリの contrib/
ディレクトリに位置するものです。
ビルドオプションによっては、一部のライブラリがコンパイルされていない場合があり、そのため、実行時にその機能が利用できない可能性があります。
サードパーティライブラリの追加と管理
各サードパーティライブラリは、ClickHouseリポジトリの contrib/
ディレクトリの下に専用のディレクトリに存在する必要があります。
外部コードのコピーをライブラリディレクトリにダンプすることは避けてください。
代わりに、外部のアップストリームリポジトリからサードパーティコードをプルするためのGitサブモジュールを作成してください。
ClickHouseで使用されるすべてのサブモジュールは、.gitmodule
ファイルにリストされています。
- ライブラリがそのまま使用できる場合(デフォルトのケース)、アップストリームリポジトリを直接参照できます。
- ライブラリにパッチを当てる必要がある場合は、ClickHouseのGitHub組織にアップストリームリポジトリのフォークを作成してください。
後者の場合、カスタムパッチをアップストリームのコミットからできるだけ隔離することを目指します。
そのため、統合したいブランチやタグから ClickHouse/
プレフィックスの付いたブランチを作成してください。例えば、ClickHouse/2024_2
(ブランチ 2024_2
の場合)や ClickHouse/release/vX.Y.Z
(タグ release/vX.Y.Z
の場合)などです。
アップストリームの開発ブランチである master
/ main
/ dev
(すなわちフォークリポジトリ内のブランチ ClickHouse/master
/ ClickHouse/main
/ ClickHouse/dev
)に従うことは避けてください。
そのようなブランチは移動するターゲットであり、適切なバージョニングが困難になります。
「プレフィックスブランチ」は、フォーク先のリポジトリにおいてアップストリームリポジトリからのプルがカスタム ClickHouse/
ブランチに影響を及ぼさないようにします。
contrib/
内のサブモジュールは、フォークされたサードパーティリポジトリの ClickHouse/
ブランチのみを追跡する必要があります。
パッチは外部ライブラリの ClickHouse/
ブランチに対してのみ適用されます。
これを行う方法は2つあります:
- フォークしたリポジトリ内の
ClickHouse/
プレフィックスブランチに新しい修正を行いたい場合、例えばサニタイザの修正などです。その場合、修正をClickHouse/
プレフィックスの付いたブランチとしてプッシュします。例えば、ClickHouse/fix-sanitizer-disaster
のようにします。次に、新しいブランチからカスタム追跡ブランチ、例えばClickHouse/2024_2 <-- ClickHouse/fix-sanitizer-disaster
に対してPRを作成し、PRをマージします。 - サブモジュールを更新し、以前のパッチを再適用する必要がある場合です。この場合、古いPRを再作成するのは過剰です。代わりに、古いコミットを新しい
ClickHouse/
ブランチ(新しいバージョンに対応)にチェリーピックしてください。複数のコミットがあるPRのコミットをスクワッシュしても構いません。最良の場合、カスタムパッチをアップストリームに戻しており、新しいバージョンではパッチを省略できるかもしれません。
サブモジュールが更新されたら、ClickHouse内のサブモジュールを新しいハッシュを指すように更新してください。
サードパーティライブラリのパッチは公式リポジトリを考慮して作成し、パッチをアップストリームリポジトリに戻すことを検討してください。 これにより、他の利用者もそのパッチの恩恵を受けることができ、ClickHouseチームにとってメンテナンスの負担が軽減されます。