zoxideでcdを捨てた話。3週間で指が書き換わった
火曜の朝、いつものようにcd ~/Workspace/2026-04-09_make_money/seoblog/scriptsと打って、途中でTabが効かず舌打ちした。フルパス補完は速いが、どうしても指の往復が増える。あの瞬間に、長いこと放置していたzoxideを入れた。
3週間経った今、指が完全に書き換わった。cdはほぼ打たない。打つのはz + 適当な単語だけ。
この記事は、Mac / Raspberry Pi 5 / VPSの3台でzoxideを使い込んだ自分が、本当に効いた使い方とハマりどころを書き残すもの。READMEの和訳ではなく、毎日触って気付いたものを中心に。
zoxideとは何か(autojumpやzと何が違うのか)
zoxideは Ajeet D'Souza 氏が Rust で書いた、賢いcdの代替ツールだ。bash / zsh / fish / PowerShell / Nushell など、ほぼ全てのシェルで動く。
過去にautojumpやz.shを触ったことがある人なら話は早い。コンセプトは同じで、移動したディレクトリの「頻度 × 最近度」をスコアリングして、部分一致で一発ジャンプさせる。
ただ、後発だけあって作りが洗練されている。
- Rust製で起動が爆速(プロンプト表示時のオーバーヘッドが体感ゼロ)
- データベースが単一バイナリファイル、壊れにくい
- fzfと組み合わせた
zi(interactive)が標準で入る - Windowsもfirst-classでサポート、WSLとの行き来でも一貫した体験になる
「cdでええやん」と思った人。3週間前の自分もそう思っていた。1週間使うと、たぶん戻れなくなる。
インストールと最低限のセットアップ
ワンライナーで入る。Mac / Linux / Raspberry Pi (arm64) どれも同じ。
curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh
Homebrew派ならbrew install zoxide。cargo install zoxide --lockedもある。Rustツールチェーンがあるなら、こちらの方が常に最新版になる。
シェルへの組み込みは、zshなら.zshrcの末尾に1行。
eval "$(zoxide init zsh)"
「末尾」というのが地味に大事で、prompt系プラグイン(starshipなど)より後に書かないと、precmdフックの順番がズレてDB更新が止まることがある。これで一晩潰した。
bashなら~/.bashrcにeval "$(zoxide init bash)"。fishは~/.config/fish/config.fishにzoxide init fish | sourceと書く。
cdをzに置き換える(ここが肝)
デフォルトではzコマンドが追加されるだけで、cdはそのまま残る。これだと結局cdを打ってしまうので、上書きしてしまう。
eval "$(zoxide init --cmd cd zsh)"
--cmd cdを付けると、cdそのものがzoxideに置き換わる。普通のディレクトリ指定(cd ../srcとかcd /etc)は今まで通り動き、パスじゃない単語を渡したときだけ履歴ジャンプが走る仕組み。最初は怖いが、1日触ると体に馴染む。
3週間で固まった使い方
z + 部分一致(基本)
これが90%。一度でも訪れたディレクトリなら、含まれる単語の一部で飛べる。
z make_money # ~/Workspace/2026-04-09_make_money に飛ぶ
z seoblog scripts # スペース区切りで複数キーワードのAND検索
z .. # 普通のcdとしても動く
z - # 直前のディレクトリに戻る
スペース区切りのAND検索が効く。z make scriptsで「makeとscripts両方を含むディレクトリ」を絞り込める。プロジェクトが3桁を超えたあたりから、これが本気で刺さる。
zi で fzf 風の対話選択
候補が複数あって決められない時、ziを打つとfzfで選べる(fzfは別途インストール必要)。
zi seoblog
fzfがインストールされていれば、絞り込み画面が出てインクリメンタルに選べる。fzfの実践Tipsでも書いたが、fzfが入っているマシンでziを覚えると、もう普通のcdには戻れない。
頻度の確認とDBメンテ
たまに「あれ、なんでこのディレクトリに飛ばないんだ」となる。そんなときはDBを覗く。
zoxide query --list --score | head -20
スコアが低いディレクトリ順に出るので、思った通りに学習されているか確認できる。消したいエントリがあればzoxide remove <path>。手動で~/.local/share/zoxide/db.zoを消すと全リセット。
tmux / screen との相性
tmuxを使っていると、各ペインで開いたディレクトリも全てDBに記録される。これが便利すぎる。普段別ペインで作業しているSEOブログのディレクトリも、z seoblog一発で飛べる。
注意点が1つ。tmuxのdefault-commandを独自に指定している場合、precmdフックが効かないことがある。zoxideは「プロンプト表示時に現在ディレクトリをDBへ追記する」仕組みなので、フックが死ぬと学習が止まる。tmux source ~/.tmux.conf後にz fooが動かなくなったら、ここを疑う。
Raspberry Pi 5 で運用してハマった話
自宅サーバーのRaspberry Pi 5にzoxideを入れたとき、最初にaptitudeパッケージ版(apt install zoxide)を入れたら、Debian 12のバージョンが古くて--cmdオプションが効かなかった。
cargoから入れ直したら一瞬で解決した。Raspberry Piだとcargo installが10分くらいかかるが、リリースバイナリをGitHubから直接落とす方が速い。
VERSION=$(curl -s https://api.github.com/repos/ajeetdsouza/zoxide/releases/latest | grep tag_name | cut -d'"' -f4)
curl -L "https://github.com/ajeetdsouza/zoxide/releases/download/${VERSION}/zoxide-${VERSION#v}-aarch64-unknown-linux-musl.tar.gz" \
| tar xz -C ~/.local/bin/ zoxide
これで30秒で済む。Raspberry Pi 5の自宅サーバー運用Tipsでも書いたが、Pi上では「公式バイナリが速いか、ソースからビルドが必要か」を毎回判断するクセを付けておくと寿命が延びる。
SSHログインしたVPSでも使いたい
これは最近やった工夫。Raspberry PiからVPSへの移行記事の流れでVPSを増やしたら、サーバーごとにzのDBがバラバラになって面倒になった。
同期は無理せず、サーバー側ではzoxideを各ホスト独立で運用する方針で落ち着いた。理由は明確で、サーバー側で頻繁に行くディレクトリ(/var/log/caddyとか/etc/systemd/systemとか)はそもそもローカルと違うから。同期しても得しない。
ちなみに自分はVPSとしてお名前.comの高性能VPS
を使っているが、Ubuntu 24.04の標準リポジトリにzoxideが入っているので、apt install zoxideでそのまま動いた。Debian系のバージョン違いで挙動が変わるので、入れる前にapt-cache policy zoxideで確認するのが早い。
Claude Codeから使うときの小ネタ
Claude Codeなど自動化エージェントからzを呼ぶと、対話シェルじゃないのでaliasが読まれず動かない、というのが地味にハマる。
解決はシンプルで、zoxide query <keyword>を直接叩く。これは絶対パスを返すだけのコマンドなので、エージェントから安全に使える。
cd "$(zoxide query make_money)"
シェルスクリプトの中で「人間が頻繁に行くプロジェクトディレクトリに移動したい」時に便利。Claude CodeをCronで動かす記事でも触れたが、自動化文脈ではaliasやshell関数を当てにせず、queryサブコマンドで明示するのが事故が少ない。
正直、まだ試行錯誤中なところ
1点だけ、解決していない悩みがある。「同名のディレクトリが複数プロジェクトに存在する」とき(例: scriptsとかtools)、z scriptsでどこに飛ばされるかは最頻度で決まる。意図しない場所に飛ぶことが今でも週1ペースである。
対処は、複数キーワードを渡す癖を付けること(z money scripts)。あとはzi scriptsでfzfに渡してしまう。スコアリングは便利だが、万能ではない。
3週間使った結論
zoxideは「シェル体験を1段階上げる」類のツールだ。1日では効果が分からない。1週間使うと指が覚え始める。3週間経つと、もうcdのフルパス入力に戻れなくなる。
実体感として、ターミナル内のディレクトリ移動コストが体感3分の1以下になった。1日100回はディレクトリを切り替える人間にとって、これは効く。
導入コストは5分。撤去も~/.local/share/zoxide/を消すだけ。試して合わなければ戻せる。1週間試す価値は確実にある。
同じ系統の生産性ツールに興味があれば、DevToolsまとめに普段使いのWebツールも整理してある。CLI派の人にも刺さるものがあるはず。