とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

zshにPowerlevel10kを導入したので、使用中のKUBECONFIGを表示できるようにした

日々に作業には様々なツールを利用しますよね。Emacs、Vim、tmuxといったツールを導入すると、カスタマイズ沼にハマってしまい、ついつい一日中設定ファイルをいじり回してしまったという経験のある人も多いのではないでしょうか。しかしこうした現象は一過性のもので、一度自分にとって最適な環境に落ち着いてしまうと、その後は10年単位で古い設定を使い続けてしまうというのもまた、この手のツールにありがちです。筆者もその例に漏れず、Emacsやzshの設定は10年以上、ほとんどいじっていませんでした。とはいえ新しいプラグイン管理ツールなんかも出てくるし、やっぱり適度に設定はアップデートしないといけないよなあ……と思い、ここ最近はdotfilesディレクトリの見直しを進めていたりします*1

今まで筆者はzshのプロンプトを、シェル関数を書き、precmd_functionsにセットすることでカスタマイズしていました。設定した当時としては満足していたのですが、最近ではプロンプトをカスタマイズするプラグインも沢山存在しますし、メンテのコストを考えると、そういうものに乗った方がいいんじゃないかな? と思い、Powerlevel10kを使ってみることにしました。

github.com

Powerlevel10kのインストール方法等は公式ドキュメントを見ていただくとして、インストールするとデフォルトで様々な情報がプロンプトに表示されるのがわかります。AWSのプロファイルや、KUBECONFIGのコンテキストが表示されるのはもちろんですが、これらの情報は常時表示されるのではなく、kubectlやhelmコマンドを入力した時だけ表示されるため、普段使いの邪魔にならない点もポイントです。

ですが以下のエントリで紹介したように、筆者はKUBECONFIGを単一ファイルのコンテキストではなく、ファイルそのものを分離して、KUBECONFIG環境変数で切替えています。

devops-blog.virtualtech.jp

そのためデフォルトの設定では少し都合が悪いため、プロンプトをカスタマイズすることにしました。具体的には任意の環境変数を、常時右プロンプトに表示させます。まずPowerlevel10kの設定ファイルである、~/.p10k.zshをエディタで開きます。その中で、以下のようにシェル関数を定義してください。-fオプションの引数は文字色なので、お好みで変更して構いません。

function prompt_my_kubeconfig() {
    [ -n "${KUBECONFIG}" ] && p10k segment -f 208 -t "KUBE:${${KUBECONFIG%/config}##/*/}"
}

ポイントは関数名をprompt_で始めることと、他の関数と衝突しないようmy_プレフィックスをつけておくことです。関数の内容は、p10k segmentコマンドを実行し、表示したい文字列や文字色、アイコン等を指定するだけです。KUBECONFIG環境変数には、KUBECONFIGファイルの絶対パスが格納されているのですが、筆者は~/.kube/プロジェクト名/configという名前で統一しています。そこで末尾の/configと、先頭からの/*/を削ってプロジェクト名を取り出しています。

次に、このシェル関数を呼び出す設定を追加します。~/.p10k.zshの先頭付近に、POWERLEVEL9K_RIGHT_PROMPT_ELEMENTSをtypesetしているブロックがあります。ここの末尾に、先ほど実装したmy_kubeconfigを追記します。関数名はpromot_my_kubeconfigですが、プロンプトセグメントの定義はmy_kubeconfigである点に注意してください。

  typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
    # =========================[ Line #1 ]=========================
    status                  # exit code of the last command
    command_execution_time  # duration of the last command
(...中略...)
    # ↓この行を追記
    my_kubeconfig
  )

zshを再起動すれば、設定が反映されます。

カレントディレクトリはもちろん、Gitのブランチやasdfで導入したツールのバージョンなども表示されていて、便利ですね。しばらくはp10kをカスタマイズしつつ、快適な環境を模索してみようと思います。

*1:先日Emacs 29に対応する際、leaf.elを使って古いEmacsの設定を全部書き直しました……。とはいえ、Emacs29からはuse-packageが本体に入ってるので、この選択が正しかったのかは自信がないです。