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

前提条件

ClickHouseはLinux、FreeBSD、macOSでビルド可能です。
Windowsを使用している場合でも、UbuntuなどのLinuxを実行する仮想マシン内でClickHouseをビルドできます。例えば、VirtualBoxを使用することができます。

GitHubにリポジトリを作成する

ClickHouseの開発を始めるには、GitHubアカウントが必要です。
SSHキーをローカルに生成し(まだ持っていない場合)、その公開鍵をGitHubにアップロードしてください。これはパッチを寄稿するための前提条件です。

次に、右上の「fork」ボタンをクリックして、個人アカウントにClickHouseリポジトリをフォークします。

変更を寄稿するには、まずフォークしたリポジトリ内のブランチに変更をコミットし、その後、メインリポジトリへの変更を持つ「Pull Request」を作成します。

Gitリポジトリを操作するためには、Gitをインストールしてください。たとえば、Ubuntuでは次のコマンドを実行します:

Gitのチートシートはこちらにあります。
詳細なGitマニュアルはこちらにあります。

開発マシンにリポジトリをクローンする

最初に、作業マシンにソースファイルをダウンロードします。すなわち、リポジトリをクローンします:

このコマンドは、ソースコード、テスト、およびその他のファイルを含むディレクトリ ClickHouse/ を作成します。
チェックアウトする際にカスタムディレクトリを指定できますが、このパスに空白が含まれているとビルドが後で失敗する可能性があるため、注意が必要です。

ClickHouseのGitリポジトリは、3rdパーティのライブラリをインポートするためにサブモジュールを使用しています。
サブモジュールはデフォルトではチェックアウトされません。
以下のいずれかの方法で行うことができます:

  • --recurse-submodulesオプションを使ってgit cloneを実行する、

  • --recurse-submodulesなしでgit cloneを実行した場合は、git submodule update --init --jobs <N>を実行してすべてのサブモジュールを明示的にチェックアウトします。 (<N>は、例えばダウンロードを並列化するために12などに設定できます。)

  • --recurse-submodulesなしでgit cloneを実行し、必要なファイルと履歴を省略するためにsparseおよびshallowサブモジュールチェックアウトを使用したい場合は、./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

CLion(推奨)

使用するIDEがわからない場合は、CLionの使用をお勧めします。
CLionは商用ソフトウェアですが、30日間の無料トライアルを提供しています。
学生には無償で提供されます。
CLionはLinuxおよびmacOSの両方で使用できます。

ClickHouseの開発にCLionを使用する際に知っておくべき事柄:

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

代替手段

KDevelopQTCreatorは、ClickHouseを開発するための別の優れたIDEです。
KDevelopは素晴らしいIDEですが、時々不安定です。
プロジェクトを開くときにKDevelopがクラッシュした場合、プロジェクトのファイルリストを開いたらすぐに「すべて停止」ボタンをクリックすべきです。
そうすることで、KDevelopは問題なく作業できます。

他に使用できるIDEとしては、Sublime TextVisual Studio Code、またはKate(これらはすべてLinuxで利用可能)が挙げられます。
VS Codeを使用している場合は、IntelliSenseの代わりにclangd拡張機能の使用をお勧めします。これははるかにパフォーマンスが良いです。

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

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

作業がまだ完了していなくてもプルリクエストを作成できます。
その場合、タイトルの最初に「WIP」(作業中)を付けておくと、後で変更できます。
これは、共同レビューと変更の議論、およびすべての利用可能なテストを実行するために便利です。
変更の簡単な説明を提供することが重要です。この説明は後でリリースの変更ログを生成する際に使用されます。

ClickHouseの社員が、あなたのPRに「can be tested」というタグを付けると、テストが開始されます。
最初のいくつかのチェック(例:コードスタイル)の結果は数分以内に返されます。
ビルドチェックの結果は30分以内に到着します。
主要なテストセットは1時間以内に報告されます。

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

ドキュメントを書く

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

テストデータを使用する

ClickHouseの開発には、リアルなデータセットをロードすることが必要な場合がよくあります。
これは特にパフォーマンステストにおいて重要です。
ウェブ分析のために特別に準備されたデータセットがあります。
追加で約3GBの空きディスクスペースが必要です。

clickhouse-client内で:

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