十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Repomix ウォッチモード完全指南 — ファイル変更を検知して自動再パックする仕組みと使い方

Repomix ウォッチモード完全指南 — ファイル変更を検知して自動再パックする仕組みと使い方 Repomix ウォッチモード完全指南 — ファイル変更を検知して自動再パックする仕組みと使い方【免费下载链接】repomix Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.项目地址: https://gitcode.com/GitHub_Trending/rep/repomixRepomix のウォッチモード--watchは、コードベースを常時監視し、ファイルが変更されるたびに出力ファイルを自動的に再生成する機能です。作業しながら AI アシスタントに渡すスナップショットを常に最新に保ちたい場合に最適で、本記事を読み終えると、-wフラグの基本操作、300ms デバウンスや無視ルールの内部動作、併用できないオプションの一覧とその理由まで、ソースコード準拠の正確な知識を身につけられます。ウォッチモードとはRepomix は通常、コマンドを実行した時点のコードベースを一度だけパックして出力ファイルを生成します。ウォッチモードを有効にすると、Repomix はパック完了後もプロセスを常駐させ、監視対象ディレクトリ内でファイルの新規作成・変更・削除を検知するたびに自動で再パックを行います。これにより、開発中に何度も手動でコマンドを叩き直す必要がなくなり、継続的に更新されるスナップショットを LLMClaude、ChatGPT、DeepSeek などへ渡し続けるワークフローを実現できます。日本語版公式ガイド watch-mode.md では「作業中も出力ファイルを最新に保てる」点がその主な利点として説明されています。使い方ウォッチモードは-wまたは--watchフラグで開始します。フラグの定義は cliRun.ts のWatch Modeオプショングループにあり、-w, --watchで「ファイル変更を監視して自動再パックする」動作が有効になります。repomix --watch実行すると、Repomix はまず一度パックし、その後も実行を続けて変更のたびに再パックします。通常のオプションと組み合わせることもできます。# 特定のファイルだけを監視 repomix -w --include src/**/*.ts # 出力ファイルと形式を指定して監視 repomix --watch -o output.md --style markdown最初の例では--includeによりsrc/**/*.tsに一致するファイルだけがパック対象となり、監視もその対象に絞られます。2 つ目の例では-o output.mdと--style markdownにより、出力先とフォーマットを指定した上で監視を開始します--styleにはxml、markdown、json、plainが指定可能で、デフォルトはxml。詳細は command-line-options.md 参照。監視を停止するにはCtrlCを押します。内部では SIGINTおよび SIGTERMシグナルを受けて watcher を閉じ、実行中の再ビルドを待ってからプロセスが終了します詳細は後述の「シャットダウン処理」で解説。動作の仕組みウォッチモードの実行フローは、watchAction.ts のrunWatchAction関数に実装されています。公式ガイドが説明する主要な挙動は以下のとおりです。初回パック: Repomix はコードベースを一度パックし、監視対象のファイル数を表示します。実際のログはWatching ${packResult.safeFilePaths.length} files for changes... (CtrlC to stop)の形式で、パック結果PackResult.safeFilePathsに含まれる安全なファイル数がそのまま監視件数として報告されますwatchAction.ts。変更検出: 新規・変更・削除されたファイルがいずれも再パックのトリガーになります。chokidar のchange変更、add追加、unlink削除の 3 イベントすべてが再ビルドのスケジュール関数scheduleRebuildに接続されていますwatchAction.ts。デバウンス: 短時間に連続する変更ブランチの切り替えや一括保存などはまとめられます。最後の変更から300ms待ってから再パックするため、立て続けの編集でも再構築は 1 回にまとまります。この閾値は定数REBUILD_DEBOUNCE_MS 300として定義されており、変更イベントが来るたびにタイマーがリセットされ、最後のイベントから 300ms 経過した時点で初めて再ビルドが実行されますwatchAction.ts。タイムスタンプ: 再構築のたびに Repomix はタイムスタンプRebuilt at HH:MM:SSを表示するので、出力が最後に更新された時刻が分かります。ソースコードから見るデバウンスの実装詳細デバウンスはscheduleRebuild内でsetTimeoutを使って実装されています。特筆すべきは再ビルド中のイベントは破棄せず、キューに積んで後で実行する設計ですisRebuilding/pendingRebuildフラグ、watchAction.ts。変更イベントを受けるとデバウンスタイマーを再設定する300ms 経過後、isRebuildingが true再ビルド中ならpendingRebuild trueを立てて一旦返す進行中の再ビルドが完了したらpendingRebuildが立っていれば直ちに次の再ビルドをスケジュールするこれにより、再ビルドが同時に 2 つ走ることは決してなく、ビルド中に発生した変更も失われません。この挙動は watchAction.test.ts の「should not start a concurrent rebuild while one is in progress」テストで検証されています。また、Rebuilt atのタイムスタンプはnew Date().toTimeString().split( )[0]で生成されますwatchAction.ts。toLocaleTimeStringではなくtoTimeStringを使うのは、システムロケール非 ASCII 数字や AM/PM 表記に依存せず、全プラットフォームで安定した 24 時間表記HH:MM:SSを得るためという実装上の意図がコードコメントに明記されています。書き込み安定性の保証awaitWriteFinishデバウンスに加えて、chokidar のawaitWriteFinishオプションが{ stabilityThreshold: 100 }で設定されていますwatchAction.ts。これは「ファイルサイズが 100ms 連続で変化しなくなってから変更イベントとして発火する」という設定で、エディタが書きかけの途中ファイルをパックしてしまう事故を防ぎます定数WRITE_STABILITY_THRESHOLD_MS 100、watchAction.ts。シャットダウン処理CtrlCを押すと、SIGINT/SIGTERM ハンドラcleanupが実行されます。この処理は冪等に設計されており、二度押ししても watcher は一度しか閉じられませんcleanupStartedフラグによるガード、watchAction.ts。クリーンアップ時はデバウンスタイマーをキャンセルし、実行中の再ビルドの完了を待ってから watcher を閉じ、プロセスを終了します。二重 CtrlC で watcher が二重に閉じられないことは watchAction.test.ts でテストされています。無視されるファイルウォッチモードは通常実行と同じ無視ルールに従います。.gitignore、.repomixignore.ignore、組み込みのデフォルトパターンnode_modulesや.gitなど、および--ignoreで渡したパターンを尊重します。無視されるディレクトリは監視対象から外れるため、大規模プロジェクトでもウォッチモードは効率的に動作します。--no-gitignore:.gitignoreルールの適用を無効化--no-dot-ignore:.ignore/.repomixignoreルールの適用を無効化--no-default-patterns: 組み込みのデフォルトパターンnode_modules、.git、ビルドディレクトリなどを無効化これらのフラグは cliRun.ts の「File Selection Options」で定義されています。ソースコードから見る監視フィルタの実装ウォッチモードで使われる無視判定は、watchIgnore.ts のbuildWatchIgnoreFilterが生成する述語関数として実装されています。chokidar のignoredオプションにこの関数を渡すことで、パッカーと同じ無視ルールを監視側でも完全に再現します。実装上の重要なポイントは以下のとおりです。chokidar v4 ではignoredに glob が使えないため、パッカーの glob パターンはminimatchで評価されますwatchIgnore.ts。無視されるディレクトリ自体node_modules、.gitなどもマッチ対象にしており、chokidar が巨大なツリーに降下してファイルディスクリプタを枯渇させるEMFILE エラーのを防いでいます。foo/**パターンからfoo自体のマッチャーを生成するdirMatchersがその役割を担いますwatchIgnore.ts。パッカーと同じ無視解決パイプラインデフォルトパターン、カスタムパターン、.git/info/exclude、.gitignore、.ignore/.repomixignoreを、globby のisGitIgnored/isIgnoredByIgnoreFilesを再利用して再現していますwatchIgnore.ts。出力ファイル自身例:repomix-output.xmlも監視対象から除外され、自分が生成した出力ファイルの変更で無限ループに陥ることがありません。この点は watchIgnore.test.ts の「ignores the output file path」テストで確認できます。ちなみに、--watchと併用した場合でも、位置引数としてディレクトリを複数渡すことで複数ルートを同時に監視できます複数ルートのネスト・重複に対応する判定ロジックは watchIgnore.ts に実装されています。オプションの互換性ウォッチモードはローカルディレクトリでのみ動作するため、次のオプションとは併用できませんコマンドラインで指定した場合でも設定ファイルで指定した場合でも同様です。--remoteおよび引数として渡すリモートリポジトリ URL — ウォッチモードはローカル専用--stdoutおよび--stdin— ストリーミングモードには更新対象となる永続的な出力ファイルがない--split-output--skill-generate--copy— 変更のたびに再パックするとクリップボードを繰り返し上書きしてしまうこれらのいずれかを--watchと併用すると、Repomix は競合を説明するエラーを表示して終了します。ソースコードから見る二重の検証レイヤー互換性チェックは2 つのレイヤーで実行されており、これが「CLI で指定しても設定ファイルで指定しても」エラーになる理由です。CLI フラグ検証validateWatchOptions: cliRun.ts で、--watchが指定されている場合に--remote、--stdout、--stdin、--copy、--split-output、--skill-generate、位置引数のリモート URL を順に検査し、RepomixErrorを投げます。この検証はログレベル変更より前に実行されるため、--quietや--stdoutでエラーメッセージが抑圧されることはありません。マージ済み設定の再検証runWatchAction内:validateWatchOptionsは CLI フラグしか見ないため、設定ファイルrepomix.config.json等経由で指定された競合オプションは検出できません。そこで watchAction.ts がbuildMergedConfigで生成したマージ済み設定デフォルトファイルCLI を統合に対して、output.splitOutput、output.stdoutまたはoutput.filePath -、skillGenerate、output.copyToClipboardを再検査しています。特にoutput: -は--stdoutと同じ標準出力モードに解決されるためcliRun.ts、設定ファイルでoutput: -と書いた場合もウォッチモードではエラーになります。この「設定ファイル経由の競合も拒否する」挙動は、watchAction.test.ts の一連のテストsplit output / stdout /output: -/ skill generation / copy を設定ファイルで有効化したケースでカバーされています。また--split-outputが競合する理由はコードコメントに明記されており、「分割出力は番号付きの複数ファイルを生成し、それを watcher が拾ってループする」ためですwatchAction.ts。注意点監視対象はディレクトリ単位: 個々のファイルではなく監視対象ディレクトリ自体を chokidar に渡すことで、新規作成されたファイルも確実に検知できるようにしていますwatchAction.ts。個別ファイル監視だと新規ファイルを見逃すためです。watcher エラーはログに記録されるだけ: EMFILE や EACCES などの致命的エラーはFile watcher error:としてログ出力されますwatchAction.ts。ただし初回リリース時点ではエラー発生後もプロセスは生存し続ける仕様であることがコードコメントに記載されており、動作が停止していることに気づきにくい可能性がある点には留意してください。再ビルド失敗はプロセスを止めない: 再パックが失敗しても watcher は動き続け、Watch rebuild failed:のエラーログ後に後続の変更で再び再ビルドを試みますwatchAction.ts、watchAction.test.ts。chokidar は遅延ロード:--watchを実際に使うときだけ chokidar が動的 import されるため、通常実行時の起動コストに影響しませんwatchAction.ts。関連リソースコマンドラインオプション —--watchを含む CLI の完全なリファレンスウォッチモードの要約と併用不可オプションの一覧も記載基本的な使用方法 — Repomix の他の実行方法設定 — 設定ファイルでデフォルトの出力オプションを設定ソースコードをさらに深く読みたい場合は、watchAction.ts本体、watchIgnore.ts無視フィルタ、cliRun.tsフラグ定義と競合検証、および対応するテスト watchAction.test.ts と watchIgnore.test.ts が参考になります。【免费下载链接】repomix Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.项目地址: https://gitcode.com/GitHub_Trending/rep/repomix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表