サードパーティライブラリ
ClickHouseは、他のデータベースへの接続、ディスクからのロード/セーブ中のデータのデコード/エンコード、または特定の専門的なSQL関数の実装など、さまざまな目的のためにサードパーティライブラリを利用します。
ターゲットシステムで利用可能なライブラリに依存しないよう、各サードパーティライブラリはClickHouseのソースツリーにGitのサブモジュールとしてインポートされ、ClickHouseと共にコンパイルおよびリンクされます。
サードパーティライブラリのリストとそのライセンスは、以下のクエリで取得できます:
リストに載っているライブラリは、ClickHouseリポジトリの contrib/
ディレクトリにあるものです。
ビルドオプションによっては、いくつかのライブラリがコンパイルされていない可能性があり、そのため、実行時にそれらの機能が利用できないことがあります。
サードパーティライブラリの追加と維持
各サードパーティライブラリは、ClickHouseリポジトリの contrib/
ディレクトリ内の専用ディレクトリに存在する必要があります。
外部コードのコピーをライブラリディレクトリにdumpすることは避けてください。
代わりに、外部の上流リポジトリからサードパーティコードを引き込むためのGitサブモジュールを作成します。
ClickHouseで使用されるすべてのサブモジュールは、.gitmodule
ファイルにリストされています。
- ライブラリがそのまま使用できる場合(デフォルトのケース)、上流リポジトリを直接参照できます。
- ライブラリにパッチが必要な場合、GitHubのClickHouse組織に上流リポジトリのフォークを作成します。
後者の場合、カスタムパッチを上流のコミットからできるだけ孤立させることを目指します。
そのため、統合したいブランチまたはタグからClickHouse/
プレフィックスのあるブランチを作成します。例:ClickHouse/2024_2
(ブランチ 2024_2
の場合)または ClickHouse/release/vX.Y.Z
(タグ release/vX.Y.Z
の場合)。
上流の開発ブランチ master
/ main
/ dev
(つまり、フォークリポジトリ内のブランチ ClickHouse/master
/ ClickHouse/main
/ ClickHouse/dev
)を避けてください。
そのようなブランチは移動対象であり、適切なバージョニングを難しくします。 "Prefix branches"は、フォークへの上流リポジトリからのプルがカスタム ClickHouse/
ブランチに影響を与えないことを保証します。
contrib/
内のサブモジュールは、フォークしたサードパーティリポジトリの ClickHouse/
ブランチのみを追跡する必要があります。
パッチは、外部ライブラリの ClickHouse/
ブランチに対してのみ適用されます。
これには2つの方法があります:
- フォークしたリポジトリの
ClickHouse/
プレフィックスのあるブランチに新しい修正を行いたい場合(例:サニタイザ修正)。その場合、ClickHouse/
プレフィックスのあるブランチとして修正をプッシュします。例:ClickHouse/fix-sanitizer-disaster
。次に、新しいブランチからカスタムトラッキングブランチに対してPRを作成します。例:ClickHouse/2024_2 <-- ClickHouse/fix-sanitizer-disaster
そしてPRをマージします。 - サブモジュールを更新し、以前のパッチを再適用する必要がある場合。この場合、古いPRを再作成するのは過剰です。代わりに、古いコミットを新しい
ClickHouse/
ブランチ(新しいバージョンに対応)にチェリーピックします。複数のコミットを持つPRのコミットをスクワッシュすることも自由です。最良の場合、カスタムパッチを上流に戻して新しいバージョンのパッチを省略できるようにしました。
サブモジュールが更新されたら、ClickHouse内のサブモジュールをフォーク内の新しいハッシュを指すようにバンプします。
サードパーティライブラリのパッチを公式リポジトリを念頭に作成し、パッチを上流リポジトリに戻すことを検討してください。
これにより、他の人もパッチの恩恵を受けることができ、ClickHouseチームにとって保守負担がなくなります。