メインコンテンツまでスキップ
メインコンテンツまでスキップ

前提条件

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 CodeNeovim は、ClickHouseの開発において過去にうまく機能してきた2つの選択肢です。VS Codeを使用している場合は、clangd拡張を使用してIntelliSenseを置き換えることをお勧めします。こちらの方がパフォーマンスが優れています。

CLion はもう一つの素晴らしい選択肢です。ただし、ClickHouseのような大規模プロジェクトでは遅くなることがあります。CLionを使用する際の注意点は次のとおりです:

  • CLionは独自にbuildパスを作成し、ビルドタイプとしてdebugを自動的に選択します。
  • CLionで定義されたCMakeのバージョンを使用し、あなたがインストールしたものは使用しません。
  • CLionはninjaではなくmakeを使用してビルドタスクを実行します(これは通常の動作です)。

他にも使用できるIDEには、Sublime TextQt Creator、またはKateがあります。

プルリクエストを作成する

GitHubのUIでフォークしたリポジトリに移動します。 ブランチで開発している場合は、そのブランチを選択する必要があります。 画面に「Pull request」ボタンがあります。 本質的には、これは「私の変更をメインリポジトリに受け入れるリクエストを作成する」という意味です。

作業が完了していない場合でもプルリクエストを作成できます。 この場合、タイトルの冒頭に「WIP」(作業中)と記載してください。後で変更可能です。 これは、協力的なレビューおよび変更の議論、およびすべての利用可能なテストを実行するために便利です。 変更内容の簡潔な説明を提供することが重要です。これは後でリリースの変更履歴を生成する際に使用されます。

ClickHouseの社員があなたのPRに「テスト可能」タグを付けると、テストが開始されます。 最初のチェック(例えば、コードスタイル)の結果は数分以内に届きます。 ビルドチェックの結果は30分以内に届きます。 主要なテストセットの結果は1時間以内に報告されます。

システムは、あなたのプルリクエスト専用のClickHouseバイナリビルドを準備します。 これらのビルドを取得するには、チェックリストの「Builds」エントリの横にある「Details」リンクをクリックします。 そこには、デプロイ可能なClickHouseの.build .debパッケージへの直接リンクがあります(恐れがなければ本番サーバーでも展開できます)。

ドキュメントを書く

新しい機能を追加するプルリクエストには、適切なドキュメントが付随する必要があります。 ドキュメントの変更をプレビューしたい場合の、ローカルでドキュメントページをビルドする手順は、README.mdファイルのこちらに記載されています。 ClickHouseに新しい関数を追加する際には、以下のテンプレートをガイドとして使用できます:

テストデータの使用

ClickHouseの開発には、実際のデータセットをロードすることがしばしば必要です。 特に、パフォーマンステストには重要です。 ウェブ分析用の特別に準備された匿名データセットがあります。 このデータセットは、さらに約3GBの空きディスクスペースが必要です。

clickhouse-clientで:

データをインポートします: