前提条件
ClickHouseは、Linux、FreeBSD、macOS上でビルドできます。 Windowsを使用している場合でも、Linuxを実行している仮想マシン(例:Ubuntuがインストールされた VirtualBox)でClickHouseをビルドできます。
GitHubにリポジトリを作成する
ClickHouseの開発を開始するには、GitHubアカウントが必要です。 SSHキーをローカルで生成し(すでに存在しない場合)、パッチの寄稿において前提条件となるため、その公開キーをGitHubにアップロードしてください。
次に、画面の右上隅にある「fork」ボタンをクリックして、個人アカウントにClickHouseリポジトリをフォークします。
変更を寄稿するには、まずフォークしたリポジトリのブランチに変更をコミットし、その後、メインリポジトリに対して変更を含む「Pull Request」を作成します。
Gitリポジトリで作業するためには、Gitをインストールしてください。例えば、Ubuntuでは、次のコマンドを実行します:
Gitのチートシートはここにあります。 詳細なGitマニュアルはこちらです。
リポジトリを開発用マシンにクローンする
まず、作業マシンにソースファイルをダウンロードします。つまり、リポジトリをクローンします:
このコマンドは、ソースコード、テスト、およびその他のファイルを含む ClickHouse/
ディレクトリを作成します。
URLの後にカスタムディレクトリを指定できますが、このパスにはホワイトスペースが含まれないことが重要です。これは、後でビルドが壊れる可能性があるためです。
ClickHouseのGitリポジトリは、サブモジュールを使用してサードパーティライブラリをプルします。 サブモジュールはデフォルトではチェックアウトされません。次のいずれかを実行できます:
-
--recurse-submodules
オプションを付けてgit clone
を実行する。 -
--recurse-submodules
なしでgit clone
を実行した場合、すべてのサブモジュールを明示的にチェックアウトするためにgit submodule update --init --jobs <N>
を実行します。 (<N>
は、たとえば12
に設定してダウンロードを並列化できます。) -
--recurse-submodules
なしでgit clone
が実行された場合、不要なファイルと履歴を省略してスペースを節約するために スパース および 浅い サブモジュールのチェックアウトを使用するために./contrib/update-submodules.sh
を実行します。この選択肢はCIによって使用されますが、サブモジュールとの作業を不便にし、遅くするため、ローカル開発には推奨されません。
Gitサブモジュールの状態を確認するには、git submodule status
を実行します。
次のエラーメッセージが表示される場合:
GitHubに接続するためのSSHキーが不足しています。
これらのキーは通常、~/.ssh
にあります。
SSHキーが受け入れられるためには、それらをGitHubの設定にアップロードする必要があります。
HTTPS経由でリポジトリをクローンすることも可能です:
ただし、これにより変更をサーバーに送信することはできません。
一時的に使用することはできますが、後でSSHキーを追加し、git remote
コマンドでリポジトリのリモートアドレスを置き換える必要があります。
ローカルリポジトリに元のClickHouseリポジトリのアドレスを追加して、そこから更新をプルすることもできます:
このコマンドを正常に実行すると、git pull upstream master
を実行してメインのClickHouseリポジトリから更新をプルできるようになります。
必ず git push
をそのまま使用しないでください。間違ったリモートや間違ったブランチにプッシュしてしまう可能性があります。
リモート名とブランチ名を明示的に指定することをお勧めします。例えば、git push origin my_branch_name
のようにしてください。
コードを書く
以下は、ClickHouseのコードを書く際に便利なクイックリンク集です:
IDE
Visual Studio Code と Neovim は、ClickHouseの開発において過去にうまく機能してきた2つの選択肢です。VS Codeを使用している場合は、clangd拡張を使用してIntelliSenseを置き換えることをお勧めします。こちらの方がパフォーマンスが優れています。
CLion はもう一つの素晴らしい選択肢です。ただし、ClickHouseのような大規模プロジェクトでは遅くなることがあります。CLionを使用する際の注意点は次のとおりです:
- CLionは独自に
build
パスを作成し、ビルドタイプとしてdebug
を自動的に選択します。 - CLionで定義されたCMakeのバージョンを使用し、あなたがインストールしたものは使用しません。
- CLionは
ninja
ではなくmake
を使用してビルドタスクを実行します(これは通常の動作です)。
他にも使用できるIDEには、Sublime Text、Qt Creator、またはKateがあります。
プルリクエストを作成する
GitHubのUIでフォークしたリポジトリに移動します。 ブランチで開発している場合は、そのブランチを選択する必要があります。 画面に「Pull request」ボタンがあります。 本質的には、これは「私の変更をメインリポジトリに受け入れるリクエストを作成する」という意味です。
作業が完了していない場合でもプルリクエストを作成できます。 この場合、タイトルの冒頭に「WIP」(作業中)と記載してください。後で変更可能です。 これは、協力的なレビューおよび変更の議論、およびすべての利用可能なテストを実行するために便利です。 変更内容の簡潔な説明を提供することが重要です。これは後でリリースの変更履歴を生成する際に使用されます。
ClickHouseの社員があなたのPRに「テスト可能」タグを付けると、テストが開始されます。 最初のチェック(例えば、コードスタイル)の結果は数分以内に届きます。 ビルドチェックの結果は30分以内に届きます。 主要なテストセットの結果は1時間以内に報告されます。
システムは、あなたのプルリクエスト専用のClickHouseバイナリビルドを準備します。 これらのビルドを取得するには、チェックリストの「Builds」エントリの横にある「Details」リンクをクリックします。 そこには、デプロイ可能なClickHouseの.build .debパッケージへの直接リンクがあります(恐れがなければ本番サーバーでも展開できます)。
ドキュメントを書く
新しい機能を追加するプルリクエストには、適切なドキュメントが付随する必要があります。 ドキュメントの変更をプレビューしたい場合の、ローカルでドキュメントページをビルドする手順は、README.mdファイルのこちらに記載されています。 ClickHouseに新しい関数を追加する際には、以下のテンプレートをガイドとして使用できます:
テストデータの使用
ClickHouseの開発には、実際のデータセットをロードすることがしばしば必要です。 特に、パフォーマンステストには重要です。 ウェブ分析用の特別に準備された匿名データセットがあります。 このデータセットは、さらに約3GBの空きディスクスペースが必要です。
clickhouse-clientで:
データをインポートします: