chokidar の設定: hkob の雑記録 (14)

はじめに

hkob の雑記録の第14回目は、プログラミングの授業で利用するコマンド自動起動の仕組みである chokidar のインストールです。

chokidar について

chokidar は nodejs で動作するファイル変更検出をしてくれるアプリです。以前は、macOS の場合は、FSEvents のラッパーの形で実装されていたようですが、昨年 9 月に fsevents 依存を無くしたようです。

今回はちゃんと nodejs を調べてみました。これまでずっとパッケージ名が nodejs だと思っていましたが、node だったようです。

 % brew search nodejs
==> Formulae
node       nodenv     node@22    node@20    node@18    node@16    node@14

==> Casks
nodeclipse

nodejs でもこれまでインストールできていましたが、正しく node にしてみました。ちゃんと確かめることは重要ですね。Brewfile に以下を追加し、node をインストールしました。

brew "node" # Platform built on V8 to build network applications

./bootstrap.sh でインストールします。今回も依存関係で多くのパッケージがインストールされていることを確認しています。

% ./bootstrap.sh
==> Auto-updating Homebrew...
Adjust how often this is run with HOMEBREW_AUTO_UPDATE_SECS or disable with
HOMEBREW_NO_AUTO_UPDATE. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Auto-updated Homebrew!
Updated 3 taps (homebrew/services, homebrew/core and homebrew/cask).
==> New Casks
mihomo-party

Skipping install of homebrew/bundle tap. It is already installed.
Using homebrew/bundle
Skipping install of homebrew/services tap. It is already installed.
Using homebrew/services
Skipping install of visual-studio-code cask. It is already installed.
Using visual-studio-code
Skipping install of telnet formula. It is already installed.
Using telnet
Skipping install of python formula. It is already installed.
Using python
Installing node
Installing node formula. It is not currently installed.
==> Downloading https://ghcr.io/v2/homebrew/core/node/manifests/23.6.0
######################################################################### 100.0%
==> Fetching dependencies for node: brotli, c-ares, icu4c@76, libnghttp2 and libuv
==> Downloading https://ghcr.io/v2/homebrew/core/brotli/manifests/1.1.0-1
######################################################################### 100.0%
==> Fetching brotli
==> Downloading https://ghcr.io/v2/homebrew/core/brotli/blobs/sha256:b6e6ff18746
######################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/c-ares/manifests/1.34.4
######################################################################### 100.0%
==> Fetching c-ares
==> Downloading https://ghcr.io/v2/homebrew/core/c-ares/blobs/sha256:1db34e25cf5
######################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/76/manifests/76.1_1
######################################################################### 100.0%
==> Fetching icu4c@76
==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/76/blobs/sha256:66a2995c0
######################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libnghttp2/manifests/1.64.0
######################################################################### 100.0%
==> Fetching libnghttp2
==> Downloading https://ghcr.io/v2/homebrew/core/libnghttp2/blobs/sha256:f3851a8
######################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libuv/manifests/1.49.2
######################################################################### 100.0%
==> Fetching libuv
==> Downloading https://ghcr.io/v2/homebrew/core/libuv/blobs/sha256:0b28a00add18
######################################################################### 100.0%
==> Fetching node
==> Downloading https://ghcr.io/v2/homebrew/core/node/blobs/sha256:8aee2816dae82
######################################################################### 100.0%
==> Installing dependencies for node: brotli, c-ares, icu4c@76, libnghttp2 and libuv
==> Installing node dependency: brotli
==> Downloading https://ghcr.io/v2/homebrew/core/brotli/manifests/1.1.0-1
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/565098509cdfa90593ec9a41b41239f073843f88caed60ddaa3e6194ac4defda--brotli-1.1.0-1.bottle_manifest.json
==> Pouring brotli--1.1.0.arm64_sequoia.bottle.1.tar.gz
🍺  /opt/homebrew/Cellar/brotli/1.1.0: 25 files, 999.8KB
==> Installing node dependency: c-ares
==> Downloading https://ghcr.io/v2/homebrew/core/c-ares/manifests/1.34.4
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/ce18ea81ad6f8aa82ed3f311879deb7643a3d71e18776db6bc86995282d330f3--c-ares-1.34.4.bottle_manifest.json
==> Pouring c-ares--1.34.4.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/c-ares/1.34.4: 176 files, 1MB
==> Installing node dependency: icu4c@76
==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/76/manifests/76.1_1
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/c105f8980d3a6b0ff0253b47492e886520580406ee75fa52509cf5b251b4d633--icu4c@76-76.1_1.bottle_manifest.json
==> Pouring icu4c@76--76.1_1.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/icu4c@76/76.1_1: 277 files, 81MB
==> Installing node dependency: libnghttp2
==> Downloading https://ghcr.io/v2/homebrew/core/libnghttp2/manifests/1.64.0
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/ca092fa9d99f26d52103722d42230c00f21eb8a4a36bf1d40fc9d5f798562d92--libnghttp2-1.64.0.bottle_manifest.json
==> Pouring libnghttp2--1.64.0.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/libnghttp2/1.64.0: 14 files, 793.7KB
==> Installing node dependency: libuv
==> Downloading https://ghcr.io/v2/homebrew/core/libuv/manifests/1.49.2
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/a32b5abd59fa5add407c237e71c8ccb52eca9bed1740be5e315b1bea6efde148--libuv-1.49.2.bottle_manifest.json
==> Pouring libuv--1.49.2.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/libuv/1.49.2: 20 files, 1.2MB
==> Installing node
==> Pouring node--23.6.0.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/node/23.6.0: 2,602 files, 70.5MB
==> Running `brew cleanup node`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Homebrew Bundle complete! 6 Brewfile dependencies now installed.
hkob@vmSequoia dotfiles % 

