久々にCloud Shell触ったら、プロジェクトの切り替えや環境構築が面倒……そんな悩みを一撃で解決する自動化スクリプトを作成しました。
🌟 このスクリプトでできること
対話型プロジェクト選択: 起動時にGCPプロジェクト一覧から番号で選ぶだけ。
自動マウント: ChromebookのローカルフォルダとCloud Shellを自動同期。
tmuxによるセッション管理: 万が一接続が切れても、再実行するだけで作業の続きから復帰。
環境のクリーン起動: Javaのバージョン切り替えからエミュレータの起動、環境変数のセットまで全自動。
🛠️ 作成したスクリプト
#!/bin/bash
PS3="番号を入力してください(Ctrl+Cで中止): "
select PID in $(gcloud projects list --format="value(projectId)"); do
if [ -n "$PID" ]; then
echo "$PID に接続"
break
fi
done
remote_task() {
local pid="$1"
local cmd_back=$(cat <<EOF
gcloud config set project "$pid" --quiet
gcloud beta emulators datastore start --host-port=0.0.0.0:8081 --project=$pid
EOF
)
local cmd_front=$(cat <<EOF
gcloud config set project "$pid" --quiet
export DATASTORE_EMULATOR_HOST=localhost:8081
export DATASTORE_PROJECT_ID="$pid"
export GOOGLE_CLOUD_PROJECT="$pid"
cd "$pid"
EOF
)
sudo update-alternatives --auto java
gcloud config set project "$pid" --quiet
if ! tmux has-session -t "$pid" 2>/dev/null; then
tmux new-session -d -s "$pid" -n "back"
tmux set-option -t "$pid" status on
tmux set-option -g allow-rename off
tmux new-window -t "$pid" -n "front"
tmux send-keys -t "$pid:back" "$cmd_back" C-m
tmux send-keys -t "$pid:front" "$cmd_front" C-m
fi
tmux attach-session -t "$pid"
}
eval "$(gcloud cloud-shell get-mount-command ~/gcp)" 2>/dev/null || true
func_def=$(declare -f remote_task)
gcloud cloud-shell ssh \
--authorize-session \
--ssh-flag="-t" \
--command="$func_def; remote_task $PID"
💡 こだわりポイント
1. 環境変数の「窓別」管理
tmuxのウィンドウごとに export コマンドを送り込むことで、「バックグラウンドではエミュレータ、フロントではアプリ開発」という役割分担を、環境変数が混ざることなく実現しています。
2. 爆速の復帰力
一度このスクリプトで立ち上げれば、PCを閉じたりネットが切れたりしても、再度スクリプトを叩いてプロジェクトを選ぶだけで、エミュレータが動いたままの元の画面に一瞬で戻れます。
あとがき
これでCloud Shellでの開発がめちゃくちゃ快適になりました。 Chromebook ユーザーや、複数のGCPプロジェクトを行き来するエンジニアの方には特におすすめです!