💭

cargoでサブコマンドを簡単に作る

2024/11/04に公開

概要

Cargoのサブコマンドとして自作のコマンドを実行する方法を示します。Cargoを使ったプロジェクト内で簡単にカスタムコマンドを呼び出せるようになります。
今回は、src/bin/以下にあるファイルをfzfを使って選択して実行するコマンド(cargo-select)を自作します。

img

手順

$HOME/.cargo/bin/以下にcargo-から始まる実行可能なファイルを置いておけばcargoのサブコマンドとして認識されます。

1. 実行形式のファイルを作成する

src/bin/*.rsファイルをfzfで選択し、cargo run --binで実行するスクリプトを作成します。

#!/bin/bash

BIN_DIR="src/bin"
TARGET=$(find $BIN_DIR -name "*.rs" | fzf)

if [ -z "$TARGET" ]; then
	echo "No target selected."
	exit 1
fi

TARGET_NAME=$(basename -s .rs "$TARGET")
cargo run --bin "$TARGET_NAME"

このスクリプトを cargo-select という名前で保存します。ファイルに実行権限を付与しておきます。

chmod +x cargo-select

2. 実行ファイルを配置する

次に、作成した実行ファイルを $HOME/.cargo/bin/ ディレクトリに移動します。

mv cargo-select $HOME/.cargo/bin/

3. サブコマンドとして認識されているか確認する

cargo --listでサブコマンドの一覧が確認できます。cargo-selectが含まれていればOKです。

$ cargo --list
Installed Commands:
    add                  Add dependencies to a Cargo.toml manifest file
    b                    alias: build
    bench                Execute all benchmarks of a local package
    build                Compile a local package and all of its dependencies
    c                    alias: check
    (中略)
    search               Search packages in crates.io
    select
    sort
    (後略)

4. 実行する

これで自作のコマンドが cargo のサブコマンドとして使えるようになります。以下のコマンドを実行してみてください。なお、src/bin/がないと動作しないことに注意してください。

cargo select

参考文献

GitHubで編集を提案

Discussion