インストールが終わったら、以下のコマンドを実行して、chokidar をインストールしました。npm の警告で update するように言われていますが、Homebrew の方で対応するかもしれないので、このまま放置します。3月に公開することには変わっている可能性があるので、その時に再度確認することにします。

% npm install -g chokidar-cli

added 43 packages in 6s

4 packages are looking for funding
  run `npm fund` for details
npm notice
npm notice New major version of npm available! 10.9.2 -> 11.0.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.0.0
npm notice To update run: npm install -g npm@11.0.0
npm notice

以下のようにコマンドの使い方が表示されれば成功です。ここでは起動を確認するだけで、実際の使い方はプログラミングの授業の中で解説します。

 % chokidar
Usage: chokidar <pattern> [<pattern>...] [options]

<pattern>:
Glob pattern to specify files to be watched.
Multiple patterns can be watched by separating patterns with spaces.
To prevent shell globbing, write pattern inside quotes.
Guide to globs: https://github.com/isaacs/node-glob#glob-primer

オプション:
  -c, --command           Command to run after each change. Needs to be
                          surrounded with quotes when command contains spaces.
                          Instances of `{path}` or `{event}` within the command
                          will be replaced by the corresponding values from the
                          chokidar event.
  -d, --debounce          Debounce timeout in ms for executing command
                                                        [数値] [デフォルト: 400]
  -t, --throttle          Throttle timeout in ms for executing command
                                                          [数値] [デフォルト: 0]
  -s, --follow-symlinks   When not set, only the symlinks themselves will be
                          watched for changes instead of following the link
                          references and bubbling events through the links path
                                                      [真偽] [デフォルト: false]
  -i, --ignore            Pattern for files which should be ignored. Needs to be
                          surrounded with quotes to prevent shell globbing. The
                          whole relative or absolute path is tested, not just
                          filename. Supports glob patters or regexes using
                          format: /yourmatch/i
  --initial               When set, command is initially run once
                                                      [真偽] [デフォルト: false]
  -p, --polling           Whether to use fs.watchFile(backed by polling) instead
                          of fs.watch. This might lead to high CPU utilization.
                          It is typically necessary to set this to true to
                          successfully watch files over a network, and it may be
                          necessary to successfully watch files in other
                          non-standard situations     [真偽] [デフォルト: false]
  --poll-interval         Interval of file system polling. Effective when
                          --polling is set              [数値] [デフォルト: 100]
  --poll-interval-binary  Interval of file system polling for binary files.
                          Effective when --polling is set
                                                        [数値] [デフォルト: 300]
  --verbose               When set, output is more verbose and human readable.
                                                      [真偽] [デフォルト: false]
  --silent                When set, internal messages of chokidar-cli won't be
                          written.                    [真偽] [デフォルト: false]
  -h, --help              ヘルプを表示                                    [真偽]
  -v, --version           バージョンを表示                                [真偽]

例:
  chokidar "**/*.js" -c "npm run build-js"  build when any .js file changes
  chokidar "**/*.js" "**/*.less"            output changes of .js and .less
                                            files

オプションではない引数が 0 個では不足しています。少なくとも 1 個の引数が必要です:

おわりに

今年はかなり早めに準備をしてしまいましたが、3月に配布する前にもう一度コマンド関係はやり直した方がいいかもしれませんね。どちらにしてももう一つ MacTeX のインストールがあるのですが、こちらは 2 月くらいにならないと 2025 年版が登場しないので、とりあえずここまでにします。今回は、昨年度のものと大きな変更がないことが確認できただけで十分です。

https://hkob.notion.site/hkob-16dd8e4e98ab807cbe3cf3cc94cdfe0f?pvs=4