執筆の経緯
現在フリーランスで活動しています。この度新しい案件に参画することが決まったので、現在の現場で使っていた便利な小ネタなどをメモしておきたいと思い、この記事を書きます。
やること
開発でiTeam2を使っています。背景色の変更や画面の分割がしやすいためです。現場では複数のGCEインスタンスで作業をしているのですが、アクセスするインスタンスを間違え無駄な時間を過ごした経験があります。例えば、GPU環境だと思ってNLPの学習を始めたら、実際にはCPU環境で非常に時間がかかってしまったり、CPU環境にしかないデータをGPU環境で探してしまったり。。
そんな、アクセスするインスタンスを間違えた時にすぐに気付けるように、アクセスするインスタンスごとにiTerm2の背景の色を変えようと思います。
具体的には、インスタンスにアクセスしたとき、下の画像のような見た目にします。
※滅茶苦茶に雑ですが、セキュリティ的に問題ない環境で実行してから画像を置き換えます。許してください。
↓サーバにアクセス
実行環境
- MacBook Pro, Apple M1
- zsh
- iTerm2, Build 3.4.20
やったこと
- アクセスするインスタンスに名前をつける
- スクリプトを作り、インスタンスごとに色を設定する
- エイリアスを設定する
この順番に書きます。
1. アクセスするインスタンスに名前をつける
こちらの記事にあるように、以下のファイルを作ります。
#User sekine
#IdentityFile ~/.ssh/id_rsa
Host gpu_server
HostName 111.111.111.111
User sekine
IdentityFile ~/.ssh/id_rsa
Host cpu_server
HostName 222.222.222.222
User sekine
IdentityFile ~/.ssh/id_rsa
2. スクリプトを作り、インスタンスごとに色を設定する
以下のようなファイルを作ります。
#!/bin/zsh
set_color() {
local HEX_BG=$1
local OPACITY=$2
local BG_R=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$1 * 257)}'`
local BG_G=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$2 * 257)}'`
local BG_B=`echo $HEX_BG | sed 's/../0x&,/g' | awk -F "," '{printf("%d",$3 * 257)}'`
/usr/bin/osascript <<EOF
tell application "iTerm2"
tell current session of current window
set background color to {$BG_R, $BG_G, $BG_B}
set transparency to "$OPACITY"
end tell
end tell
EOF
}
# 接続host名で振り分け
if [[ "$@" =~ cpu_server ]]; then
# 色・透明度設定
set_color 233B6C 0.05
elif [[ "$@" =~ gpu_server ]]; then
set_color 30000 0.1
fi
ssh $@
set_color 2f4f4f 0.05
set_colorという関数を作って、引数で16進数のカラーコードと透過率を渡します。最後のset_color 2f4f4f 0.05はローカルの色設定です。sshでのアクセスをexitで終えるとこの色に戻るようになっています。
スクリプトができたらパーミッションを¥変更しておきましょう。
chmod 755 ~/.zsh/ssh-item-setting
3. エイリアスを設定する
.zshrcファイルでエイリアスを設定し、sshコマンドを実行したときに、今作ったスクリプトを実行するようにします。
alias ssh='~/.zsh/ssh-item-setting'
以上で、アクセスしたサーバーごとに背景色を変えることができました。あとはいつも通りsshでアクセスするのみです。
ssh gpu_server
備考
このやり方は、「あー背景の色変えてーなー」って思った時に目についた中で最もやりやすそうなものでした。今調べればもっとやりやすいものがあるかもしれないです。もしもっと良いやり方がありましたら教えてください!

