zshのaliasはやめてabbrに移行しよう
2026-03-08

はじめに
この記事では、zshのaliasをやめてabbreviation expansion(zsh-abbr)に移行する方法を紹介します。
先日、Xでこんな投稿が流れてきました。
こりゃ酷い。
— ぬん。 (@amasawa_seiji) March 7, 2026
cc知らんかもね。。
/Claude Code に `cc` というエイリアスをつけたら PC がハングした話 https://t.co/cPYZSyPePu
だーかーらーclaude codeのaliasはclでしょうが
— ryoppippi (@ryoppippi) March 7, 2026
ccはc compiler と被っててやばいでしょって割と初期から言い続けてるのに
いまだにalias使ってる人達いるの信じられないな
— ryoppippi (@ryoppippi) March 8, 2026
fishならabbr使って、zshはabbrあるのか知らんけど少なくともzenoつかえばできるでしょ
alias使っていいのは小学生まで
お恥ずかしながら、自分もaliasを普通に使っていたので正直刺さりました。しかもcc='claude'でClaude Codeを呼び出す設定にしていて、これはまさにCコンパイラのccと被っています。
Xの投稿を見るまで、aliasが良くないという認識すらありませんでした。調べてみたら「え、これ最初からこっち使えばよかった」という気持ちになったので、移行手順をまとめます。
aliasの何がダメなのか
aliasは短縮コマンドとして便利ですが、こんな問題があります。
履歴にaliasのまま残る。 たとえばg statusと打つと、シェルの履歴にもg statusとして記録されます。別の環境(aliasを設定していないマシン)で履歴を遡っても、そのまま実行できません。
画面共有時に相手がわからない。 ペアプロやモブプロで画面を共有しているとき、gとかclとか打たれても相手は何のコマンドか分かりません。
本来のコマンドを忘れる。 aliasに頼りすぎると、正式なコマンドやオプションを忘れてしまいます。
既存コマンドと衝突する。 たとえば今回話題になっていたようにcc='claude'としている場合、ccはCコンパイラのコマンドとしてシステムに存在しています。aliasで上書きすると本来のccが使えなくなりますし、逆にaliasが効いていない環境でうっかりccを叩くとCコンパイラが動いてしまいます。
abbreviation expansionとは
abbreviation expansion(略語展開)は、短縮形を入力してSpaceを押すとフルコマンドに展開される仕組みです。展開後に引数を追加したり、そのままEnterで実行できます。aliasとの違いを表にまとめます。
| 観点 | alias | abbreviation expansion |
|---|---|---|
| 履歴 | aliasのまま記録(g status) | 展開後のコマンドが記録(git status) |
| 画面表示 | 省略形のまま | フルコマンドが表示される |
| 学習効果 | 正式なコマンドを忘れやすい | 毎回フルコマンドが見える |
| ポータビリティ | 別環境で履歴が使えない | 履歴がそのまま使える |
| 編集性 | 展開前は編集しづらい | 展開後に自由に編集できる |
Fish shellにはabbrが組み込みで用意されているようですが、私はzshをしようしているので、プラグインを使います。
zsh向けプラグインの比較
zshでabbreviation expansionを使えるプラグインを3つ調べました。
| 観点 | zeno.zsh | zsh-abbr | zabrze |
|---|---|---|---|
| 依存 | Deno + fzf | なし(pure zsh) | Rust binary |
| 設定形式 | YAML / TypeScript | CLI(abbr add) | YAML |
| fzf補完 | あり | なし | なし |
| コンテキスト対応 | あり | なし | あり |
| alias移行の容易さ | YAML手動移行 | abbr import-aliasesで一括 | YAML手動移行 |
| コミュニティ | 中(日本中心) | 大 | 小 |
zsh-abbrを選びました。 理由はシンプルで、外部依存がないことです。Denoもfzfも不要で、pure zshだけで動きます。一旦、abbreviation expansionだけが欲しかったので、zeno.zshの多機能さはオーバースペックかなと思いました。
zsh-abbrの導入と設定
インストール
brewでインストールします。
brew install olets/tap/zsh-abbr既存aliasの一括インポート
すでにaliasをたくさん定義している場合は、abbr import-aliasesで一括インポートできるみたいです。(自分は試せていません)
abbr import-aliasesこれで現在の.zshrcに定義されているaliasがすべてabbreviationとして取り込まれます。手っ取り早く移行したい場合はこれが便利です。
自分の場合はalias自体が少なかったのと、ついでに名前も見直したかったので、手動で書き直しました。
.zshrcの設定
Before(alias):
# Git Alias
alias g='git'
# Claude Alias
alias cc='claude'
alias ccyolo='claude --dangerously-skip-permissions'After(zsh-abbr):
# zsh-abbr (abbreviation expansion instead of aliases)
source /opt/homebrew/share/zsh-abbr/zsh-abbr.zsh
abbr -S -qq g=git
abbr -S -qq cl=claude
abbr -S -qq cld='claude --dangerously-skip-permissions'
abbr -S -qq cldc='claude --dangerously-skip-permissions --continue'ポイントをいくつか説明します。
-Sはセッションabbreviationの指定です。 zsh-abbrには永続化(abbr addでファイルに保存)とセッション(起動時に毎回定義)の2つの方式があります。セッション方式にすることで、.zshrcがabbreviationの定義元(ソース・オブ・トゥルース)になります。dotfilesリポジトリで管理するならこの方式が楽です。
-qqは起動時のメッセージ抑制です。 これを付けないと、シェル起動時にAdded abbreviationというメッセージが毎回表示されます。
ccはclに変更しました。 Xの投稿にもあった通り、Claude Codeのabbreviationはclにしています。Cコンパイラとの衝突を避けるためです。
設定後の操作
.zshrcを書き換えたら、既存のalias定義を削除してシェルを再起動します。
# .zshrcからalias定義を削除した後
source ~/.zshrcあとは普段通りに短縮コマンドを入力するだけです。clと入力してSpaceを押すと、claude に展開されます。展開後のフルコマンドが表示されるので、そのまま引数を続けて入力できます。
展開抑制
abbreviationを展開せずにそのまま実行したい場合は、Ctrl+Spaceで展開を抑制できます。
ただし、macOSのデフォルトだとCtrl+Spaceは入力ソース切り替えのショートカットに割り当てられています。zsh-abbrの展開抑制を使いたい場合は、システム設定からこのショートカットをオフにする必要があります。
まとめ
- aliasは履歴・画面共有・学習効果の面で問題がある。abbreviation expansionに移行しよう
- zshならzsh-abbrが外部依存なしで導入できる
- cc='claude'はCコンパイラと衝突するので、clにしよう
早く気づけばよかったです。フルコマンドが毎回見えるので正式なコマンドも忘れないし、画面共有時にも相手にやさしい。alias使ってる方はぜひ移行してみてください。