「ls -laを1日何回打ってるんだろう...」
開発者の指は酷使されています。同じコマンドを何度も打ち、長いオプションを覚え、タイポしてcommand not foundに怒られる。そして気づけば腱鞘炎の予感(整形外科の予約、いつ取ろう...)。
そんな日々に終止符を打つのがシェルエイリアスです。特にfzf(ファジーファインダー)との組み合わせが強力で、「IDをコピーしてコマンドに貼り付けて...」という作業がゼロになります。
「えっ、そんなに変わる?」と思いますよね。私も最初は半信半疑でした。でも一度使うと戻れません。
この記事で学べること
- fzfを活用したインタラクティブなコマンド体験
- eza, bat, ripgrepなどモダンCLIツールの導入
- Git/Docker/gcloud操作を効率化するエイリアス
- 設定でハマりがちなポイントと対処法
前提:必要なツール
この記事で紹介するエイリアスには、以下のツールが必要です。
# macOS (Homebrew)
brew install fzf eza bat rm-improved ghq fd sd ripgrep lazygit lazydocker
# Nix (home-manager)
# home.packages に追加するだけ
| ツール | 役割 | 一言コメント |
|---|---|---|
| fzf | ファジーファインダー(インタラクティブ選択) | これがないと始まらない |
| eza | ls の進化版(アイコン・Git status対応) | 見た目が100倍良くなる |
| bat | cat の進化版(シンタックスハイライト) | もう素のcatには戻れない |
| rip | rm の安全版(削除ファイルを一時保存) | rm -rfの恐怖から解放 |
| ghq | Gitリポジトリ管理 | リポジトリ迷子防止 |
| fd | find の高速版 | findの呪文を覚えなくていい |
| sd | sed の使いやすい版 | 正規表現地獄からの解放 |
| rg | grep の高速版(ripgrep) | 爆速検索 |
基本のファイル操作系
まずは毎日使うコマンドの強化版から。地味だけど、これだけで1日のタイピング量が体感20%減(個人の感想です)。
lsの進化版:eza
alias ls='eza --icons --git --time-style relative -la'
alias lt='eza --icons --git --time-style relative --tree -aI "node_modules|.git|.cache"'
alias ltl='eza --icons --git --time-style relative --tree -alI "node_modules|.git|.cache"'
ezaはlsの進化版。アイコン表示、Git status、相対時間表示が標準で付いてきます。ltでツリー表示、node_modules等の不要フォルダは自動で除外(これ地味に大事)。
catの進化版:bat
alias cat='bat'
シンタックスハイライト付きでファイルを表示。設定ファイルを確認するとき、色がついてるだけで読みやすさが段違い。
rmの安全版:rip
alias rm='rip'
ripは削除したファイルを一時保存してくれる安全なrm。「やっべ、消しちゃった」からの復活が可能です。
本番環境でrm -rfを打つ前に、手元で練習しておきましょう(経験者は語る)。
fzfを活用したインタラクティブ系
ここからが本番。fzfと組み合わせると、コマンドの体験が劇的に変わります。
「いちいち選ぶの面倒じゃない?」と思うかもしれません。でも、IDやパスを手打ちしてタイポするストレスと比べたら、天と地の差です。
コマンド履歴をコピー
alias h='echo -n $(history | fzf +s --layout=reverse) | pbcopy'
過去に実行したコマンドをfzfで検索してクリップボードにコピー。「あのコマンドなんだっけ...」がサクッと解決。Slackで同僚に共有するときも便利。
リポジトリ間を高速移動
alias g='cd "$(ghq list --full-path | fzf --layout=reverse --preview '\''eza --icons --git --time-style relative -la {1}'\'')"'
ghqで管理しているリポジトリ一覧をfzfで表示し、選択したディレクトリに移動。プレビューで中身も確認できるので、「あれ、このリポジトリ何だっけ」問題が解消。
これ、1日に何十回も使います。cd ~/ghq/github.com/...と打っていた時代には戻れません。
パスをクリップボードにコピー
alias pwdc='echo -n "$(pwd)" | pbcopy; pbpaste'
現在のディレクトリパスをコピー。Slackやドキュメントにパスを貼りたいとき、地味に重宝します。
ディレクトリ配下のファイルを一括取得
alias fl='fd --type f . "$(eza -DR | sd '\'':$'\'' '\'''\'' | rg '\''^./'\'' | fzf)" -x sh -c '\''echo "==== $1 ===="; cat "$1"'\'' _ {} | pbcopy; pbpaste'
選択したディレクトリ配下のファイルパスと中身を一括でクリップボードに。ChatGPTやClaudeにコード全体を渡したいときに最強です。
「このディレクトリのコード全部見せて」ができる。AI時代の必須エイリアス。
Git系
ブランチ名をコピー
alias B='echo -n "$(git branch -av | fzf --layout=reverse --prompt "GIT BRANCH>"| sd "\\*" "" |awk '\''{print $1}'\'')" | pbcopy'
ブランチ一覧からfzfで選択してコピー。PR作成時、Slackでの報告時に便利。
ブランチを切り替え
alias S='git switch "$(git branch -av | fzf --layout=reverse --prompt "GIT BRANCH>" | sd "\\*" "" |awk '\''{print $1}'\'')"'
git switchをfzfで強化。ブランチ名を覚えていなくても大丈夫。feature/implement-user-authentication-with-oauth2みたいな長いブランチ名も怖くない。
GitHubをブラウザで開く
alias ghb='gh browse'
alias lg='lazygit'
ghbでリポジトリのGitHubページを開く。lgでlazygitを起動。lazygitはGitのTUIクライアントで、コミット、プッシュ、リベースが直感的に操作できます(一度使うと手放せない)。
Docker系
Docker操作は長いコマンドの宝庫。エイリアスの効果が絶大です。
「docker container ls してIDコピーして docker exec -it して...」という作業、心当たりありませんか?
コンテナに入る
alias d='docker exec -it $(docker ps | fzf --layout=reverse --prompt "Docker Container>" --preview-window '\''bottom:70%'\'' --preview '\''docker logs {1}'\''| awk '\''{print $1}'\'') sh'
起動中のコンテナをfzfで選択して接続。プレビューでログも見れるので、どのコンテナか迷いません。
ログを表示
alias dl='docker logs --follow --tail=100 $(docker ps -a | fzf --layout=reverse --prompt "Docker Container>" --preview-window '\''bottom:70%'\'' --preview '\''docker logs --details {1}'\'' | awk '\''{print $1}'\'')'
コンテナを選んでログをtail。--followで流れ続けます。プレビューで事前にログの雰囲気も確認可能。
停止・削除系
alias ds='docker stop $(docker ps | fzf --layout=reverse --prompt "Docker Container>" --preview-window '\''bottom:70%'\'' --preview '\''docker logs {1}'\''| awk '\''{print $1}'\'')'
alias dr='docker rm $(docker ps -a | fzf --layout=reverse --prompt "Docker Container>" --preview-window '\''bottom:70%'\'' --preview '\''docker logs {1}'\''| awk '\''{print $1}'\'')'
alias dir='docker image rm $(docker image ls | fzf --layout=reverse --prompt "Docker Image>" --preview '\''docker image inspect {3}'\''| awk '\''{print $3}'\'')'
alias dvr='docker volume rm $(docker volume ls | fzf --layout=reverse --prompt "Docker Volume>" --preview '\''docker volume inspect {2}'\''| awk '\''{print $2}'\'')'
alias dp='docker ps'
alias dpr='docker system prune -f'
すべてfzfで選択できるので、IDをコピペする必要なし。プレビューで確認してから削除できるので、「間違えて本番のコンテナ消した」事故も防げます(これ大事)。
docker compose略記
alias dc='docker compose'
alias dcb='docker compose build --no-cache'
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias dcp='docker compose ps'
docker composeをdcに短縮。dcuでup、dcdでdown。1日に何十回も打つコマンドなので、2文字の短縮でも積み重なると大きい。
devcontainer系
alias dvcb='devcontainer build --workspace-folder . --no-cache'
alias dvcu='devcontainer up --workspace-folder .'
alias dvcur='devcontainer up --workspace-folder . --remove-existing-container'
alias dvcd='docker compose -p (basename (pwd))_devcontainer down'
alias dvce='devcontainer exec --workspace-folder . zsh'
devcontainerの操作も短縮。dvcuでup、dvceで中に入る。dvcurは既存コンテナを削除して再作成(設定変更後によく使う)。
gcloud系
alias gca='gcloud config configurations activate $(gcloud config configurations list | fzf --layout=reverse --prompt '\''config>'\'' | awk '\''{print $1}'\'')'
alias gcp='gcloud config set project $(gcloud projects list | fzf --layout=reverse --prompt '\''config>'\'' | awk '\''{print $1}'\'')'
複数プロジェクトを扱う人必須。fzfで選んで切り替え。「あれ、今どのプロジェクト?」問題が解消。
間違ったプロジェクトにデプロイする悲劇を防げます(本当に防げます)。
その他の便利系
グローバルIP確認
alias ip='echo -n $(dig myip.opendns.com @208.67.222.222 +short) | pbcopy ; pbpaste'
現在のグローバルIPをコピー。ファイアウォール設定時、「自分のIPなんだっけ」が一瞬で解決。
DeepL翻訳
alias tre='deepl text --to en-us '
alias trj='deepl text --to ja '
CLIから直接翻訳。tre "こんにちは"で英訳、trj "hello"で日本語訳。ドキュメント書くときに便利。
yazi・lazydocker
alias y='yazi'
alias ld='lazydocker'
yaziはターミナルファイルマネージャ、lazydockerはDockerのTUI。どちらも1文字で起動。
ハマりポイントと対処法
エイリアス設定でよくある失敗と対処法をまとめました。
1. クォートの地獄
# これだと動かない
alias g='cd "$(ghq list --full-path | fzf --preview 'eza -la {1}')"'
# こうする(シングルクォートをエスケープ)
alias g='cd "$(ghq list --full-path | fzf --preview '\''eza -la {1}'\'')"'
シェルエイリアス内でシングルクォートを使いたい場合、'\''でエスケープします。見た目は最悪ですが、これが正解(3時間溶かした経験談)。
2. pbcopyはmacOS専用
# macOS
alias pwdc='echo -n "$(pwd)" | pbcopy; pbpaste'
# Linux
alias pwdc='echo -n "$(pwd)" | xclip -selection clipboard; xclip -o -selection clipboard'
pbcopy/pbpasteはmacOS専用。Linuxではxclipやxselを使います。
3. fishとzsh/bashでシンタックスが違う
# bash/zsh
alias ls='eza --icons'
# fish(shellAbbrsを使う場合)
abbr ls 'eza --icons'
fishはaliasも使えますが、shellAbbrs(略語展開)を使うと履歴に展開後のコマンドが残るので便利。
4. 設定反映を忘れる
# 設定変更後は必ず
source ~/.zshrc # zshの場合
source ~/.bashrc # bashの場合
exec fish # fishの場合
「設定したのに動かない」の9割はこれ。新しいターミナルを開くか、sourceで反映。
設定方法
これらのエイリアスは ~/.zshrc や ~/.bashrc に追加するだけで使えます。
# ~/.zshrc または ~/.bashrc に追加
# 基本コマンド強化
alias ls='eza --icons --git --time-style relative -la'
alias cat='bat'
alias rm='rip'
# fzf系(お好みで追加)
alias g='cd "$(ghq list --full-path | fzf --layout=reverse)"'
alias S='git switch "$(git branch -av | fzf --layout=reverse | awk '\''{print $1}'\'')"'
# Docker系
alias dc='docker compose'
alias dcu='docker compose up -d'
alias dcd='docker compose down'
設定後は source ~/.zshrc で反映されます。
Nix (home-manager) を使っている場合
# home-manager/programs/common.nix
{
shellSortcuts = {
ls = ''eza --icons --git --time-style relative -la'';
cat = ''bat'';
# ... 以下同様
};
}
Nixで管理すると、複数マシンで同じエイリアスを使い回せます(これが本当に楽)。
まとめ
シェルエイリアスは、日々のタイピング量を劇的に減らす投資です。
特にfzfとの組み合わせは強力で、「IDをコピーしてコマンドに貼り付けて...」という作業がゼロになります。プレビュー機能で「これで合ってる?」と確認してから実行できるので、事故も減ります。
紹介したエイリアスは自分の作業スタイルに合わせてカスタマイズしてください。最初は数個から始めて、「このコマンドよく打つな」と思ったら追加していく。気づけば指が勝手に動くようになります。
1週間後には「エイリアスなしでどうやって仕事してたんだろう」と思うはず(私はそうでした)。



