Mac 環境構築2026
新しいMacマシンを手に入れた時は環境を引き継がずにゼロから環境を育てつつ、色々と試したい。
しばらくメインがデスクトップの Win/WSL2 だったので、色々刷新したい。
2023年版
新しく試したいものリスト
- AeroSpace
- 採用
- Raycast
- IME azooKey/azooKey
- Ghostty
- ZedEditor
- chezmoi
- Aqua Voice
- Docker ではない仮想コンテナ環境
- nix
- https://github.com/antfu-collective/ni
- opencode
- Helix
- Zellij
- https://hyperkey.app/
- 何かしらの履歴管理
- marimo
継続して採用
- zsh
- パッケージマネージャどうしよう
- mise
- homebrew
- eza
- starship
- vscode
- uv
- ty
- jj
ff外の上に日本語は私の第二言語なので失礼しますが、いくつかのお勧めしたいものがあります。
zsh
zsh
- パッケージマネージャどうしよう
パッケージやテーマの問題ならZim Framework aka zimfwをお勧めします!コマンドの実行やターミナル起動が速くて使いやすいと思います。
私のdotfilesには既にchezmoiとzimfwを一緒に使っています。リポジトリへのリンクは以下:
実はzshrcはリポジトリの最古のコミットより古くてほぼ無視しては大丈夫けど、以下の部分はzimfwの活用のために大事:
そして、zimrcの内容はzshで使いたいこと次第ですが、作り方は取扱説明書のコマンド部分にて書いてあります。
履歴管理
何かしらの履歴管理
今のデバイスだけの場合にはmcflyをお勧めします。 全てのデバイスを一緒にシンクロして管理したい場合にはatuinが役に立てるかもしれません。 *私は現在、atuinのようなツールは必要ありませんが、友達はatuinを長い間に使っていて私に勧められたのでここに置いておきます。
ありがとうございます。
zimfw 面白そうなので調べてみます!
変な手グセがつく前に、IME周りからセットアップしていきたい。
IME
最速でDvorak を有効化する。
Karabiner Elements でCmd左を英数、Cmd右をかなに割り当てる。
azookey 試した。 現状、Dvorak が使えないので後回し。最新版をビルドすればいけるらしい。
=> 最新ビルド動いたので採用。かなり良い。
Raycast
設定の入力ソースからCtrl-Spaceを無効化して、Ctrl-Space をRaycastに当てる。
初期化時、
Settings - Advanced - Auto Switch Input Source で Dvorak にしておく
プラグインで入力からの翻訳やAI周りを有効にしたいが...あとで
Terminal
基本VSCode Terminal を採用してるが、最近Claude Code が負荷でぶっ壊れるので、Ghostty + Zellij でいきたい。zsh の補完設定をサボりがちなので、有効にしたい。
自分は brew をローカルに入れる派なので、とりあえずこれだけ入れる。
# なんか初回のGit実行でMacの開発者ツールを有効化する
$ git clone https://github.com/Homebrew/brew.git
$ ./brew/bin/brew install --cask ghostty
$ curl -sS https://starship.rs/install.sh | sh
Starship + Ghostty だけ入れておく
この状態から最低限のZsh設定を書く。Cargoとかまだ入ってないけど、あとで
PATH="$HOME/brew/bin:$HOME/.cargo/bin:$HOME/bin:$PATH"
HISTFILE=$HOME/.zsh_history
HISTSIZE=100000
SAVEHIST=100000
setopt share_history
setopt hist_ignore_dups
setopt hist_ignore_all_dups
setopt auto_pushd
setopt auto_cd
autoload -Uz compinit
compinit
eval "$(starship init zsh)"
# rustup. Rust 系の依存を入れるため
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 最初から入れておく
$ brew install direnv
# miseも最初から念頭にしたい
$ curl https://mise.run | sh
Chezmoi
最初から設定を sync する前提で、chezmoi をセットアップする(ただ自分はゼロからセットアップするので、使わない可能性もあるが...)
kawamata さんの設定を参考にする
$ brew install chezmoi
使ってみる
$ chezmoi init
$ chezmoi add ~/.zshrc
$ cchezmoi apply
# ここに入ってそう
# cat ~/.local/share/chezmoi/dot_zshrc
❯ chezmoi cd
❯ pwd
/Users/mz/.local/share/chezmoi
リポジトリだけ作った。
git push しようとしたら github の認証をしてなかったので、やる。
$ brew install gh
$ gh auth login
この過程でトークンが取得されて設定される(管理画面からPAT発行するより楽)
VCS周り
GitConfig
# This is Git's per-user configuration file.
[user]
# name = mizchi
# email = miz404@gmail.com
[column]
ui = auto
[branch]
sort = -committerdate
[tag]
sort = version:refname
[init]
defaultBranch = main
[diff]
algorithm = histogram
colorMoved = plain
mnemonicPrefix = true
renames = true
[push]
default = simple
autoSetupRemote = true
followTags = true
[fetch]
prune = true
pruneTags = true
all = true
# why the hell not?
[help]
autocorrect = prompt
[commit]
verbose = true
[rerere]
enabled = true
autoupdate = true
[core]
excludesfile = ~/.gitignore
[rebase]
autoSquash = true
autoStash = true
updateRefs = true
# a matter of taste (uncomment if you dare)
[core]
fsmonitor = true
untrackedCache = true
[merge]
# (just 'diff3' if git version < 2.3)
conflictstyle = zdiff3
[pull]
# rebase = true
# この辺は手癖
[alias]
s = status
co = commit
Difftastic
tree sitter ベースで diff をハイライトするツール。前に使って結構気に入ったので、試しにデフォルトにしてみる。
[diff]
external = difft
JJ
全然使いこなせてないが、もう一度入れてみる。
$ brew install cargo-binstall
$ cargo binstall --strategies crate-meta-data jj-cli
試しに、 chezmoi で dotfile 事態を jj の git 互換モードで操作してみる
$ jj config set --user user.name "mizchi"
$ jj config set --user user.email "miz404@gmail.com"
$ jj git init
# 履歴
$ jj log
## 作業に名前をつける
$ jj new -m "add dot_gitconfig"
作業開始点がコミットされてて、あとは自動で追跡されてる。
結構悪くない。あとで別途使い心地をまとめたい。
helix editor をターミナルのデフォルトエディタにする
最初は brew から入れたが、これだと色々とリソースが不足して微妙だった。HEADでビルドした。
$ ghq get -u helix-editor/helix
$ cd ~/ghq/github.com/helix-editor/helix
$ cargo install \
--profile opt \
--config 'build.rustflags="-C target-cpu=native"' \
--path helix-term \
--locked
$ hx --health
これだけだとテーマやシンタックス定義が入ってない状態になる
環境変数で、 helix/runtime を指定すると、この辺りが動くようになる
export HELIX_RUNTIME=~/ghq/github.com/helix-editor/helix/runtime
$ hx --health

