以下の内容はhttps://syu-m-5151.hatenablog.com/entry/2025/10/16/170800より取得しました。


baconを知らずにRust書いてた

cargo-watch、やめるってよ

Rustを書いてると、気づくんですよね。保存ボタンを押すたび、手動でcargo checkとかcargo testとか叩いてる自分に。「あれ、俺って原始人だっけ?」みたいな気持ちになる。そこで救世主として現れたのがcargo-watchだったわけです。過去形。

github.com

そう、cargo-watchはもうメンテされてないんです。引退しちゃった。

ここで一旦、真面目な話を。10年以上もcargo-watchとwatchexecっていうOSSプロジェクトを守り続けてきたFélix Saparelliさんに、心から敬意と感謝を。あなたのおかげで、世界中の無数のRust開発者が「あ、これ便利じゃん」って生産性爆上げできたんです。本当にありがとうございました。

で、公式READMEには作者本人がこう書き残してる。

"It's time to let it go. Use Bacon. Remember Cargo Watch."

なんかもう、エモすぎません?10年以上続いたプロジェクトが、バトンを次世代に渡して静かに去っていく感じ。その後継者がbacon。そして汎用性の塊みたいなwatchexec。ベーコンって名前、朝ごはん感あるけど、これが本当にすごいんですよ。

というわけでこの記事では、Rust開発で使えるファイル監視ツールについて解説していきます。cargo-watchロス、今日で終わりにしましょう。

baconって何?

baconは、Rust専用に作られたバックグラウンドコードチェッカーです。エディタの隣で動かしておくと、ファイルを保存するたびに自動でコンパイルチェックを走らせて、エラーや警告をリアルタイムで表示してくれます。

github.com

cargo-watchとの違い

cargo-watchの作者が「baconこそが自分の理想だった」と語っているほど、baconは進化しています。

  • TUIで見やすい - エラーが警告より先に表示され、スクロール不要
  • キーボード操作 - tでテスト、cでClippy、dでドキュメントと一瞬で切り替え
  • 小さい画面でも快適 - ターミナルのサイズに合わせて表示を最適化
  • Rust Analyzerと競合しない - 開発体験がスムーズ

インストール

# 基本インストール
cargo install --locked bacon

# オプション機能も入れる(クリップボード、サウンド)
cargo install --locked bacon --features "clipboard sound"

基本的な使い方

プロジェクトのルートでbaconを起動するだけ。

cd your-rust-project
bacon

デフォルトではcargo checkが走ります。ファイルを保存すると自動で再チェック。

主要なキーボードショートカット

baconの真価はキーボードショートカットにあります。

  • t - テスト実行に切り替え
  • c - Clippyに切り替え
  • d - ドキュメントをブラウザで開く
  • f - テスト失敗時、そのテストだけに絞り込み
  • Esc - 前のジョブに戻る
  • Ctrl+j - すべてのジョブ一覧を表示
  • h - ヘルプ表示
  • q - 終了

特定のジョブで起動

# テストを監視
bacon test

# Clippyを監視
bacon clippy

# 厳格なClippyルール(pedantic)
bacon pedantic

# 高速テストランナー(nextest)
bacon nextest

# すべてのターゲットをチェック
bacon check-all

# 特定のジョブを指定
bacon --job my-custom-job

bacon.toml で設定をカスタマイズ

プロジェクトに合わせてジョブを定義できます。

# 設定ファイルを生成
bacon --init

設定例

# bacon.toml

# Windows向けのチェック
[jobs.check-win]
command = ["cargo", "check", "--target", "x86_64-pc-windows-gnu"]

# 厳しめのClippy
[jobs.clippy-strict]
command = [
    "cargo", "clippy", "--",
    "-D", "warnings",
    "-A", "clippy::collapsible_if",
]
need_stdout = false

# サンプルをチェック
[jobs.check-examples]
command = ["cargo", "check", "--examples", "--color", "always"]
watch = ["examples"]  # srcは自動で監視される

