コマンドラインのプロンプトにGoogle Cloudのprojectを表示させたい

2023.09.11

はじめに

Google Cloudデータエンジニアのはんざわです。
以前、Google Cloud Shellのprojectをpecoで変更する方法を紹介しました。
今回の記事ではローカル環境でコマンドラインのプロンプトに現在のprojectを表示されるようにしたのでその方法を紹介したいと思います。

環境

os: macos ventura 13.5.2
shell: zsh 5.9

前準備

各種必要なパッケージのインストール

brew install peco && brew install --cask google-cloud-sdk && brew install jq

pecoの詳細な説明は過去の記事を参考にしてください。

最初に作ったもの

以下のスクリプトを.zshrcファイルに追記しました。
上から確認していきましょう。

function config_rprompt() {
  project_id=$(gcloud config configurations list --format=json | jq -r '.[] | select(.is_active == true) | .properties.core.project')
  RPROMPT=%F{032}[${project_id}]%f
}

# The following function is executed when the terminal is first started.
config_rprompt

function gpr() {
  project=$(gcloud projects list --format=json | jq -r '.[].projectId' | peco)
  gcloud config set project ${project}

  config_rprompt
}

前半のconfig_rpromptでは、gcloud config configurations listjqを使って表示させたいデータを取得し、RPROMPTに渡す関数を定義しています。

function config_rprompt() {
  project_id=$(gcloud config configurations list --format=json | jq -r '.[] | select(.is_active == true) | .properties.core.project')
  RPROMPT=%F{032}[${project_id}]%f
}

また、ターミナル起動時にも動作するように関数を呼び出しています。

# The following function is executed when the terminal is first started.
config_rprompt

gpr以前のブログでも紹介しましたが、以下の2点を修正しました。

  1. jqでデータを整形するように変更
  2. 変更後にconfig_rpromptを呼び出し、RPROMPTを変更するように追記
function gpr() {
  project=$(gcloud projects list --format=json | jq -r '.[].projectId' | peco)
  gcloud config set project ${project}

  config_rprompt
}

これを.zshrcに追記すると以下のような表示になります。

よくなかった点

とにかくレスポンスが遅かったです。
gprはプロジェクトの一覧を取得する必要があるため挙動が遅いのは仕方ないと思います。調べていると現在有効になっているprojectはコマンド経由だけでなくファイルからも取得できるようなのでファイルからデータを取得するように変更したいと思います。

最終的にできたもの

config_rpromptの関数を以下のように変更しました。
~/.config/gcloud配下から各種必要なデータを取得し、適切なフォーマットに整形しています。

function config_rprompt() {
  project_id=$(awk '/project/{print $3}' ~/.config/gcloud/configurations/config_default)
  RPROMPT=%F{032}[${project_id}]%f
}

下記ブログを参考にさせていただきました。ありがとうございます。

さいごに

pecoでprojectを変更し、プロンプトの表示も変更する方法を紹介しました。
興味があったら是非試してみて下さい。
今回みたいにターミナルをカスタマイズするのが好きなので今後も新しく作ったら紹介したいと思います。