コンテンツにスキップ

watchexec - ファイル変更時にコマンド実行チートシート

watchexec - ファイル変更時にコマンド実行チートシート

watchexec はファイルまたはディレクトリのセットを監視し、変更時にコマンドを実行します。言語およびプロジェクトに依存しません — 設定ファイル不要 — ファイルウォッチングのたいくつな部分を処理します:急速な変更のデバウンス、.gitignore の尊重、長時間実行プロセスのクリーン再起動、変更されたパスをコマンドに渡すこと。テストの自動実行、サーバー再起動、または保存時リビルドに使用します。

インストール

プラットフォームコマンド
Cargo (すべてのプラットフォーム)cargo install watchexec-cli
macOS (Homebrew)brew install watchexec
Arch Linuxsudo pacman -S watchexec
Debian/UbuntuReleases から .deb をダウンロード
Windows (Scoop)scoop install watchexec
確認watchexec --version

基本的な使用

コマンド説明
watchexec "cargo test"変更時にテスト実行
watchexec -e py "pytest".py ファイルのみを監視
watchexec -e js,ts,jsx "npm run build"複数の拡張子を監視
watchexec -- ls -la-- の後のすべてはコマンド
watchexec --help完全なオプションリスト

監視対象のフィルタリング

オプション説明
-e, --exts py,rsこれらのファイル拡張子のみでトリガー
-w, --watch DIR特定のパスを監視 (繰り返し可)
-i, --ignore GLOBグロブにマッチするパスを無視
--ignore-file FILEファイルから無視パターンを読み込み
--no-vcs-ignore.gitignore ルールを使用しない
-f, --filter GLOBグロブにマッチするファイルのみを監視

プロセス管理

オプション説明
-r, --restart変更時にコマンドを再起動 (kill + 再実行)
-s, --signal SIG再起動時に送信するシグナル (例: SIGTERM)
--stop-timeout 5s強制キル前のグレースピリオド
-o, --on-busy-update MODEqueuedo-nothingrestart、または signal
-nプロセスグループなし (直接子供のみシグナル送信)

長時間実行プロセス (サーバー)には -r を使用し、ワンショットコマンド (テスト、ビルド) にはデフォルト。

デバウンス & タイミング

オプション説明
--debounce 200ms変更がセットルするまで待ってから実行
--delay-run 1sコマンド実行前に遅延
-p, --postpone最初の変更まで実行を延期 (初期実行スキップ)

有用な動作

オプション説明
-c, --clear各実行前にスクリーンをクリア
--emit-events-to environment変更されたパスを環境変数経由で渡す
-N, --notify完了時にデスクトップ通知
--project-origin DIR無視ルール用のプロジェクトルートを設定
-v詳細 (トリガーをデバッグ)

環境変数 (変更されたパス)

イベントが環境に発行される場合、コマンドが何が変更されたかを確認できます:

変数含まれる
WATCHEXEC_COMMON_PATH変更されたパスの共通プリフィックス
WATCHEXEC_WRITTEN_PATH書き込まれたファイル
WATCHEXEC_CREATED_PATH作成されたファイル
WATCHEXEC_REMOVED_PATH削除されたファイル

一般的なワークフロー

# ソース変更時にテストスイートを自動実行
watchexec -e rs "cargo test"

# 変更時にサーバーをクリーンに再起動
watchexec -r -e go "go run ./cmd/server"

# スクリーンをクリア、distフォルダを無視してリビルド
watchexec -c -i "dist/**" -e ts "npm run build"

# 変更がセットルするまでのみ実行 (バルク保存で激動を回避)
watchexec --debounce 500ms -e py "pytest -x"

watchexec と関連ツール

ツールモデル
watchexecスタンドアロン、設定不要ファイルウォッチャー
entr最小限、stdinからファイルリストを読み込み
nodemonNode フォーカス、nodeアプリを再起動
mise/just + watchexecwatchexecにシェルアウトするタスクランナー

justmise のようなタスクランナーは、レシピにファイルウォッチングを追加するために watchexec とペア。

リソース