はじめに
hkob の雑記録の第14回目は、プログラミングの授業で利用するコマンド自動起動の仕組みである chokidar のインストールです。
chokidar について
chokidar は nodejs で動作するファイル変更検出をしてくれるアプリです。以前は、macOS の場合は、FSEvents のラッパーの形で実装されていたようですが、昨年 9 月に fsevents 依存を無くしたようです。
chokidar v4.0.0 リリース。fsevents依存を削除し依存が13から1つだけに。内部をTSでリライト、globを廃止など / “Release 4.0.0 · paulmillr/chokidar” https://t.co/BQb1H81rPU
— Teppei Sato (@teppeis) 2024年9月13日
今回はちゃんと 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