時の流れは恐ろしいもので、25才で社会人になり、今年で社会人人生が20年の節目の年だった。言い換えると、仮に65才定年だとすると社会人人生の折り返しの年でもあったらしい。
オールドタイプなインフラエンジニアなので仕事ではずーっと CLI 中心の生活になっていたので、ターミナル環境は生活の一部として継ぎ足しで整備をしてきた。継ぎ足して整備しているということは連続的な変化で特に新しい刺激はなく淡々と日々の仕事に支障なく使っていたのでマンネリな気配もあった。
たぶん、今のままの環境を使い続けても特に不満はないけど、節目の年ということもあって新しい風をいれてみるか、ということでターミナル環境で使っているツール類を入れ替えてみた。
入れ替え後の旧環境と新環境のツール類は以下のような感じになった。
|
旧環境 |
新環境 |
ターミナルエミュレータ |
iTerm2 |
WezTerm |
*env 系ツール |
*env 各種 |
mise |
zsh プロンプト |
自作 |
starship |
ターミナル向けエディタ |
MacVim |
Neovim |
ドットファイル管理 |
してない |
chezmoi |
ターミナルマルチプレクサー |
tmux |
tmux |
ターミナルエミュレータの iTerm2 は X の過去のポストを遡ると少なくとも 2011年の時点では使っていたらしい。
長らく使っていたということもあって、iTerm2 には大きな不満はなかったけど、さすがに動作が重いというときがあって、軽量かつ機能的にカバーできる代替のターミナルエミュレータを探したところ、WezTerm が良さそうなので乗り換えてみた。
WezTerm は Lua で設定を書けるし、ドキュメントが充実しているので、自分のやりたいことは大体できるというところが気に入っている。あと、Lua は後述の Neovim でも使うことになるので、設定で使用する言語が同じというところも都合がよかった。
ただし、WezTerm はターミナルマルチプレクサとしても使えるんだけど、tmux の choose-window
相当の動作が実現できないのでターミナルマルチプレクサ部分を置き換えることはできなかった。
で、この記事を書いて下書きで寝かせているうちに Ghostty が正式リリースされて、どうしよう...となっている。
*env 系ツール
スクリプト言語を切り替える env 系ツールは rbevn や pyenv など個別の env 系ツールを使っていたけど、mise に一本化した。
一本化することで *env 系ツールの設定を1つにまとめることができたし、更新を取り込むときも mise up
だけで済むというのは快適だった。
*env 系ツールの rbenv 向けに gem の移行用として rbenv-gem-migrate というプラグインを自作していたけど、mise では ~/.default-gems
として全てのバージョンで入れておきたい gem を指定できるのでめでたくお役御免となった。
zsh は学生の頃から使っていて、プロンプトは自前で PROMPT
環境変数と RPROMPT
環境変数を調整していたけど、今風なプロンプトを手軽に実現したかったので、starship に乗り換えた。
今風で見た目が良いというだけではなく、各種モジュールでカレントディレクトリの状態がプロンプトに表示されていて便利だった。とくに Git Status モジュールはリモートブランチからの乖離が一目でわかるようになったので、トピックブランチを生やす時にリモートブランチの HEAD の取り込み漏れが減ったり、stash の状態が一目でわかるのでゴミ掃除が捗った。
ターミナル向けエディタ
通常時は Emacs を使っているけど、ターミナル内でちょっとした修正や EDITOR
環境変数は MacVim に付属している vim
コマンドを使っていた。~/.vimrc
も Emacs ほどではないけど、それなりに育ていたけど、ちょっとした事情で育ていた環境を吹っ飛ばした時のバックアップ漏れで一年ほど素の状態で使い続けることになった。ガッツリ使っているわけではないので、大きな不満はなかったけど、少し使いづらいなーと感じる場面には遭遇するので、同僚が使っている Neovim を導入してみた。
プラグイン管理は LazyVim を使って Treesitter によるシンタックスハイライトや LSP の設定などを入れている。目的にあった Neovim のプラグインを探す時は dotfyle.com というサイトでいろんな人の設定を見れたり、目的別の人気のプラグインがわかるのでかなり重宝した。
あとは zsh のエイリアスとして以下を設定しておいた。
alias vim=nvim
alias view='nvim -mR'
Neovim の設定は Emacs と同様に github の個人アカウントでパブリックリポジトリとして公開している。
ドットファイル管理は以前はファイルの symlink で管理する方法が主流だったけど、symlink での管理はなんとなく嫌だったので、これまでは避けていた。しかし、バックアップをとらずに育てていた ~/.vimrc
を吹っ飛ばしたり、設定ファイルを Lua で記述できるツールが増えたりしたので、ドットファイル管理も Github で管理する機運が高まった。
そんななかで、chezmoi というツールが実ファイルを残して管理できるし、リモートリポジトリでの公開に躊躇うような秘密情報は暗号化して管理できそうということがわかったので、今回のことをきっかけに chezmoi によるドットファイル管理を取り入れることにした。
chezmoi も個人の Github アカウントにリポジトリを作っているけど、秘密情報の暗号化漏れが怖いのでプライベートリポジトリとして運用している。
chezmoi は Go のテンプレートでファイルを記述できるので、仕事用のマシンと私用のマシンでマシンのコンテキストを考慮しtた状態で設定を共有することも可能ということもよかった。あと、外部リポジトリを chezmoi の同期対象に入れることもできるので、Emacs や Neovim の設定を chezmoi の同期対象にいれることでドットファイル管理の統一ができたということも嬉しかった。
まとめ
じつは10年以上大きく変えてこなかった環境の入れ替えを決心できたのは今の会社では SSH によるリモートログインがほとんど必要なくて、ターミナル環境は自分のマシンだけを考えておけば良いという状態になったということも大きかった。今までは手元の環境を現代風にしたとしても SSH でリモートログインしたときに操作感が大きく異なることで作業効率が落ちることを嫌がって変化を拒んでいたという側面はあったけど、そういう心配がかなり小さくなったので変更に踏み切りやすかった。
今回の変更で10年以上戦えるかというとかなり微妙だけど、ドットファイルを管理するようになったので、大きな変更をして失敗しても切り戻すことはできるので変更しやすくなった。
あと、長いこと使い続けているツールとして zsh という超大物がいるけど、macOS のデフォルトシェルが zsh なのでこのまま使い続けるんじゃないかと思っている。