grepai-watch-daemon について
プロジェクトのコードをインデックス化し、最新状態に保つ `grepai watch` コマンドとデーモンのスキルガイドです。フォアグラウンドやバックグラウンドでの実行、状態確認、設定、トラブルシューティングを開発者向けに説明します。
主な機能
- 01プロジェクトのソースファイルをスキャンしてインデックス化
- 02ファイル変更を監視してインデックスを更新
- 03フォアグラウンドまたはバックグラウンドで実行
- 04状態確認、デーモン停止、ログ確認
- 05デバウンスとワークスペース監視の設定
活用シーン
- 01コードの初期インデックス作成
- 02ファイル変更に応じたインデックス更新
- 03複数プロジェクトのバックグラウンド処理管理
- 04デーモンやファイル監視の問題調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yoanbernabeu/ grepai-skills --skill grepai-watch-daemonインストール後、Claude Code で/grepai-watch-daemonを入力して読み込まれたか確認します。
詳細
GrepAI Watch デーモン
このスキルでは、リアルタイムのコードインデックス作成に使う grepai watch コマンドとデーモンの管理について説明します。
このスキルを使う場面
- コードの初回インデックス作成を開始するとき
- リアルタイムのファイル監視を設定するとき
- デーモンをバックグラウンドで実行するとき
- インデックス作成の問題をトラブルシューティングするとき
Watch デーモンの機能
watch デーモンは次の処理を行います。
- プロジェクト内のすべてのソースファイルをスキャンします
- コードをセグメント(約512トークン)に分割します
- 設定済みのプロバイダーを使って埋め込みを生成します
- 設定済みのバックエンドにベクトルを保存します
- ファイルの変更をリアルタイムで監視します
- ファイルの変更時にインデックスを更新します
基本的な使い方
フォアグラウンドで監視を開始する
cd /your/project
grepai watch
出力:
🔍 GrepAI Watch
Scanning files...
Found 245 files
Processing chunks...
████████████████████████████████ 100%
Indexed 1,234 chunks
Watching for changes...
停止するには Ctrl+C を押します。
バックグラウンドで開始する
grepai watch --background
出力:
🔍 GrepAI Watch (background)
Daemon started with PID 12345
Log file: ~/.grepai/daemon.log
デーモンのステータスを確認する
grepai watch --status
出力:
✅ GrepAI Daemon Running
PID: 12345
Started: 2025-01-28 10:30:00
Project: /path/to/project
Statistics:
- Files indexed: 245
- Chunks: 1,234
- Last update: 2 minutes ago
デーモンを停止する
grepai watch --stop
出力:
✅ Daemon stopped (PID 12345)
コマンドリファレンス
| コマンド | 説明 |
|---|---|
grepai watch | デーモンをフォアグラウンドで開始します |
grepai watch --background | デーモンをバックグラウンドで開始します |
grepai watch --status | デーモンのステータスを確認します |
grepai watch --stop | 実行中のデーモンを停止します |
設定
Watch の設定
# .grepai/config.yaml
watch:
# Debounce delay in milliseconds
# Groups rapid file changes together
debounce_ms: 500
デバウンスについて
ファイルを保存すると、エディターは短時間に何度も書き込みを行うことがあります。デバウンスは、変更が落ち着くまで待機します。
| 値 | 動作 |
|---|---|
100 | 応答性は高くなりますが、再インデックスの回数が増えます |
500 | バランスが取れています(デフォルト) |
1000 | 応答性は低くなりますが、再インデックスの回数が減ります |
初回のインデックス作成
インデックス作成の対象
デーモンは次のファイルをインデックス化します。
- 対応する拡張子(.go、.js、.ts、.py など)に一致するファイル
- 除外パターン(node_modules、.git など)に含まれないファイル
.gitignoreの設定に従ったファイル
インデックス作成の進行状況
大規模なコードベースでは進行状況が表示されます。
Scanning files...
Found 10,245 files
Processing chunks...
████████████████░░░░░░░░░░░░░░░░ 50% (5,122/10,245)
インデックス作成時間の目安
| コードベース | ファイル数 | 所要時間(Ollama) | 所要時間(OpenAI) |
|---|---|---|---|
| 小規模 | 100 | 約30秒 | 約10秒 |
| 中規模 | 1,000 | 約5分 | 約1分 |
| 大規模 | 10,000 | 約30分 | 約5分 |
リアルタイム監視
初回のインデックス作成後、デーモンは次の変更を監視します。
- ファイルの作成
- ファイルの変更
- ファイルの削除
- ファイル名の変更
ファイル変更の検出
OS 標準のファイル監視機能を使用します。
- macOS: FSEvents
- Linux: inotify
- Windows: ReadDirectoryChangesW
再インデックスが実行される操作
| 操作 | 結果 |
|---|---|
| 既存ファイルの保存 | ファイルのチャンクを再度埋め込みます |
| 新しいファイルの作成 | 新しいチャンクをインデックス化します |
| ファイルの削除 | インデックスから削除します |
| ファイル名の変更 | パスを更新し、ベクトルは保持します |
バックグラウンドデーモンの管理
システム起動時に開始する
macOS(launchd)
~/Library/LaunchAgents/com.grepai.watch.plist を作成します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.grepai.watch</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/grepai</string>
<string>watch</string>
</array>
<key>WorkingDirectory</key>
<string>/path/to/your/project</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
読み込みます。
launchctl load ~/Library/LaunchAgents/com.grepai.watch.plist
Linux(systemd)
~/.config/systemd/user/grepai-watch.service を作成します。
[Unit]
Description=GrepAI Watch Daemon
After=network.target
[Service]
Type=simple
WorkingDirectory=/path/to/your/project
ExecStart=/usr/local/bin/grepai watch
Restart=always
[Install]
WantedBy=default.target
有効にします。
systemctl --user enable grepai-watch
systemctl --user start grepai-watch
ログの確認
# Background daemon logs
tail -f ~/.grepai/daemon.log
# Or with systemd
journalctl --user -u grepai-watch -f
複数のプロジェクト
プロジェクトごとに1つのデーモン
プロジェクトごとに個別のデーモンを実行します。
# Terminal 1: Project A
cd /path/to/project-a
grepai watch --background
# Terminal 2: Project B
cd /path/to/project-b
grepai watch --background
ワークスペースの使用
複数のプロジェクトを設定する場合:
grepai workspace create my-workspace
grepai workspace add my-workspace /path/to/project-a
grepai workspace add my-workspace /path/to/project-b
grepai watch --workspace my-workspace
トラブルシューティング
デーモンが起動しない
❌ 問題:「別のデーモンがすでに実行中です」 ✅ 解決方法:
grepai watch --stop
grepai watch --background
❌ 問題:「設定が見つかりません」 ✅ 解決方法: まず初期化します。
grepai init
grepai watch
❌ 問題:「埋め込みプロバイダーへの接続に失敗しました」 ✅ 解決方法: 埋め込みプロバイダーを起動します。
ollama serve # For Ollama
インデックス作成の問題
❌ 問題: ファイルがインデックス化されない ✅ 解決方法: 設定の除外パターンを確認し、ファイル拡張子が対応していることを確認します。
❌ 問題: インデックス作成が非常に遅い ✅ 解決方法:
- クラウド埋め込みを高速に行うには OpenAI を使用します
- 除外パターンを追加します
- チャンクサイズを大きくします
❌ 問題: インデックスが古いように見える ✅ 解決方法: インデックスをクリアして再作成します。
rm .grepai/index.gob
grepai watch
ファイル監視の問題
❌ 問題: 変更が検出されない ✅ 解決方法:
- debounce_ms の値を小さくします
- inotify の上限を確認します(Linux):
echo 65536 | sudo tee /proc/sys/fs/inotify/max_user_watches
ベストプラクティス
- バックグラウンドで実行する: 継続的な監視に適しています
- モノレポではワークスペースを使用する: 整理しやすくなります
- 自動起動を設定する: launchd または systemd
- 定期的にログを確認する: エラーを監視します
- 設定を変更した後に再インデックスする: 特に埋め込みモデルを変更した後
ステータス確認
定期的なヘルスチェック:
grepai status
出力:
✅ GrepAI Status
Project: /path/to/project
Config: .grepai/config.yaml
Embedder: Ollama (nomic-embed-text)
Storage: GOB (.grepai/index.gob)
Index:
- Files: 245
- Chunks: 1,234
- Size: 12.5 MB
- Last updated: 2025-01-28 10:30:00
Daemon: Running (PID 12345)
出力形式
デーモンのステータスを監視します:
✅ Watch Daemon Active
Mode: Background
PID: 12345
Project: /path/to/project
Initial Index:
- Files scanned: 245
- Chunks created: 1,234
- Duration: 45s
Real-time Monitor:
- Debounce: 500ms
- Events processed: 23
- Last event: 5 minutes ago
Next steps:
- Run 'grepai search "query"' to search
- Run 'grepai watch --status' to check status
- Run 'grepai watch --stop' to stop daemon