bash/zsh で minikube のシェル自動補完を有効にする方法
Written by @ryysud Jan 27, 2019 23:28 · 886 words · 2 minutes read
はじめに
ローカルに 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 のシェル自動補完を有効にする方法を紹介させてもらいました。開発効率向上はエンジニアにとって絶対的に正しいことだと思いますので、まだ適用されてない方には大変オススメです。