bash/zsh で minikube のシェル自動補完を有効にする方法

Written by @ryysud

Jan 27, 2019 23:28 · 886 words · 2 minutes read #kubernetes

はじめに

ローカルに Kubernetes クラスタを構築するツールである minikube には、kubectl と同じように bash と zsh 向けの shell completion が実装されています。これを利用することによって、minikube のサブコマンドやフラグなどの補完が可能になり、開発効率の向上が見込めます。

利用する minikube のバージョン

v0.33.1( 2019-01-27 時点での最新バージョン )

$ minikube version
minikube version: v0.33.1

minikube のシェル自動補完を有効にする方法

macOS の利用者を前提にした説明となります。

bash をお使いの場合

brew で bash-completion をインストールして ~/.bashrc に1行追加することで、次のシェルが起動した際に minikube のシェル自動補完を有効にすることが可能になります。

$ brew install bash-completion
$ echo 'source <(minikube completion bash)' >> ~/.bashrc

zsh をお使いの場合

~/.zshrc に1行追加することで、次のシェルが起動した際に minikube のシェル自動補完を有効にすることが可能になります。なお、zsh v5.2 以上がサポート対象となりますのでご注意を。

$ echo 'source <(minikube completion zsh)' >> ~/.zshrc

シェル自動補完を試す方法

新たにシェルを起動せず、すぐにシェル自動補完を試したい場合には ~/.bashrc または ~/.zshrc を読み込む必要があります。

# bash をお使いの場合
$ source ~/.bashrc

# zsh をお使いの場合
$ source ~/.zshrc

minikube に対して適当なサブコマンドやフラグを入力してから、Tab ボタンを押下すると、シェル自動補完を試すことができます。以下は minikube s まで打って Tab ボタンを押下した際の例となります。

$ minikube s
service  ssh      ssh-key  start    status   stop

補足

minikube completion によって追加されるシェル自動補完の実体がなんなのか気になったので、該当の処理が記述されているソースコードを読んでみました。
https://github.com/kubernetes/minikube/blob/master/cmd/minikube/cmd/completion.go

どうやら、シェル自動補完の実体は cobra によって生成されていることがわかりました。
https://github.com/kubernetes/minikube/blob/master/cmd/minikube/cmd/completion.go#L67-L92

なお、cobra での Generating bash completions の実装方法は以下に記載があるので別の機会に活かすことができそうです。
https://github.com/spf13/cobra#generating-bash-completions

kubernetes が提供する他の CLI はどういう実装なのかなと思ったら、kubectl も kubeadm も同じように cobra を使ってる感じでした…!!!
https://github.com/kubernetes/kubernetes/search?q=%22completion%22&unscoped_q=%22completion%22

はい。お察しの通り cobra の owner は Google の方でした。
https://github.com/spf13

スッキリ。

おわりに

今回は bash/zsh への minikube のシェル自動補完を有効にする方法を紹介させてもらいました。開発効率向上はエンジニアにとって絶対的に正しいことだと思いますので、まだ適用されてない方には大変オススメです。