Kubectlのzsh補完機能で詰まった話


これは何?

kubectlのzsh補完機能を設定する際に詰まったのでまとめる。

kubectlの補完機能 (completion)

青山真也さん著のkubernetes完全ガイドには以下のように記載されていた。

kubectl の様々な使い方を説明してきましたが、シェル保管機能も用意されています。bash または zsh を選択できるため、環境に応じてどちらかを指定してください。

# bash completion
$ source <(kubectl completion bash)

# zsh completion
$ source <(kubectl completion zsh)

「~/.bash_profile」や「~/.zprofile」に設定しておくとログイン時に有効化されて便利です。

自分はzshユーザなので、下のコマンドを実行した。すると、complete:13: command not found: compdefというエラーが発生する。

解決法

とりあえずエラーをコピーしてでググってみたところ以下のように出力された。

AWSクライアントとかGoogle Cloudを使っているわけではないので、上から4番目の記事を開くとzshrcに以下のように記載すると良いと書かれていた。

~/.zshrc
autoload -Uz compinit
compinit

source <(kubectl completion zsh)

これは補完に表示されるファイルに関するセキュリティのオプションであるそうだ。この上から4番目の記事には以下も記載しろと書いてあったが必要ない。今回参照したGithubのIssueがasdfというアプリケーションに紐付いているだけであるからだ。

. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash

余談

同じミスをした誰かをこの記事を通して解決に導くことを目的にこの記事を書かせていただいた。