macOSでファイル変更を監視する
macOS上でファイルの変更を監視する方法について解説します。ディレクトリ内のファイル作成や更新、削除といったイベントをプログラムで検出する技術やツールを紹介し、実際の実装例も交えて説明します。
背景メモ
macOSでファイル変更を検知(ウォッチ)する標準的な方法についての技術解説。
- **kqueue**:BSD系OSのファイル変更通知機能。macOSが持つ唯一の本格的な仕組みだが、ディレクトリ監視で再帰動作ができず個別登録が必要で、FSEventsに比べ情報量が少ない。
- **FSEvents**:macOS 10.5以降に追加されたファイルシステム変更追跡API。ディレクトリツリー全体の監視が可能で、大量ファイル変更をまとめて通知できる。性能面でkqueueより優れるが、実装はFile System Eventsデーモンに依存し、イベントの遅延や欠落リスクがある。
- **Dispatch Source**:Grand Central Dispatch(GCD)ベースの高レベルAPIで、kqueueと同程度の粒度だがイベントループ統合が容易。
記事著者は、実際の監視では変更操作の結合(coalescing)やシンボリックリンク追跡に注意が必要だと指摘。プロジェクト監視ではFSEventsが推奨されるが、単一ファイル監視にはDispatch Sourceやkqueueが適している。