設定
デフォルトテーマがあまりに紫すぎる
:theme で色々と選べるのだが、適当に darcula-solid を選んでみた
theme = "darcula-solid"
[editor]
# line-number = "relative"
mouse = true
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[editor.file-picker]
hidden = false

参考
環境変数にEDITOR=hx を指定した。これで git commitなどで helix が起動するようになる。
export EDITOR=hx
dd が xd だったり vim っぽいくせにそうでない部分が多いが、体を慣らしていく
Atuin
$ brew install
$ brew services start atuin
$ atuin sync
$ echo 'eval "$(atuin init zsh)"' >> ~/.zshrc
Ctrl-R または 単に↑で、補完が起動する。

履歴をさかのぼる上移動が奪われるのが不便だったが、これで解決した。
eval "$(atuin init zsh --disable-up-arrow)"
sheldon
~/.zshrc
eval "$(sheldon source)"
shell = "zsh"
[plugins]
[plugins.zsh-autosuggestions]
github = "zsh-users/zsh-autosuggestions"
[plugins.fast-syntax-highlighting]
github = "zdharma/fast-syntax-highlighting"
zoxide
cd を上書きして、よくジャンプするディレクトリを学習する。
cdi foo
で、よくいくディレクトリを列挙してくれるそうだが、 fzf のインストールが必要だった。いつもだったら入れてたが、今回はなかった
brew install fzf
mise python node
node は周りは mise, python 周りは uv で管理させる
curl https://mise.run | sh
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
毎回悩んでたのが、brew が依存で勝手に python/node を持ってきて依存がぐちゃぐちゃになることだったのだが、HOMEBREW_FORBIDDEN_FORMULAE を指定して止めることができるらしい。
export HOMEBREW_FORBIDDEN_FORMULAE="node python python3 pip npm pnpm yarn claude"
❯ brew install node
✔︎ JSON API cask.jws.json Downloaded 15.3MB/ 15.3MB
✔︎ JSON API formula.jws.json Downloaded 32.1MB/ 32.1MB
==> Fetching downloads for: node
✔︎ Bottle Manifest node (25.2.1) Downloaded 24.0KB/ 24.0KB
Error: The installation of node was forbidden by you
in `$HOMEBREW_FORBIDDEN_FORMULAE`.
便利...
node
mise use --global node@24
uv & python
$ curl -LsSf https://astral.sh/uv/install.sh | sh
$ uv python install
Installed Python 3.14.2 in 1.10s
+ cpython-3.14.2-macos-aarch64-none (python3.14)
claude code
curl -fsSL https://claude.ai/install.sh | bash
でも AWS CLI はこれがないと動かないらしい
podman
docker 入れたくないので、podman
$ brew install podman
$ podman machine init
$ podman machine start
$ podman pull nginx
$ podman run -d -p 8080:80 --name test_nginx nginx
$ curl http://localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
...
$ podman stop test_nginx
動いた。lima よりは楽
が、この window が消えない...(再起動すれば消えるだろうけど)

