FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

Macのターミナルで、sshの接続先に応じてテーマ(背景色)を変更する

はじめまして。
昨年中途入社しました、平井と申します。

去年の8月に中途で入社して、今はベトナムSEPTENI TECHNOLOGYで働いています。
ベトナムは毎日がエキサイティングなのですが、最近一番驚愕した出来事は、タクシー運転手に渡したチップを窓から放り投げられたことです。

さて、本題ですが、Macのターミナルからssh接続する時、接続先に応じてテーマ(背景色)が切り替わるようにしてみたいと思います。

やること

普段開発業務をしていると、本番環境や開発環境等のサーバにssh接続して作業する機会が多くあります。
僕はそのような作業時にはMacのターミナルを使っているのですが、複数のウィンドウを開いて作業していると、「開発環境だと思ったら本番だった・・・!」みたいなことがありそうで怖いです。
複数環境を同時に開かないようにするとか、都度サーバー名確認してからコマンド打つとかすればいいんですが、ぱっと見で分かりやすいように、ssh接続時に環境に応じてMac標準ターミナルのテーマを環境に応じて切り替えようと思います。
方法としては、
・引数で受け取った環境情報に応じて、ターミナルのテーマ変更と、ssh接続を行うシェルを用意する
・作ったシェルにaliasを貼って、sshコマンド実行時にシェルが実行されるようにする
でやろうと思います。

ターミナルのテーマを切り替える

Mac標準ターミナルのテーマは、AppleScriptで変更可能です。

tell application \"Terminal\" to set current settings of first window to settings set \"Pro\"

とすれば、ターミナルのテーマがPro(黒背景)に切り替わります。

また、AppleScriptはシェルからosascriptコマンドに-eオプションをつけて、そのあとに引数として実行したいスクリプトを指定することで実行可能です。
ターミナルのテーマを、引数で受け取ったテーマに変更する関数を定義します。

set_profile() {
 # osascriptコマンドからAppleScriptを呼び出して、ターミナルのテーマを変更
 /usr/bin/osascript -e "tell application \"Terminal\" to set current settings of first window to settings set \"$1\""
 }

シェル内からテーマを引数に渡してこの関数を呼び出せば、ターミナルのテーマが変わります。

引数で受け取った環境情報に応じて、ターミナルのテーマ変更とssh接続を行う

ここでは適当に、
本番環境
 ・IPアドレス:192.168.0.1
 ・使用するテーマ:Red Sands(赤背景)
開発環境
 ・IPアドレス:192.168.0.10
 ・使用するテーマ:Ocean(青背景)
とします。

また、引数でIPアドレスとかドメインを打つのは面倒くさいので、それぞれ「production」「development」という文字列を引数で指定することにします。

if [[ "$@" == production ]]; then
 # テーマをRed Sandsに変更
 set_profile "Red Sands"
 # ssh接続
 ssh user_name@192.168.0.1
 # 終わったらテーマをデフォルトに設定しているProに戻す
 set_profile "Pro"
 elif [[ "$@" == development ]]; then
 # 開発環境はOceanで
 set_profile "Ocean"
 ssh user_name@192.168.0.10
 set_profile "Pro"
 else
 # 上記以外の場合は、そのままsshコマンドを実行
 ssh $@
 fi


シェルを配置してaliasを貼る

上記を合体させてシェルを作り、適当な場所に配置します。
ここでは、ssh-change-themeという名前で~/bin/配下に配置します。

#!/bin/bash
 set_profile() {
 /usr/bin/osascript -e "tell application \"Terminal\" to set current settings of first window to settings set \"$1\""
 }

if [[ "$@" == production ]]; then
 set_profile "Red Sands"
 ssh user_name@192.168.0.1
 set_profile "Pro"
 elif [[ "$@" == development ]]; then
 set_profile "Ocean"
 ssh user_name@192.168.0.10
 set_profile "Pro"
 else
 ssh $@
 fi


このシェルに実行権限をつけます。

chmod 755 ~/bin/ssh-change-theme

sshコマンドを実行した時にこのシェルが実行されるように、~/.bash_profileを編集してaliasを貼ります。

alias ssh="~/bin/ssh-change-color"


これで、

ssh production

とすればテーマがRed Sands(赤背景)に変わって本番環境に接続し、

ssh development

とすればテーマがOcean(青背景)に変わって開発環境に接続するようになります。

また通常通り、

ssh {user_name}@{ip_address}

とすれば、通常のsshがそのまま呼び出されます。

いろいろと改良点はあるかもしれませんが、
ひとまずこれで接続環境に応じてテーマが変更されるようになりました。

ありがとうございました。