「Rust パッケージガイドライン」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:Arch パッケージガイドライン en:Rust package guidelines pt:Rust package guidelines {{Package Guidelines}} このドキュメントでは […」)
 
(2人の利用者による、間の5版が非表示)
6行目: 6行目:
 
このドキュメントでは [[Rust]] の [[PKGBUILD]] を書く時の基準とガイドラインを説明しています。
 
このドキュメントでは [[Rust]] の [[PKGBUILD]] を書く時の基準とガイドラインを説明しています。
   
  +
== パッケージの命名 ==
== 一般的なガイドライン ==
 
   
  +
[[Rust]] のプロジェクトをパッケージングする際は、基本的にパッケージ名は生成されるバイナリの名前と同じにするべきです。これはライブラリクレートをパッケージングする場合には当てはまらず、バイナリのクレートの場合にのみ当てはまることに注意してください。2つ以上のバイナリを生成するクレートの場合、上流のクレート名を使うのが通常適切です。いかなる場合でも、パッケージ名はすべて小文字である必要があります。
=== パッケージの命名 ===
 
   
  +
== ソース ==
[[Rust]] のバイナリの場合はプログラムの名前だけを使ってください。
 
   
  +
ほとんどの Rust プロジェクトは tarball、ソースアーカイブ(例: GitHub リリースのソースリンク)、その他の公開されているソースからビルドすることができます。あるいは、多くのプロジェクトが、[[cargo]] のための安定しているダウンロード URL スキームを提供する [https://crates.io crates.io] 上に公開されています。お望みならば、[[PKGBUILD#source]] で以下のテンプレートを使うことができます:
{{Note|パッケージ名は全て小文字である必要があります。}}
 
  +
  +
<nowiki>source=("$pkgname-$pkgver.tar.gz::https://static.crates.io/crates/$pkgname/$pkgname-$pkgver.crate")</nowiki>
   
 
== ビルド ==
 
== ビルド ==
31行目: 33行目:
 
大抵の Rust プロジェクトではテストスイートを簡単に実行できるようになっています:
 
大抵の Rust プロジェクトではテストスイートを簡単に実行できるようになっています:
   
check() {
+
check() {
  +
export RUSTUP_TOOLCHAIN=stable
cargo test --release --locked
 
  +
cargo test --frozen --all-features
}
 
  +
}
  +
  +
テストを実行する際は {{ic|--release}} フラグを使用することは避けてください。さもないと、バイナリが[https://doc.rust-lang.org/cargo/reference/profiles.html#bench ''bench'' プロファイル]により再コンパイルされ、{{ic|build()}} により生成されたバイナリを置き換えてしまいます。あるいは、{{ic|CARGO_TARGET_DIR}} に異なる値を使って {{ic|--release}} フラグを使用してください。しかし、release モードはコンパイラ最適化も有効化し、整数のオーバーフロー検査や {{ic|debug_assert!()}} マクロなどの一部の機能を無効化してしまうことに注意してください。なので、理論上、補足できる問題が少なくなってしまう''可能性''があります。どちらのアプローチでも、依存するクレートを再びコンパイルするので、合計のビルド時間が増えます。
   
 
== パッケージ ==
 
== パッケージ ==
39行目: 44行目:
 
Rust はバイナリを {{ic|target/release}} にビルドするので {{ic|/usr/bin}} にインストールします:
 
Rust はバイナリを {{ic|target/release}} にビルドするので {{ic|/usr/bin}} にインストールします:
   
  +
package() {
{{Note|パッケージによっては man ページなど他のファイルもインストールします。}}
 
  +
install -Dm0755 -t "$pkgdir/usr/bin/" "target/release/$pkgname"
  +
}
   
  +
パッケージが2つ以上の実行ファイルを {{ic|/usr/bin}} に持つ場合、find コマンドを使うことができます:
package() {
 
  +
install -Dm 755 target/release/${pkgname} -t "${pkgdir}/usr/bin"
 
  +
package() {
}
 
  +
find target/release \
  +
-maxdepth 1 \
  +
-executable \
  +
-type f \
  +
-exec install -Dm0755 -t "$pkgdir/usr/bin/" {} +
  +
}
  +
  +
=== {{ic|cargo install}} を使う際の注意点 ===
  +
  +
一部のパッケージは、man ページや他のアセットなどのより多くのファイルをインストールします。そのようなパッケージがそれらのファイルをインストールする方法が他にない場合、{{ic|cargo install}} を使うことができます。この場合、{{ic|cargo build}} を使ってパッケージがすでにビルドされていたとしても {{ic|cargo install}} は再ビルドを強制的に行うので、{{ic|build()}} は必須ではありません。{{ic|prepare()}} ステージはソースを予めフェッチしておくためにまだ使用できます:
  +
  +
package() {
  +
cd "$pkgname-$pkgver"
  +
export RUSTUP_TOOLCHAIN=stable
  +
cargo install --no-track --frozen --all-features --root "$pkgdir/usr/" --path .
  +
}
  +
  +
{{ic|--no-track}} 引数は常に使用する必要があります。さもないと、{{ic|cargo install}} は {{ic|/usr/.crates.toml}} や {{ic|/usr/.crates2.json}} などの不必要なファイルを作成してしまいます。
  +
  +
== パッケージの例 ==
  +
  +
パッケージページの ''パッケージアクション > ソースファイル'' をクリックして、PKGBUILD を見ることができます。
  +
  +
* {{Pkg|cbindgen}}
  +
* {{Pkg|ripgrep}}

2022年6月29日 (水) 13:40時点における版

このドキュメントでは RustPKGBUILD を書く時の基準とガイドラインを説明しています。

パッケージの命名

Rust のプロジェクトをパッケージングする際は、基本的にパッケージ名は生成されるバイナリの名前と同じにするべきです。これはライブラリクレートをパッケージングする場合には当てはまらず、バイナリのクレートの場合にのみ当てはまることに注意してください。2つ以上のバイナリを生成するクレートの場合、上流のクレート名を使うのが通常適切です。いかなる場合でも、パッケージ名はすべて小文字である必要があります。

ソース

ほとんどの Rust プロジェクトは tarball、ソースアーカイブ(例: GitHub リリースのソースリンク)、その他の公開されているソースからビルドすることができます。あるいは、多くのプロジェクトが、cargo のための安定しているダウンロード URL スキームを提供する crates.io 上に公開されています。お望みならば、PKGBUILD#source で以下のテンプレートを使うことができます:

source=("$pkgname-$pkgver.tar.gz::https://static.crates.io/crates/$pkgname/$pkgname-$pkgver.crate")

ビルド

Rust パッケージのビルド:

 build() {
   cargo build --release --locked
 }

説明:

  • --releasecargo はリリースビルドをコンパイルします。
  • --lockedcargoCargo.lock ファイルを変更して依存関係を更新しなくなります。再現可能なビルド とするために必要です。

チェック

大抵の Rust プロジェクトではテストスイートを簡単に実行できるようになっています:

check() {
    export RUSTUP_TOOLCHAIN=stable
    cargo test --frozen --all-features
}

テストを実行する際は --release フラグを使用することは避けてください。さもないと、バイナリがbench プロファイルにより再コンパイルされ、build() により生成されたバイナリを置き換えてしまいます。あるいは、CARGO_TARGET_DIR に異なる値を使って --release フラグを使用してください。しかし、release モードはコンパイラ最適化も有効化し、整数のオーバーフロー検査や debug_assert!() マクロなどの一部の機能を無効化してしまうことに注意してください。なので、理論上、補足できる問題が少なくなってしまう可能性があります。どちらのアプローチでも、依存するクレートを再びコンパイルするので、合計のビルド時間が増えます。

パッケージ

Rust はバイナリを target/release にビルドするので /usr/bin にインストールします:

package() {
    install -Dm0755 -t "$pkgdir/usr/bin/" "target/release/$pkgname"
}

パッケージが2つ以上の実行ファイルを /usr/bin に持つ場合、find コマンドを使うことができます:

package() {
    find target/release \
        -maxdepth 1 \
        -executable \
        -type f \
        -exec install -Dm0755 -t "$pkgdir/usr/bin/" {} +
}

cargo install を使う際の注意点

一部のパッケージは、man ページや他のアセットなどのより多くのファイルをインストールします。そのようなパッケージがそれらのファイルをインストールする方法が他にない場合、cargo install を使うことができます。この場合、cargo build を使ってパッケージがすでにビルドされていたとしても cargo install は再ビルドを強制的に行うので、build() は必須ではありません。prepare() ステージはソースを予めフェッチしておくためにまだ使用できます:

package() {
    cd "$pkgname-$pkgver"
    export RUSTUP_TOOLCHAIN=stable 
    cargo install --no-track --frozen --all-features --root "$pkgdir/usr/" --path .
}

--no-track 引数は常に使用する必要があります。さもないと、cargo install/usr/.crates.toml/usr/.crates2.json などの不必要なファイルを作成してしまいます。

パッケージの例

パッケージページの パッケージアクション > ソースファイル をクリックして、PKGBUILD を見ることができます。