@helloyuki_ さんと @giginet さんがやってて、自分との違いを眺めるのも面白いかと思ったので書いてみる*1。僕の以前の環境は 後悔しているがやめられない開発効率向上術、Neovimを一瞬でVSCode並みに便利にする、自作PC2023: Ryzenをやめた あたりで書いた。
OS
Linux、macOS、Windows の3つを、この順に多く使用している。使っている環境が多いほど面倒毎が増えるので、本当なら3つも使わない方が良い。
LinuxはUbuntu 24.04を使っている。よく使うDockerイメージやGitHub Actions環境と同じパッケージ名が使えたり、デスクトップアプリのLinux向けの配布が.deb か .rpm がメインなことが多かったりと、Ubuntuにしておく利点は多い。ただ、手元の Framework Laptop でUbuntu 24.04のGNOMEの調子が良くないという背景もあり、その辺のいじり易さからまたArch Linuxに戻したい気持ちもある。
macOSは、ペアプロアプリTupleがLinuxだと使いにくいのと、arm64向けのコンパイラ開発がApple Siliconマシンだと楽なので、渋々使っている。デスクトップ環境としては多分一番安定していて快適で、Apple Siliconの性能にも助けられているが、Rubyのビルドが何故かLinux環境の2倍くらい遅く、1日に何度もRubyをビルドする私の仕事には向いていない。 大体Linuxにsshして作業している。
Windowsは、Windowsでしか動かないアプリを起動することがあるのでまあ使う。開発環境は少し前に mintty + msys2 + mingw から WezTerm + WSL2 に切り替えたが、これは大分快適になったと思う。ただ、後述する修飾キーが押しっぱなしになる問題と、IME周りの挙動が突然変になりがちなのが不便で、単純にデスクトップ環境としてLinuxより不快なので、あまりこの開発環境には出番がない。
エディタ
Neovim を使っている。フロントエンドとしては、VSCode NeovimというVSCode拡張か、ターミナル上でCUIのNeovimを使っている。個人的にはGUIのエディタはあまり好かないのだが、マウスホバーでLSPの何かを出す設定をするのがCUIだと難しく、LSPのごちゃごちゃした出力を文字の寄せ集めで作られた貧弱なUIで見るのは大変しんどいので、Rustのような言語サーバーの補助なしで書くのが難しい言語ではVSCode Neovimを使っている。素のNeovimのLSP環境には今もcoc.nvimを使っている。
コーディングエージェント
Claude Code を使っている。AIに何かをやらせて放置したまま自分は別のことをやるという使い方をするので、ターミナル (というかtmux) の1タブで省スペースな管理ができるのはCLIの強みだと思う。同じプロジェクトに対して全く別のタスクを並列にできるよう、Claude Code用のソースディレクトリやビルドディレクトリを別途用意して作業させたりしている。SonnetとOpusを自分で考えて使い分けなくとも、デフォルトでいい感じにOpus 4.5に切り替えてくれるっぽくなったのは楽になった。
検索エンジンで答えを得るのが難しい問いは前からの癖でChatGPTに投げることが多いのだが、GPT-5になった現在、ChatGPTにプログラミング関係の質問を投げて質の低い返答を得た経験が度々あるので、Codexもそのうち試したい気はしているがあんまり期待していない。
ターミナルエミュレータ
WezTerm を使っている。以前はTerminal.appを使っていたくらいなので一番こだわりがない所なのだが、macOSからLinuxにsshして作業をする時、ssh先でクリップボードにコピーした内容を手元の環境にもコピーしてくれるエスケープシーケンス (OSC 52) があって、これがある程度モダンなターミナルじゃないと動かないので、常時ssh状態で仕事するようになった時WezTermに乗り換えた。GhosttyはWindowsだと動かないし、乗り換えるモチベーションもない*2。
ターミナルマルチプレクサ
tmux を使っている。ターミナル側でタブ管理や画面分割ができるのでtmuxを使わないみたいな人がたまにいるが、それに加えてセッションの永続化やアタッチ/デタッチができるのが本質だと思う。コピーモードで上述のOSC 52がシームレスに動くので、ssh先でtmuxを開くと、まるで手元のターミナルかのように快適に作業ができる。Lemonadeみたいにそれ用のプロセスを立てておく必要もない。
シェル
zsh。周りだとfishを使っている人もいるが、僕はシェルスクリプトプログラミング環境としてbashが一番慣れていて、それと互換性のないシェルを試すのは腰が重く、ずっとzshのままになっている。
ランチャー
後悔しているがやめられない開発効率向上術 で一番最初に書いた話だが、よく使うアプリケーションへのショートカット割り当てをキーリマッパで実現していて、今の設定は以下の通り。
- C-h: WezTermにウィンドウ切り替え
- C-u: Google Chromeにウィンドウ切り替え
- C-o: Slackにウィンドウ切り替え
- C-y: VSCodeにウィンドウ切り替え
10年以上やっている手癖なので今更やめられないのだが、EmacsバインディングのC-uを潰したのは悪癖だったなという気がしている。別物だが、かわりにC-a C-kを使うことが多い。
ウィンドウマネージャー
LinuxではGNOMEを使っていて、他のOSでもタイリングウィンドウマネージャーの類は使っていない。マシンを起動した後多少ポチポチしたら後は標準または上述のショートカットだけでウィンドウ管理が完結するので、3つのOSに対して同じ操作ができるタイリングウィンドウマネージャー環境を用意したとして、あんまり生産性は向上しない気がしている。OmarchyのHyprlandセットアップはいい感じだったので、Linuxで試したい人はOmarchyから入るのも良さそう。macOSだと、次試す時はAeroSpaceとyabaiあたりを触ってみたい。
フォント
Monaco を使っている。macOSだと最初から使われてる奴。fallbackにはHiragino SansかNoto Sans CJK JPをいれている。以前はInconsolataやそれベースのRictyを使っていたりしたのだが、Monacoにわざわざ変えた理由は忘れてしまった。VSCodeでmacOSとLinuxで設定を共有した上でフォントを同じサイズで見せるみたいな動機が最初はあったような気もするが、VSCodeの設定は結局OSごとにプロファイルを分けたので、それは関係なくなった。
ブラウザ
Google Chrome を使っている。会社ではこれ以外のブラウザの使用が実質禁止されているし、僕は使っているGoogleのサービス*3が結構多め (ストレージに課金もしている) だし、認証をGoogleログインに寄せて使っているサービスも多いので、その辺が何かとシームレスに動く(気がする)ブラウザを離れることはない気がする。
開発環境のセットアップ
mitamae というシングルバイナリで動く自作のプロビジョニングツールで環境設定を長らく自動化している。全てのOSで動き、レシピも腐ることがあまりなく安定して使い続けられている。
dotfiles
config/ に設定ファイルを置いておき、それらの配置やその他のセットアップをmitamaeにやらせている。単なる個人の設定ファイルリポジトリなのに割とGitHubスターがついていてちょっと嬉しい。
ノートテイキング
僕しかやってない気がするが、Slack でのセルフDMを主なメモ置き場として使っている。これは上述したウィンドウ切り替えショートカットの設定が関係していて、切り替えが簡単なデスクトップアプリ4種のうち、メモ取り対象になりやすいブラウザやエディタではないアプリがSlackで、かつSlackのログのメモ取りはSlack上でやるのが便利なので、僕の環境だとこれが開きやすく便利な気がしている。
Google Docs も使っていて、Slackでは短期的なタスク管理や簡易バックログ管理をし、Google Docsには中長期的なスケジュールや何度も見返したいメモを置いている。
キーボード
JIS配列のHHKB Hybrid Type-S (雪) を使っている。僕はErgoDoxを使っていた時期に自分は分割キーボードが好みではないことを学び、Kinesisは好きだったが外で使うには持ち運びに不便で、13インチのMacBookに綺麗にマウントできて持ち運びも快適なHHKBに落ち着いた。
僕は昔Emacsで小指を破壊した経験から、全ての修飾キーを親指で押すのだが、非分割キーボードでそれを快適にやるにはスペースキーの短さが必須で、HHKBのJIS配列はその点非常に優れている。ただ、スペースの横に並んでいるキーの傾きがデフォルトだと親指に角が刺さる感じになっているので、無刻印のキーを別途購入してFやJのある列の傾きのものに差し替えている。
キーリマッパー
Linuxでは拙作xremap、macOSではKarabiner-Elements、Windowsではのどかを使っている。どれも機能的には申し分ないのだが、Windowsでは前述の通り修飾キーが押してない時も押しっぱなしになる現象に悩まされていて、キーリマッパーを変えて直るならそうしたいが、特に何も試せていない。
SKK
Linuxではibus-skk、macOSではAquaSKK、WindowsではCorvusSKKを使っている。ibus-skkはメンテが終了しているのだが、バグを1つだけ自分で直したものを使っている。fcitx-skkへの乗り換えを試みたこともあったが、挙動がibus-skkに比べてモッサリしているのでやめた。AquaSKKは最高。CorvusSKKは、Windowsで突然IMEがCorvusSKKじゃない何かに切り替わってしまう問題は以前どうにか解決したのだが、IMEがSKKにセットされている時でも日本語入力が謎の亜空間に飛ばされることがあるので、Windowsを使いたくない理由の一つになっている。
まとめ
AIコーディング全盛の今、コードを書くための知識をつけるより、AIコーディングでも変わらず使われる開発環境を快適にすることがより大事になっているんじゃないだろうか。というのは建前で、いつまで経っても自分はdotfilesいじりをやめられないオタクだなと思ったので、今後も盆栽として続けたい。