TechQuant Blog

zoxideでcdを捨てた話。3週間で指が書き換わった

7分で読める

火曜の朝、いつものように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 zoxidecargo install zoxide --lockedもある。Rustツールチェーンがあるなら、こちらの方が常に最新版になる。

シェルへの組み込みは、zshなら.zshrc末尾に1行。

eval "$(zoxide init zsh)"

「末尾」というのが地味に大事で、prompt系プラグイン(starshipなど)より後に書かないと、precmdフックの順番がズレてDB更新が止まることがある。これで一晩潰した。

bashなら~/.bashrceval "$(zoxide init bash)"。fishは~/.config/fish/config.fishzoxide 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派の人にも刺さるものがあるはず。