- zshの自動補完機能に関するエラー「
zsh compinit: insecure directories, run compaudit for list.
」が発生したため、解決方法を調べました。 - compauditコマンドでパーミッションを確認し、chmodコマンドで修正を試みましたが、新たなエラーが発生しました。
- Homebrew Caskの再インストールを行ったところ、無事にエラーが解決し、自動補完機能が正常に動作するようになりました。
1. zshの自動補完機能に関するエラー
久々にnode.jsなどを更新したら、zshの自動補完機能に関するエラーが発生するようになりました。
Macのターミナルを起動すると、毎回 特定のディレクトリのパーミッションが適切でないという警告が表示されます。
zsh compinit:
insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?
エラーの修正にしたコマンドは以下の通りです。
# ディレクトリのパーミッションを修正
chmod -R go-w /usr/local/share/zsh/
chmod -R go-w /usr/local/share/zsh/site-functions
# 自動補完キャッシュの削除
rm -f ~/.zcompdump
compinit
# brewの再インストール
brew cleanup
brew cask cleanup
brew uninstall --force brew-cask
brew update
brew upgrade
brew cleanup
brew cask install --force brew-cask
1-1. compinitのエラー
compinit は、zsh の自動補完機能を初期化するための関数です。
zsh でTAB キーを押すと、コマンドやファイル名の補完候補が表示されるようになるのは、compinitのおかげです。
compinit は、自動補完に必要な関数やデータを、指定されたディレクトリ(デフォルトでは、/usr/share/zsh/functions/Completion
)から読み込み、~/.zcompdump
というファイル名でキャッシュを作成します。
1-2. compaudit
エラーメッセージでは、「compaudit」というコマンドを実行するように指示しています。
このコマンドを実行すると、パーミッションが適切でないディレクトリのリストが表示されます。
compaudit は、自動補完に使用されるディレクトリやファイルのパーミッションを検査し、潜在的なセキュリティ上の問題を報告します。
パーミッションの修正には、「chmod」コマンドを使います。
chmod -R go-w /path/to/directory
- 「-R」オプションは、指定したディレクトリとその下にあるすべてのファイルとディレクトリに対して、再帰的にパーミッションを変更するために使用します。
- 「go-w」は、グループ(g)とその他のユーザー(o)の書き込み権限(w)を取り消す(-)ことを意味します。
2. Homebrew Cask
今度は、新たなエラーが発生しました。
Homebrew Caskに関連する自動補完機能に必要な「_brew_cask」が見つからないことを示しています。
compinit:527:
no such file or directory: /usr/local/share/zsh/site-functions/_brew_cask
Homebrew Caskが正しくインストールされているか確認するため、バージョン情報を確認しました。
ところが、brew caskは、brew <command> –caskと表記が変わっていました。
Homebrew Caskは、macOSでアプリケーションをインストールするためのパッケージマネージャーです。
2-1. 自動補完機能に関連するキャッシュを削除
自動補完機能に関連するキャッシュファイルを削除し、再読み込みをします。
rm -f ~/.zcompdump
compinit
しかし、それでもエラーが解決しませんでした。
2-2. Homebrew Caskの再インストール
次に、Homebrew Caskの再インストールしました。
brew cleanup
brew cask cleanup
brew uninstall --force brew-cask
brew update
brew upgrade
brew cleanup
brew cask install --force brew-cask
2-3. 自動補完機能が正常に動作するようになった
再度ターミナルを起動すると、ついにエラーが解決し、zshの自動補完機能が正常に動作するようになりました。