Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ビルドとテスト

前提条件

ビルド

# すべてのクレートをビルド
cargo build

# 特定の Feature を指定してビルド
cargo build --features embeddings-candle

# リリースモードでビルド
cargo build --release

静的リンクの musl バイナリをクロスビルドする

laurus-cli のリリースワークフローは、動的リンクの glibc バイナリに加えて、 完全に静的リンクされた x86_64-unknown-linux-musl / aarch64-unknown-linux-musl バイナリもビルドします (ビルド済みバイナリを参照)。

前提条件:

rustup target add x86_64-unknown-linux-musl aarch64-unknown-linux-musl
pip install cargo-zigbuild

cargo build の代わりに cargo zigbuild でビルドします:

cargo zigbuild --release --target x86_64-unknown-linux-musl \
  -p laurus-cli --features embeddings-all

x86_64 ターゲットについては make build-laurus-cli-musl と同等です)

なぜ apt install musl-tools ではなく cargo-zigbuild を使うのか? Ubuntu の musl-tools パッケージは musl-gcc(C)を提供しますが musl-g++(C++)は提供しません。laurus の --features embeddings-all の 依存関係の大部分は C のみか純 Rust です(aws-lc-sysonig_sys)が、 musl-tools だけの構成は依存 Feature を 1 つ切り替えるだけで再び C++ を 要求しかねません(tokenizersesaxx_fast。laurus では意図的に無効化 しています。Feature Flags を参照)。cargo-zigbuild は クロス C/C++ ツールチェーンとして Zig を使用し、 各ターゲット向けの musl ヘッダとライブラリを同梱しているため、Docker が 不要です。

ビルド結果が本当に静的であることを確認する:

file target/x86_64-unknown-linux-musl/release/laurus
# -> ELF 64-bit LSB executable, ..., statically linked
readelf -d target/x86_64-unknown-linux-musl/release/laurus | grep NEEDED
# -> (出力なし)

この手順が対応する CI 設定については .github/workflows/release.ymlbuild-binary を参照してください。

テスト

# すべてのワークスペーステストを実行(デフォルト Feature)
cargo test

# 名前を指定して特定のテストを実行
cargo test <test_name>

# 特定のクレートのテストを実行
cargo test -p laurus
cargo test -p laurus-cli
cargo test -p laurus-server
cargo test -p laurus-mcp

言語バインディングのテスト

各言語バインディングは固有のツールチェーン(Python virtualenv、Node.js npm、Ruby Bundler、PHP Composer、wasm32-unknown-unknown ターゲット)を持ちます。 Makefile はこれらをラップし、各ターゲットがツールチェーンを準備したうえで テストを実行します。

make test-laurus-python   # cargo test -p laurus-python + Maturin 経由の pytest
make test-laurus-nodejs   # npm run build:debug + npm test
make test-laurus-wasm     # cargo build -p laurus-wasm --target wasm32-unknown-unknown
make test-laurus-ruby     # cargo test -p laurus-ruby + Ruby minitest
make test-laurus-php      # cargo build -p laurus-php --release + PHPUnit

laurus-phplaurus-ruby との links = "clang" 競合のため Cargo ワークスペースから 除外されており、上記の Makefile ターゲット経由でスタンドアロンクレートとしてビルド・テストします。 対応する format-laurus-* / lint-laurus-* / build-laurus-* のバリアントを含む全ターゲットは Makefile を参照してください。

Lint

# clippy を警告エラー扱いで実行
cargo clippy -- -D warnings

フォーマット

# フォーマットチェック
cargo fmt --check

# フォーマットを適用
cargo fmt

ドキュメント

API ドキュメント

# Rust API ドキュメントを生成して開く
cargo doc --no-deps --open

mdBook ドキュメント

# ドキュメントサイトをビルド
mdbook build docs

# ローカルプレビューサーバーを起動 (http://localhost:3000)
mdbook serve docs

# Markdown ファイルを Lint
markdownlint-cli2 "docs/src/**/*.md"