Mac と Windows のターミナルを WezTerm に統一して、シェル環境もそろえた話
家には Mac が3台(MacBook Air 2台と Mac mini)と Windows のノート・デスクトップが3台、それに Linux のサーバーがあります。これまで Mac は iTerm2、Windows は PowerShell やコマンドプロンプトと、ターミナルも設定もバラバラでした。ここ数日で、ターミナルを WezTerm に、シェルを zsh にそろえ、設定ファイルも1か所にまとめて全部の端末で共有するようにしたので、その方法をまとめておきます。

なぜ WezTerm にしたのか
- WezTerm は Mac・Windows・Linux のどれでも動く無料のターミナル
- 設定が
.wezterm.luaという1つのファイル(Lua という言語で書く)にまとまるので、端末をまたいで同じ設定を使い回しやすい - ファイルの中で「Mac なら こう、Windows なら こう」と書き分けられる
- 画面の分割やタブ、日本語の表示も標準でこなせる
全体の仕組み
ポイントは「設定の本体は Google ドライブに1つだけ置き、各端末には“それを読み込むだけ”の短いファイルを置く」ことです。ドライブ上の設定を直せば、同期で全部の端末に反映されます。

- 共通設定:
マイドライブ/dotfiles/wezterm.lua(WezTerm)とマイドライブ/dotfiles/zshrc(zsh) - 各端末の
~/.wezterm.lua・~/.zshrc:共通設定を読み込むだけの数行 - 端末ごとに違う設定(Node.js のバージョン管理など)は、各端末の
~/.zshrc.localに書く
1. WezTerm を入れる
Mac
Homebrew で入れるのがいちばん簡単です。
brew install --cask wezterm
Windows
公式のインストール手順 から、インストーラー(setup.exe)か winget で入れます。公式のインストーラーはデジタル署名が付いていないため、GitHub のリリースページに載っている SHA256(ファイルの指紋)と一致するかを確認してから実行しました。
winget install wez.wezterm
2. 設定ファイルを Google ドライブで共有する
Mac・Windows とも パソコン版 Google ドライブ を入れておきます。そのうえで、各端末のホームフォルダに次のような ~/.wezterm.lua を置きます(Mac の例。パスは自分の環境に合わせます)。
-- 本体は Google Drive 上の共通設定(全端末で共有)
local wezterm = require 'wezterm'
local path = wezterm.home_dir .. '/Library/CloudStorage/GoogleDrive-あなたのアカウント/マイドライブ/dotfiles/wezterm.lua'
wezterm.add_to_config_reload_watch_list(path)
return dofile(path)
add_to_config_reload_watch_list を入れておくと、ドライブ上の共通設定を書き換えたときに、開いている WezTerm にもすぐ反映されます。Windows では %USERPROFILE%.wezterm.lua に同じ考え方で書き、ドライブの文字(G: など)は端末ごとに違うことがあるので D〜Z を順に探すようにしました。
3. 共通の wezterm.lua のポイント
全文は長いので、Mac と Windows の違いを吸収している部分だけ抜き出します。
local wezterm = require 'wezterm'
local config = wezterm.config_builder()
local isMac = wezterm.target_triple:find('darwin') ~= nil
-- フォント。Monaco は Mac にしかないので OS ごとに分ける
config.font = wezterm.font_with_fallback(isMac
and { 'Monaco', 'Hiragino Sans' }
or { 'Consolas', 'BIZ UDGothic' })
config.font_size = isMac and 15 or 12
-- iTerm2 と同じ分割操作(Windows では Ctrl+Shift に置き換え)
local mod = isMac and 'CMD' or 'CTRL|SHIFT'
local splitVerticalMods = isMac and 'CMD|SHIFT' or 'CTRL|SHIFT|ALT'
config.keys = {
{ key = 'd', mods = mod, action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' } },
{ key = 'd', mods = splitVerticalMods, action = wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' } },
{ key = ']', mods = mod, action = wezterm.action.ActivatePaneDirection 'Next' },
{ key = '[', mods = mod, action = wezterm.action.ActivatePaneDirection 'Prev' },
}
-- Windows:WSL があればその zsh、なければ PowerShell を開く
if not isMac then
local wslDomains = wezterm.default_wsl_domains()
if #wslDomains > 0 then
config.default_domain = wslDomains[1].name
else
config.default_prog = { 'powershell.exe', '-NoLogo' }
end
end
return config
- 見た目(配色・透明度・フォントの大きさ)は、それまで使っていた iTerm2 の設定値をそのまま移しました
- 画面の分割は iTerm2 と同じ
Cmd+D(左右)・Cmd+Shift+D(上下)。Windows では Win キーとぶつかるのでCtrl+Shiftにしています
4. Windows は WSL の zsh を使う
Windows でも Mac と同じ zsh を使うために、WSL(Windows Subsystem for Linux) で Ubuntu を入れ、その中の zsh を WezTerm から開くようにしました。こうすると、Mac と Windows で「WezTerm と zsh」の部分がまったく同じになります。

wsl --install -d Ubuntu
WSL を有効にすると再起動が必要です。BitLocker を使っている PC は、再起動の前に回復キーの控えがあるか確認しておくと安心です。
5. zsh の共通設定
zshrc も1つのファイルを全端末で読み込みます。入れたツールは次のとおりです(Mac は Homebrew、Ubuntu は apt で入ります)。
- zsh-autosuggestions:過去の履歴から入力の続きを薄く表示
- zsh-syntax-highlighting:コマンドを色分けし、打ち間違いが一目で分かる
- fzf:
Ctrl+Rで履歴をあいまい検索 - zoxide:
z 部分一致でよく行くフォルダへ移動 - eza:色付きで見やすい
lsの代わり(無い環境では普通のlsを使う)
brew install zsh-autosuggestions zsh-syntax-highlighting fzf zoxide eza
OS の違いは zshrc の中で判定して吸収しています。たとえばクリップボードへのコピーは、Mac の pbcopy に名前をそろえました。
case "$OSTYPE" in
darwin*) IS_MAC=1 ;;
linux*) IS_LINUX=1
grep -qi microsoft /proc/version 2>/dev/null && IS_WSL=1 ;;
esac
has() { command -v "$1" >/dev/null 2>&1; }
# クリップボードを pbcopy に統一
if ! has pbcopy; then
if has clip.exe; then alias pbcopy='clip.exe'
elif has wl-copy; then alias pbcopy='wl-copy'
elif has xclip; then alias pbcopy='xclip -selection clipboard'
fi
fi
プロンプトには、今いるフォルダ・Git のブランチ・3秒以上かかったコマンドの実行時間・失敗したときの終了コードを出すようにしました。SSH でつないでいるときだけ「ユーザー名@ホスト名」を緑で表示するので、どの端末にいるのか迷いません。
6. Linux サーバーにも同じ設定を
自宅の Linux サーバー(AlmaLinux)は Google ドライブが使えないので、zshrc をコピーして置いています(共通設定を変えたら scp で置き直す)。ログインシェルは bash のままにして、~/.bash_profile の最後に「対話でログインしたときだけ zsh に切り替える」処理を足しました。こうしておくと、ssh サーバー 'コマンド' のようにコマンドだけ実行するときは今までどおり bash で動くので、既存のスクリプトに影響しません。
つまずいたところ
- Windows で「Monaco が読み込めない」警告が出る:Monaco は Mac 専用のフォント。フォントの候補を OS ごとに分けて解決
- Windows で左右分割と上下分割が同じキーになった:
Ctrl+Shift+Dがかぶるので、上下分割に Alt を足した - WSL から Google ドライブ(G:)が見えない:G: は WSL の自動マウントの対象外。zshrc で見えなければ
sudo mount -t drvfs G: /mnt/gするようにした - デスクトップのショートカットから開くと WezTerm がすぐ閉じる:既定の起動先を WSL にしていると、
wezterm-gui.exe start -- プログラムが WSL の中で動こうとして失敗する。start --domain local -- …と Windows 側で動かす指定を足して解決 - Mac で .command ファイルを WezTerm で開く関連付けが効かない:WezTerm をシステムに登録し直す(
lsregister -f)と反映された - ログを見る
logコマンドが何も出さない:zsh の組み込みコマンドのlogが先に動いてしまうため。Mac では/usr/bin/logと書く
まとめ
「設定の本体は1か所、各端末は読み込むだけ」にしたことで、どの Mac・どの Windows を開いても同じ見た目・同じキー操作・同じコマンドで作業できるようになりました。設定を直すのも1か所で済むので、端末が増えても手間は増えません。Mac と Windows を行き来していて、ターミナルの操作の違いに疲れている方の参考になればうれしいです。
