2026年2月8日日曜日

ChromebookからCloud Shellをフル活用!tmuxとSSHを組み合わせた最強の開発環境構築スクリプト

 久々にCloud Shell触ったら、プロジェクトの切り替えや環境構築が面倒……そんな悩みを一撃で解決する自動化スクリプトを作成しました。

🌟 このスクリプトでできること

  • 対話型プロジェクト選択: 起動時にGCPプロジェクト一覧から番号で選ぶだけ。

  • 自動マウント: ChromebookのローカルフォルダとCloud Shellを自動同期。

  • tmuxによるセッション管理: 万が一接続が切れても、再実行するだけで作業の続きから復帰。

  • 環境のクリーン起動: Javaのバージョン切り替えからエミュレータの起動、環境変数のセットまで全自動。

🛠️ 作成したスクリプト

Bash
#!/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プロジェクトを行き来するエンジニアの方には特におすすめです!

0 件のコメント:

コメントを投稿