エイリアスと関数を使うと、頻繁に実行するコマンドに短い名前を付けられます。この記事では、ディレクトリ移動、ファイル操作、macOS、Python、Git、GitHubで役立つ実用的なショートカットを紹介します。
エイリアスと関数の使い分け
固定したコマンドやオプションにはエイリアスを使います。エイリアスの実行時には、後ろに追加の引数を渡すこともできます。引数の検証、並べ替え、再利用が必要な場合や、複数のコマンドや条件分岐を扱う場合は関数を使います。
| エイリアス | 関数 | |
|---|---|---|
| 適した用途 | 固定したコマンドやオプション | 引数の処理、複数のコマンド、条件分岐 |
| 使用例 | cd ~ の代わりに h を使う | ディレクトリを作成して、その中へ移動する |
| 定義 | alias h='cd ~' | mkcd() { mkdir -p "$1" && cd "$1"; } |
alias h='cd ~'
mkcd() {
mkdir -p "$1" && builtin cd "$1"
}hを実行するとホームディレクトリへ移動し、mkcd new-projectを実行するとディレクトリを作成して、その中へ移動します。
これらの例は、シェルスクリプトではなく、対話的なZshセッションで使うことを想定しています。単純なエイリアスの多くはBashでも使用できますが、関数やコマンドのオプションは、シェルやオペレーティングシステムによって異なる場合があります。
エイリアスと関数を定義する場所
設定が少ない場合は、エイリアスを~/.zshrcに直接追加します。
alias h='cd ~'編集後にファイルを再読み込みするか、新しいシェルを起動します。
source ~/.zshrc設定が多い場合は、$ZDOTDIR/aliases/git.zshのように用途別のファイルへ分け、.zshrcから読み込みます。
[[ -f "$ZDOTDIR/aliases/git.zsh" ]] && source "$ZDOTDIR/aliases/git.zsh"$ZDOTDIRと分割した.zshrcを使う構成全体については、Zsh設定を整理するを参照してください。
依存関係と互換性
ほとんどの例ではmacOSまたはUnixの標準コマンドを使いますが、この記事の一部のコマンドには追加のソフトウェアが必要です。
| コマンドまたは機能 | 必要なもの |
|---|---|
gls | GNU core utilities:brew install coreutils |
open、osascript、defaults、pmset | macOS |
code | Visual Studio Codeのコマンドラインランチャー |
imgopt | ImageOptim |
gh | GitHub CLI |
git、curl、zip | 使用できない場合は別途インストール |
使用しているツールや作業手順に合うショートカットだけを取り入れてください。追加した設定は、実際に使い始める前に新しいターミナルで一つずつ動作を確認しましょう。
ディレクトリ移動とファイル操作
ディレクトリを移動する
cs() { builtin cd "$@" && command ls -A }
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias cb='cd -'
alias d='cd ~/Desktop'
alias dl='cd ~/Downloads'
alias h='cd ~'
alias /='cd /'
# 最前面のFinderウインドウに表示されている場所へ移動する。
cdf() {
builtin cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')"
}cs関数はディレクトリを移動した後にls -Aを実行します。builtin cdを使うことで、常にZshの組み込みコマンドを呼び出します。そのほかのエイリアスは、よく使う移動先に短い名前を付けています。
ファイルを一覧表示する
alias l='gls --color --group-directories-first -F'
alias la='gls --color --group-directories-first -F -A'
alias ll='gls --color --group-directories-first -F -AhlS'
alias ds='du -d 1 -h 2>/dev/null | sort -h'
alias p='pwd'
path() { print -l -- "${path[@]}" }l、la、ll:glsを使うには、brew install coreutilsでGNU core utilitiesをインストールします。--color:出力を色分けする。--group-directories-first:ディレクトリをファイルより先に表示する。-F:ディレクトリ名に/、シンボリックリンクに@など、種類を示す記号を付ける。-A:.と..を除くすべての項目を表示する。-h:ファイルサイズを読みやすい単位で表示する。-l:サイズ、所有者、グループ、権限などの詳細を表示する。-S:ファイルサイズ順に並べる。
ds:du -d 1で、現在のディレクトリから1階層下にある項目のサイズを表示します。2>/dev/null:エラーメッセージを非表示にする。sort -h:パイプを使い、読みやすい単位のサイズを並べ替える。
pは現在のディレクトリを表示し、path関数はバックスラッシュをエスケープとして解釈せず、$PATHの各項目を1行ずつ表示します。
短いオプションは通常まとめて記述できます。ls -AhlSはls -A -h -l -Sと同じ意味です。
ファイルを編集する
alias v='vi'必要に応じてviを好みのエディタへ変更してください。
検索とユーティリティ
検索と比較
fb() {
find . -size "+${2}M" -type f -name "$1" -exec ls -lhS {} +
}
rn() {
local extension=$1
local text=$2
local filename
for filename in *."$extension"; do
command mv -i -- "$filename" "${filename//$text/}"
done
}
dif() { git diff --no-index --color=always -- "$1" "$2" }
alias imgopt='open -a ImageOptim .'fb "*.pdf" 10は、現在のディレクトリ以下にある10 MBより大きいPDFファイルを検索します。
-size "+${2}M":2番目の引数より大きいMiB単位のファイルを選ぶ。-type f:通常のファイルを選ぶ。-name "$1":最初の引数をファイル名のパターンとして照合する。-exec ls -lhS {} +:結果を読みやすいサイズで、大きい順に表示する。
rn txt asdfは、.txtファイルの名前からasdfを削除します。例えば、aaasdfff.txtはaaff.txtになります。
関数はname() { commands }の形式で定義し、位置引数を受け取れます。
$0:関数名。$1、$2など:個別の引数。"$@":すべての引数を、それぞれ独立した文字列として保持したまま展開する。$#:引数の数。$?:直前のコマンドの終了ステータス。$$:現在のシェルのプロセスID。$!:最後にバックグラウンドで実行したコマンドのプロセスID。
その他のショートカット
alias his='history'
alias rl='exec ${SHELL} -l' # ログインシェルを再起動する暗号化ZIPアーカイブを作成する
zipen() {
zip -er enc.zip "$@"
}zipen file1 file2 dir1は、パスワードで保護されたenc.zipを作成します。引用符で囲んだ"$@"により、空白を含むパスも含め、渡された各パスを別々の引数として保持します。
zip -eによる暗号化は、基本的なパスワード保護を目的としています。機密性の高いデータには、より強力な暗号化ツールを使用してください。
任意のコマンド上書き
次のエイリアスは、新しい名前を追加するのではなく、既存のコマンドを置き換えます。便利ですが、対話シェル全体でコマンドの動作が変わります。
alias cd='cs'
alias ls='gls --color --group-directories-first -F'
alias pwd='sed "s/ /\\\ /g" <<< ${PWD/#$HOME/"~"}'
alias cp='cp -iv'
alias mv='mv -iv'
alias rm='rm -iv'
alias grep='grep --color'
alias pip='pip3'
# 破壊的なショートカット:危険性を理解した場合だけ使用する。
alias rf='rm -rf'cdエイリアスは、移動に成功するたびにディレクトリの内容を表示します。lsエイリアスはGNU版lsを使い、色分けしてディレクトリを先に表示します。pwdエイリアスは、現在のディレクトリに含まれる空白をエスケープし、ホームディレクトリを~へ置き換えて表示します。例えば、macOSの/Users/<USERNAME>/My Driveは~/My\ Driveになります。cp、mv、rmエイリアスは、確認と詳細表示を追加します。pipの置き換えは、Pythonの仮想環境で選択された実行ファイルに干渉する場合があります。python -m pipの方が、使用するPythonを明確に指定できます。
rfは確認せずにディレクトリを再帰的に削除します。使用前に対象を注意深く確認してください。簡単に入力できる破壊的なショートカットが危険だと感じる場合は、このエイリアスを追加しないでください。
macOSのアプリケーションと設定
アプリケーションを開く
alias hr='open .'
alias c='open /Applications/CotEditor.app'
alias vs='code'
alias chrome='open /Applications/Google\ Chrome.app'hr:現在のディレクトリをFinderで開く。c:CotEditorを開く。vs:Visual Studio Codeを開く。chrome:Google Chromeを開く。
Finderで隠しファイルを表示または非表示にする
alias show='defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder'
alias hide='defaults write com.apple.finder AppleShowAllFiles -bool false && killall Finder'FinderでCommand + Shift + .を押しても、隠しファイルの表示と非表示を切り替えられます。
デスクトップアイコンを非表示または表示する
alias dhide='defaults write com.apple.finder CreateDesktop -bool false && killall Finder'
alias dshow='defaults write com.apple.finder CreateDesktop -bool true && killall Finder'スクリーンショットの設定
alias dwl='defaults write com.apple.screencapture location'
alias ddl='defaults delete com.apple.screencapture location'
alias drl='defaults read com.apple.screencapture location'例えば、dwl ~/Desktopを実行すると、スクリーンショットの保存先をデスクトップへ変更できます。
スリープ設定
Macをスリープさせたくない場合は、次のエイリアスを使用します。
alias sleepon='sudo pmset -a disablesleep 0'
alias sleepoff='sudo pmset -a disablesleep 1'Python
alias wpy='command -v python'
alias pin='python -m pip install'
alias puin='python -m pip uninstall'
alias pup='python -m pip install --upgrade pip'
alias pinreq='python -m pip install -r requirements.txt'
alias pf='python -m pip freeze'
alias pfr='python -m pip freeze > requirements.txt'python -m pipを使うと、選択したpipがどのPythonインタープリタに属するかを明確にできます。
pfrはrequirements.txtを上書きします。生成されるパッケージ一覧を先に確認したい場合は、pfを実行してください。
仮想環境を有効化または無効化する
alias acv='source venv/bin/activate'
alias deac='deactivate'GitとGitHub
alias g='git'
alias ga='git add'
alias gb='git branch'
alias gc='git commit'
alias gch='git checkout'
alias gcl='git clone'
alias gd='git diff'
alias gf='git fetch'
alias gi='git init'
alias gm='git merge'
alias gps='git push'
alias gpl='git pull'
alias gpom='git push origin main'
alias gs='git status'GitHubリポジトリと最初のコミットを作成する
次の関数は、現在のディレクトリを初期化し、GitHub CLIを使ってリポジトリを作成します。
# 使用例:ginit private
# ginit public
ginit() {
local visibility=${1:-private}
git init
git add .
git commit -m "🎉 Initial commit"
gh repo create --"$visibility" --source=. --push
}ghコマンドを使う前に、GitHub CLIをインストールしてください。
絵文字付きコミットメッセージ
# リポジトリ内のすべての変更をステージし、コミットして現在のブランチをプッシュする。
gacp() {
if (( $# == 0 )); then
print -u2 -- "Usage: gacp commit message"
return 2
fi
git add -A && git commit -m "$*" && git push
}
gini() { gacp "🎉 Initial commit" }
gnew() { gacp "✨ NEW: $*" }
gimp() { gacp "👌 IMPROVE: $*" }
gprg() { gacp "🚧 PROGRESS: $*" }
gmtn() { gacp "🔧 MAINTAIN: $*" }
gfix() { gacp "🐛 FIX: $*" }
ghot() { gacp "🚑 HOTFIX: $*" }
gbrk() { gacp "‼️ BREAKING: $*" }
grem() { gacp "🗑️ REMOVE: $*" }
gmrg() { gacp "🔀 MERGE: $*" }
gref() { gacp "♻️ REFACTOR: $*" }
gtst() { gacp "🧪 TEST: $*" }
gdoc() { gacp "📚 DOC: $*" }
grls() { gacp "🚀 RELEASE: $*" }
gsec() { gacp "👮 SECURITY: $*" }
# 使用できるコミット種別を表示する。
gtyp() {
local normal='\033[0;39m'
local green='\033[0;32m'
echo "$green gini$normal — 🎉 Initial commit
$green gnew$normal — ✨ NEW
$green gimp$normal — 👌 IMPROVE
$green gprg$normal — 🚧 PROGRESS
$green gmtn$normal — 🔧 MAINTAIN
$green gfix$normal — 🐛 FIX
$green ghot$normal — 🚑 HOTFIX
$green gbrk$normal — ‼️ BREAKING
$green grem$normal — 🗑️ REMOVE
$green gmrg$normal — 🔀 MERGE
$green gref$normal — ♻️ REFACTOR
$green gtst$normal — 🧪 TEST
$green gdoc$normal — 📚 DOC
$green grls$normal — 🚀 RELEASE
$green gsec$normal — 👮 SECURITY"
}gacpは、リポジトリ全体の変更、削除、未追跡ファイルをステージします。実行前にgit statusで状態を確認し、差分を見直してください。また、git pushを実行するには、上流ブランチが設定されている必要があります。
コミットメッセージの参考文献
- Jupyter Book Development Conventions
- How to Write a Git Commit Message
- Emoji-Log
- gitmoji-cli
- Emoji Cheat Sheet
- Complete List of GitHub Markdown Emoji Markup
- Commit Message Examples
.gitignoreを生成する
次の関数は、gitignore.io APIから.gitignoreテンプレートをダウンロードします。gignoreという名前にすることで、上で定義したgi='git init'エイリアスとの衝突を避けています。
gignore() {
local IFS=,
curl -sL "https://www.toptal.com/developers/gitignore/api/$*"
}例えば、gignore macos python visualstudiocode > .gitignoreを実行します。
次のステップ
推奨するファイル構成、$ZDOTDIR、設定ファイルの分割、Zshプロンプトのカスタマイズについては、Zsh設定を整理するを参照してください。ショートカット内で使っているコマンドについては、コマンドラインガイドを参照してください。