# 実行ジョブ
[jobs.run]
command = ["cargo", "run"]
allow_warnings = true
need_stdout = true

# キーバインディングのカスタマイズ
[keybindings]
shift-c = "job:clippy-strict"
r = "job:run"

設定しておいてよいこと

ドキュメントを素早く確認

[jobs.doc-open]
command = ["cargo", "doc", "--no-deps", "--open"]
need_stdout = false
on_success = "back"  # ドキュメントが開いたら前のジョブに戻る

長時間実行するアプリケーション

[jobs.server]
command = ["cargo", "run"]
allow_warnings = true
need_stdout = true
background = false
on_change_strategy = "kill_then_restart"

watchexecとの使い分け

baconはRust専用ですが、watchexecは汎用的なファイル監視ツールです。

github.com

watchexecを使うべき場合

# インストール
cargo install watchexec-cli

# 基本的な使い方
watchexec --restart cargo run

# 特定の拡張子だけ監視
watchexec -e rs,toml cargo test

# デバウンス設定
watchexec -d 2000 cargo check

watchexecが向いているケース: - Rust以外の言語やツール - シェルスクリプトの実行 - rsyncなどの同期処理 - より細かい制御が必要な場合

# 例:TypeScriptのビルド
watchexec -e ts,tsx npm run build

# 例:ファイル同期
watchexec -w src -- rsync -avhP ./src/ ./backup/

実践的なワークフロー

開発時のセットアップ

  1. ターミナルを分割

    • 左:Vim/Neovim
    • 右上:bacon
    • 右下:通常のシェル

    私はWarpを使ってペイン分割している。

  2. baconの起動

bacon  # デフォルトでcheckが走る
  1. コードを書く

    • 保存すると自動でチェック
    • エラーがあれば即座に表示
    • エラーが消えたらClippyの警告が見える
  2. テストを書く

    • tキーでテストモードに切り替え
    • 失敗したらfで絞り込み
    • 修正したらEscで全テストに戻る
  3. 最終チェック

    • cキーでClippyの提案を確認
    • コード品質を向上

ちょっとしたTips

シェルエイリアスで効率化

頻繁に使うコマンドをエイリアス化すると便利です。

# ~/.zshrc または ~/.bashrc に追加
alias bac='bacon'
alias bacc='bacon clippy'
alias bact='bacon test'
alias bacp='bacon pedantic'

watchexecで複数パスを監視

# srcとtestsディレクトリの.rsと.tomlファイルを監視
watchexec -e rs,toml -w src -w tests -- cargo test

Vim/Neovimとの連携

nvim-bacon プラグイン

baconの診断結果をNeovimに統合するプラグインがあります。

github.com

" lazy.nvim の場合
{
  'Canop/nvim-bacon',
  config = function()
    require('bacon').setup()
  end
}

主な機能は以下の通り。

  • エラー箇所へのジャンプ
  • Quickfixへの統合
  • :Bacon コマンドでbaconを起動
  • :BaconLoad で診断結果を読み込み

補足:VS Code向け

VS Codeユーザーの場合は、bacon-lsというLanguage Serverが利用可能です。

まとめ

cargo-watchの時代は終わりました。でも、より良いツールが生まれています。

こう使い分けよう:

  • Rust開発 → bacon一択

    • TUIが快適
    • キーボードだけで完結
    • 設定ファイルで柔軟にカスタマイズ
  • それ以外 → watchexec

baconを知らずにRustを書いていた人は、今すぐ試してください。開発体験が一段階レベルアップします。

cargo install --locked bacon
cd your-project
bacon

たったこれだけ。あとはコードを書くだけです。


参考リンク: - bacon公式サイト - watchexec GitHub - cargo-watch(アーカイブ済み)




以上の内容はhttps://syu-m-5151.hatenablog.com/entry/2025/10/16/170800より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14