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

2024年5月2日木曜日

GCEに「NGINX Unit」を入れる ver.2024

前回の記事は、こちら

https://yamayoshi.blogspot.com/2020/04/gcenginx-unitweb.html

セキュリティが強化されたようで、config.json に user を追加しています。

一旦動いてしまえば、Unit 最高。

 [Flask]

$ cd
$ mkdir project1 && cd project1
$ python3 -m venv venv
$ source venv/bin/activate
V pip install Flask
V nano main.py
--
from flask import Flask
application = Flask(__name__)
@application.route("/")
def index():
 return "Hello Project1!"
if __name__ == "__main__":
 application.run()
--
V deactivate

[Unit] Ubunt22.04
$ cd
$ sudo -i
# curl --output /usr/share/keyrings/nginx-keyring.gpg https://unit.nginx.org/keys/nginx-keyring.gpg
# nano /etc/apt/sources.list.d/unit.list
--
deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ jammy unit
deb-src [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ jammy unit
--
# apt update
# apt install unit unit-dev unit-python3.10
# systemctl restart unit

# nano config.json
--
{
 "listeners": {
  "*:80": {
   "pass": "applications/flask_app"
  }
 },
 "applications": {
  "flask_app": {
   "type": "python",
   "user": "<user>",
   "path": "/home/<user>/project1",
   "home": "/home/<user>/project1/venv",
   "module": "main"
  }
 }
}
--
# curl -X PUT --data-binary @config.json --unix-socket /var/run/control.unit.sock http://localhost/config
# service unit restart

以上です。

2024年4月27日土曜日

GCE に VSCode で接続する

 多分、この手順が一番簡単。

参考

https://medium.com/@liu.peng.uppsala/safe-way-to-connect-your-vscode-to-compute-engine-from-google-cloud-platform-using-ssh-4e64c70fbb45

1. GCE インスタンス作成

2. VSCode Remote Development 拡張機能追加

3. ローカルPC からコマンド入力

$ gcloud compute ssh {インスタンス名} --zone={ゾーン名} --tunnel-through-iap --dry-run

4. 出力結果を VSCodeに貼り付け

以上です。

2024年2月23日金曜日

Chromebook GAE開発環境 (ver.2024)

前回とは、びみょうに変わってる感じ。

公式サイト

Python3 仮想環境

$ sudo apt update && sudo apt upgrade
$ sudo apt install python3-venv python3-pip
$ cd my-app
$ python3 -m venv env
$ source env/bin/activate
V cd my-project
V pip3 install -r requirements.txt

Google SDK

※本家の手順そのまま
https://cloud.google.com/sdk/docs/install-sdk?hl=ja#chromebook

$ sudo apt install google-cloud-cli-app-engine-python
$ sudo apt install google-cloud-cli-datastore-emulator 

2023年5月5日金曜日

ChatGPT すげぇ〜。

 早速、リファクタリング、やってみました。

とにかく、すげぇ〜。

これまで、(独学と言えば聞こえは良いが・・・要は適当に、) 見様見真似でコード書いてたのが、先人の知見をお借りして、どんどんと良いコードになっていく感じ。最高です。

リスト内包表記を(勝手に)提案してくれるし、変数名を(勝手に)変更してくれるし。

PEPなんちゃらと(言い訳しながら)、とにかく、的確なご指摘ありがとうごさいます。

とりあえず、こんな感じでプロンプトしてます。

「次のコードを視認性良く、リファクタリングして。〜自分のコード〜」

いや〜、良い時代です。



2023年5月2日火曜日

ChatGPT 始めました。

 Google アカウント + SMS で、サクッと開始。

今日は、多分、記念日になると思う。

2021年5月3日月曜日

WebARENA/VPSに、moshでリモート接続する。

mosh を使うと、リモート接続での作業が、とても快適になります。
切れないしレスポンスも良いので、もう、素のsshには戻れません。

mosh(モバイルシェル)とは

インストール
# apt install mosh

セキュリティグループ (VPSファイヤーウォール)
udp:60000,61000,ip4:0.0.0.0/0

リモート接続 (local -> VPS)
$ mosh --ssh="ssh -i .ssh/(鍵ファイル名).pem" ubuntu@(IPアドレス)