事故防止のためのターミナル設定

2024年12月16日 月曜日


【この記事を書いた人】
芹澤 駿人

2023年新卒入社。日々学びながらSMXの運用をしています。バーチャルカルチャーとインターネット音楽沼の住民。

「事故防止のためのターミナル設定」のイメージ

IIJ 2024 TECHアドベントカレンダー 12/15の記事です】

はじめに

こんにちは。IIJでメールサービスの運用に従事している芹澤です。
IIJ Engineers Blogでは「運用」をテーマにした情報発信を積極的に行っています。
そこで今回は、私が事故防止のために行っているターミナルの設定を皆さまに共有できればと思います。

ターミナル起因で発生しうる事故

運用業務ではターミナルが欠かせません。運用自動化や操作のGUI化などを進めていますが、障害発生時や作業時にはターミナルを用いてサービスホストに入り、コマンドを叩いて対応することが多いです。
ホストに入って作業をする際、怖いのは環境(ステージング環境、本番環境)や対象ホストの取り違え、実行ユーザの間違いなどです。特に複数ホスト、ユーザを切り替えながら作業を行う際に発生しやすく、間違えると意図しない変更が加えられたり、障害に発展することがあります。

もちろんコマンド実行前には環境、ホスト、ユーザなどの確認を行っています。しかし人間の集中力には限界があり、確認漏れが発生してしまうこともあります。そこで私が行っているのが、色分けによる環境視覚化です。集中力が途切れていた際でも、環境やユーザによって画面の色を変えておけば、直感的に作業対象を理解できます。

IIJセキュアMXサービスのホストには、YKRの発案で環境、ユーザごとにプロンプトの色が変わる設定が入っており、次のように環境とユーザがひと目で分かります(今回は例示用に本番環境を模したservicehost、ステージング環境を模したservicehost-stgの2台のVMを建てています)。

しかし私は目が滑ることが多く、自分のことを信じることができないため、更に分かりやすくするためにターミナルの設定を変えてみることにしました。

WezTermとは

自分はターミナルエミュレータとして、「WezTerm」を使用しています。

WezTermはWezさんによって作られた「クロスプラットフォームターミナルエミュレータ及びマルチプレクサ」です(公式サイトより)。
特長として、ターミナルマルチプレクサの機能を内蔵しているため、マルチプレクサ(tmuxなど)を導入せずにWezTermのみで画面分割ができること、クロスプラットフォームであるためOSを問わず利用できること、luaスクリプトを用いて細かい設定を書けることなどが挙げられます。

ぼくがかんがえたさいきょうのWezTerm設定

先に述べたように、WezTermにはマルチプレクサ機能があります。マルチプレクサ機能を用いることで、1つのウィンドウを複数のpaneに分割して作業できます。

しかしデフォルトの設定では、activeでないpaneは一段階暗くなりますが、色の差は少ししかありません。このままだと、目が疲れたときにどちらがactiveか分からなくなり、作業実行ホストを間違えてしまうかもしれません。

そこで次の設定を追加し、activeでないpaneの背景色を緑色に変えています。これでどのpaneがactiveなのか一目瞭然です。青いpaneがactiveなもの、緑なpaneがactiveでないものとなります。

config.inactive_pane_hsb = {
        hue = 0.85,
        saturation = 1,
        brightness = 0.9,
}

 

次に、作業環境やユーザによってタブの色を変えるようにしました。
WezTermが取得できる情報から、

  • サービスホストにログインしているか
  • そのホストはステージング環境か、本番環境か
  • 現在のユーザはrootか、rootでないか

を判定する関数を作成し、次の条件分岐によって色を変えています。

wezterm.on("format-tab-title", function(tab, tabs, panes, config,hover, max_width)
        tab_bg = "#000000"
        tab_fg = "#7d7d7d"
        tab_user = wezterm.truncate_right(tab.active_pane.title, 4)
        tab_hostname = tab.active_pane.title
        tab_title = wezterm.truncate_right(tab.active_pane.title,max_width)
        if tab.is_active then
                tab_fg = "#FFFFFF"
                if checkServiceHost(tab_hostname) then
                        if checkStg(tab_hostname) then
                                tab_bg = "#008000"
                                if checkRoot(tab_user) then
                                        tab_fg = "#FF0000"
                                end
                        else
                                tab_bg = "FF0000"
                                if checkRoot(tab_user) then
                                        tab_fg = "#FFFF00"
                                end
                        end
                else
                        tab_bg = "#0000FF"
                end
        end

        return {
        { Background = { Color = tab_bg } },
        { Foreground = { Color = tab_fg } },
        { Text = tab_title },
        }

end)

activeなpane の環境によって、タブの背景色と文字色が変わっていることが分かります。


プロンプトだけでなく、タブも色分けをすることで、ぱっとターミナルを見た際にも現在の環境やユーザを素早く理解することが可能であり、事故防止に役立つかと思います。

さいごに

今回はWezTermにおいて事故防止のために行っている設定をご紹介しました。実際用いている設定ファイルでは、キーコンフィグを始めとして他にも様々な設定を施しています。時間を見つけてもっと設定を作り込んでいきたいです。

また、WezTermはマルチプラットフォームであるため、設定ファイルさえコピーしてしまえば、OSを気にせずに同じ環境を作れます。実際、自分はリモートワーク用のMacにも同じ設定ファイルを配置し、家でもオフィスでも事故なく作業を進められるようにしています。

WezTermの設定については、インターネット上で様々な例が紹介されています。皆さまぜひWezTermを使い、自分だけの「ぼくがかんがえたさいきょうのWezTerm」を構築してみてはいかがでしょうか。

 

IIJ Engineers blog読者プレゼントキャンペーン

Xのフォロー&条件付きツイートで、「IoT米」と「バリーくんシール」のセットを抽選でプレゼント!
応募期間は2024/12/02~2024/12/31まで。詳細はこちらをご覧ください。
今すぐポストするならこちら→ フォローもお忘れなく!

芹澤 駿人

2024年12月16日 月曜日

2023年新卒入社。日々学びながらSMXの運用をしています。バーチャルカルチャーとインターネット音楽沼の住民。

Related
関連記事