AzooKey ビルドできなくて、一旦IMEで何が一番不満考えたところ、全角が混ざってしまうことだったので karabiner にこれを入れて対応
UDevGothic を導入
Ghostty の設定 Cmd+, を次のように編集する。
theme = xcodedarkhc
font-family = "UDEV Gothic JPDOC"
font-feature = -dlig
keybind = ctrl+m=text:\n
keybind = ctrl+enter=text:\n
keybind = ctrl+i=text:\t
リガチャが暴発するので、 -dlig が必要っぽい
-dligですが、v1.2.0よりfont-featureのデフォルト値が変わったため指定しなくても大丈夫です 🙆♂️
Nix
多少勉強しないと使いこなせなさそうなので、あとでやる
Apple純正の軽量コンテナ
$ ghq get apple/container
# cd ...
$ make release
この bin/container にパスを通しておく
$ container run -d nginx
$ container ls
| ID | IMAGE | STATE | ADDR |
|-------------|--------------|---------|--------------|
| 3e98aedc... | nginx:latest | running | 192.168.64.2 |
$ container stop 3e98aedc-f444-49ae-aede-cc2c1813168c
Raycast 周り
ChatGPT Plugin と Claude Code プラグインを入れた。
GoogleTranslateはデフォルトで入っていた。
IME
AzooKey が更新されて、dvorak 対応したので導入。
今のところいい感じ。しばらく使ってみます。

Carapace
入れた。
export CARAPACE_BRIDGES='zsh,fish,bash,inshellisense' # optional
zstyle ':completion:*' format $'\e[2;37mCompleting %d\e[m'
source <(carapace _carapace)
いい感じに動いてそう

