3-6. Conan依存とCI/ビルドパイプライン
PR を出すと GitHub Actions の各種チェックが自動で走ります。何が検証されるのかを先に理解しておくと、CI の赤を減らし、レビューをスムーズに通せます。このページでは依存管理の Conan と、CI で実行されるチェックの中身、そしてそれらをローカルで再現する方法を解説します。
Conan による依存管理
Section titled “Conan による依存管理”xrpld は多数の C++ ライブラリに依存しており、それらは Conan で管理されています。依存の一覧はルートの conanfile.py に定義されています。
# conanfile.py(抜粋)name = "xrpl"
requires = [ "ed25519/2015.03", "grpc/1.78.1", "libarchive/3.8.7", "nudb/2.0.9", "openssl/3.6.2", "secp256k1/0.7.1", "soci/4.0.3", "zlib/1.3.2",]
test_requires = [ "gtest/1.17.0",]
tool_requires = [ "protobuf/6.33.5",]| 種類 | 意味 |
|---|---|
requires | 本体のビルドに必要な依存(boost・openssl 等) |
test_requires | テストのみで使う依存(gtest) |
tool_requires | ビルド時に使うツール(protobuf コンパイラ) |
options でビルドを切り替える
Section titled “options でビルドを切り替える”conanfile.py の options で、オプション機能の有無を切り替えられます。たとえば rocksdb を含めるかどうかなどです。
# rocksdb を無効にして依存を解決する例conan install .. --output-folder . --build missing \ --settings build_type=Release \ --options "rocksdb=False"CI で実行されるチェック
Section titled “CI で実行されるチェック”PR を作成すると .github/workflows/on-pr.yml を起点に、複数のチェックが走ります。主なものは次の通りです。
PR 作成 ├── pre-commit … フォーマット・静的チェック ├── check-pr-title … PRタイトルの規約チェック ├── check-pr-commits … コミットメッセージのチェック ├── check-levelization … モジュール依存の循環チェック ├── clang-tidy … 静的解析 ├── build-test … 各プラットフォームでビルド&テスト └── package … パッケージ生成pre-commit — フォーマットと軽量チェック
Section titled “pre-commit — フォーマットと軽量チェック”.pre-commit-config.yaml で定義されたフックが走ります。主なもの:
| フック | 役割 |
|---|---|
clang-format | C++ コードの整形 |
trailing-whitespace / end-of-file-fixer | 余分な空白・改行の修正 |
check-merge-conflict | コンフリクトマーカーの混入検出 |
gersemi | CMake ファイルの整形 |
prettier | JSON/YAML/Markdown の整形 |
black | Python スクリプトの整形 |
check-levelization — 循環依存の防止
Section titled “check-levelization — 循環依存の防止”xrpld 特有の重要なチェックです。.github/scripts/levelization/ に実装されており、モジュールが下位の層だけに依存するという規律を保ちます。
あるモジュールは、自分より下位レベルのモジュールしかインクルードできない。また、自分以外のモジュールの
impl/detailフォルダをインクルードしてはならない。
新しい #include を追加したときにこのチェックが落ちたら、層をまたいだ不正な依存を作ってしまった可能性があります。
ローカルでCIを再現する
Section titled “ローカルでCIを再現する”CI で落ちてから直すより、push 前にローカルで再現するほうが速いです。
pre-commit をローカルで実行
Section titled “pre-commit をローカルで実行”# 初回のみ: インストールとフックの登録pip install pre-commitpre-commit install
# 変更ファイルに対して実行(コミット時に自動でも走る)pre-commit run --all-filesclang-format だけ手早くかける
Section titled “clang-format だけ手早くかける”# 変更したファイルだけ整形clang-format -i src/libxrpl/tx/transactors/payment/Payment.cppビルドとテスト
Section titled “ビルドとテスト”1-3. xrpldをビルドする と同じ手順でビルドし、ユニットテストを実行します。
# xrpld-test/.build/ でcmake --build . --parallel./xrpld --unittest --unittest-jobs 4PR タイトル・コミットの規約
Section titled “PR タイトル・コミットの規約”check-pr-title と check-pr-commits は、タイトルとコミットメッセージが規約に沿っているかを検証します。書き方は 3-2. 開発ワークフロー と 3-4. PRの作成と説明の書き方 を参照してください。
次のステップ
Section titled “次のステップ”CI の仕組みを理解し、ローカルで事前に再現できるようになりました。これで Level 3 は完了です。Level 4 に進み、コンセンサスやネットワークなど、より深い内部実装を コンセンサスアルゴリズム から掘り下げていきましょう。