事故防止のためのターミナル設定
2024年12月16日 月曜日
CONTENTS
【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」を構築してみてはいかがでしょうか。
Xのフォロー&条件付きツイートで、「IoT米」と「バリーくんシール」のセットを抽選でプレゼント!
応募期間は2024/12/02~2024/12/31まで。詳細はこちらをご覧ください。
今すぐポストするならこちら→ フォローもお忘れなく!