Devbox
nix のラッパーらしいので、これをそのまま使う
# https://www.jetify.com/docs/devbox/quickstart
$ curl -fsSL https://get.jetify.com/devbox | bash
## 使いたいリポジトリ
$ devbox init
$ devbox add node
$ devbox shell
ちゃんと nix の勉強したほうがいいと思うが、後で
使って思ったが mise と役割が被る
Aerospace
Mission Control に頼らず、仮想ウィンドウを管理する。
使いこなすとキーボード操作だけでウィンドウを行き来できるようになる。
概念が大きくて、むずい。
~/.config/aerospace/aerospace.toml に設定を書く。デフォルトをコピペする。
自分はdvorak用に色々書き換えたが、ベストプラクティスとは言えないし一般化できないので、設定はまだ公開しない。
- 起動するとウィンドウ配置管理を Aerospace が握る
- accordion モードの場合、ウィンドウを追加すると右側に水平分割で
-
alt-,alt+でサイズを変更できる
-

全然使いこなせなかったが、これらを認識すると便利さを感じるようになった
- Alt-[1-9a-z] に仮想ウィンドウがある
- Alt-Shift-[1-9a-z] に現在フォーカスしてるアプリケーションを送れる
- Alt-[hjkl] で相対位置のウィンドウに飛べる
参考になったもの
自分は使ってみるが、デフォルトの MissionControl に不満がないなら不要かもしれない。
ファイラ
yazi入れてみた。
評価できるほど使いこなせてない。

GUI派なので、別にマウス操作できる標準Finderでもいい気がする。
VSCode
言語ごとの拡張は必要になったときに入れていけばいいのだが、vscode-comment-translate が本当に便利だった。
settings.json
{
"github.copilot.nextEditSuggestions.enabled": true,
"security.workspace.trust.untrustedFiles": "open",
"editor.minimap.enabled": false,
"containers.containerClient": "com.microsoft.visualstudio.containers.podman",
"containers.orchestratorClient": "com.microsoft.visualstudio.orchestrators.podmancompose",
"commentTranslate.targetLanguage": "ja",
"commentTranslate.browse.mode": "inplace"
}

OSSとして使ってもらいたいのでコメントも英語で書くが、自分が読めなくなる(読めなくはないが、遅くなる)パターンが頻発していたので、助かる。。。
Clean Shot X

Nix & Devbox
追記: nix は教養として学ぶ程度にして、devbox を高水準ラッパーとして普段使いする、でよさそう。
ここでは、環境構築というよりプログラミング言語としてちゃんと向き合ってみた
これはなんというかメモ
- nix 自体は純粋関数型言語のサブセットみたいなもの
-
nix replで一通り動かして動作確認
-
- node.js で例えるなら flake.nix = package.json みたいなやつ
これ自体は流行る気があんまりしない。
Devbox
実体として nix のラッパー。

こういうのはメンテされるかが心配。また、自分でパッケージを追加したければnixを覚える必要はありそう。AIがやってくれそうではあるが。
これは devbox add ... で面白半分で適当に突っ込んだ devbox.json
{
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.16.0/.schema/devbox.schema.json",
"packages": [
"go@latest",
"python@latest",
"postgresql@latest",
"bun@latest",
"zig@latest",
"lean4@latest",
"zls@latest"
]
}
GitHub Actions
そのままテスト環境設定に流用できる
.github/workflows/test.yaml
name: Testing with devbox
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install devbox
uses: jetify-com/devbox-install-action@v0.12.0
- run: devbox run -- python --version
- run: devbox run -- go version
- run: devbox run -- bun test
これは便利
追記:
色々と突っ込みすぎたせいもあるが、初回実行が2m40s として、すでに冪等でキャッシュを参照してるので、これ以上速くならない。

個人のライブラリだとこれ自体がオーバーヘッドになるので、常に使うという感じにはならなさそう。
memo
defaults write -g ApplePressAndHoldEnabled -bool false
Sketchybar 導入

homebrew 作者の mise 的なやつ。
pkgx node@18 --version のように、一時的にパスを通して明示的に実行する。
$ brew install pkgxdev/made/pkgx