役割の整理
zsh、Sheldon、Ghostty、Starshipの構成でターミナルをカスタマイズしていきます。
シェル(zsh)
├── 基本設定(履歴、オプション、補完)
├── 環境変数・PATH管理
├── キーバインド(シェル操作)
└── 基本的な関数・エイリアス
プラグインマネージャー(Sheldon)
├── 外部プラグイン
├── 拡張機能(syntax-highlighting、autosuggestions等)
└── 動的エイリアス・abbr
ターミナルエミュレータ(Ghostty)
├── 表示設定(フォント、カラーテーマ)
├── ウィンドウ・タブ管理
└── キーバインド(ターミナル操作)
プロンプト設定(starship)
├── 表示要素・モジュール
├── スタイル・色設定
└── 表示条件・順序
ターミナル、エディタ、シェルの違い
ターミナル(ターミナルエミュレーター)
ユーザーがコンピュータと対話するためのインターフェース
Macで人気のあるターミナルの種類
- Terminal.app
- iTerm2
- warp
- ghostty
など
シェル
ターミナルの中で動作するプログラム
ユーザーが入力したコマンドを実行する
できること
- ファイルを操作
- プログラムを実行
- システムの設定を変更
など
シェルの種類
- sh - Bourne Shell (ボーンシェル)
- bash - Bourne-Again Shell (ボーンアゲインシェル)
- zsh - Z Shell (Zシェル)
- fish - Friendly Interactive SHell (フレンドリーインタラクティブシェル)
- dash - Debian Almquist Shell (デビアンアルムクイストシェル)
など
# 使用可能なシェルの確認
cat /etc/shells
# デフォルトシェルを確認する
# zshの場合は/bin/zshが返ってくる
echo $SHELL
# シェルをzshに変更
chsh -s /bin/zsh
# シェルをbashに変更
chsh -s /bin/bash
エディタ
テキストやコードを作成・編集するためのツール
主にファイルの内容を直接変更するために使用される
エディタの種類
- Vim
- Nano
- Visual Studio Code
- Notepad++
など
コマンド
ターミナルでよく使うコマンドのおさらい
現在のディレクトリのパス表示
# 現在のディレクトリのパスを表示
pwd
ファイル、ディレクトリ作成
# ディレクトリ作成
mkdir ディレクトリ名
# ファイル作成
touch ファイル名
# ファイルコピー
cp ファイル名 コピー先のパス/ファイル名
# ディレクトリコピー
cp -r 現在のディレクトリ名 コピー先のディレクトリ名
ファイル、ディレクトリ削除
# ファイルを削除
rm ファイル名
# ディレクトリとその中身を削除
rm -r ディレクトリ名
# ディレクトリとその中身を削除(強制)
rm -rf ディレクトリ名
ディレクトリ移動
# ディレクトリを指定して移動
cd ディレクトリ名
# ホームディレクトリに移動
cd
cd ~
# 1つ上のディレクトリに移動
cd ..
cd ../
# 直前にいたディレクトリに戻る
cd -
ファイル、ディレクトリ一覧表示
# 現在のディレクトリ内のファイルやディレクトリ一覧表示
ls
# 現在のディレクトリ内のファイルやディレクトリ一覧表示(隠しファイルも表示)
ls -a
# 現在のディレクトリ内のファイルやディレクトリ一覧表示(詳細表示)
ls -l
ファイル、ディレクトリの移動、名前変更
# ファイルやディレクトリの移動、名前変更
mv 現在のファイル名 変更後のファイル名
ファイルの内容表示
# ファイルの内容を表示
cat ファイル名
# ファイルの内容をページごとに表示 スクロールや検索が可能(qで終了)
less ファイル名
# 指定したファイルの先頭10行を表示
head ファイル名
# 指定したファイルの指定した行数を表示
head -n 20 ファイル名
# 指定したファイルの末尾10行を表示
tail ファイル名
# ファイルの追加内容をリアルタイムで表示(ログ監視に便利)
tail -f ファイル名
# ファイルの中から指定したパターンに一致する行を検索
grep 検索パターン ファイル名
# 大文字小文字を区別しない
grep -i
# サブディレクトリも検索
grep -r
ファイルを開く
# macOSのデフォルトアプリで開く
open ファイル名
# nanoエディタで開く
nano ファイル名
# vimエディタで開く
vim ファイル名
# VS Codeで開く
code ファイル名
ディレクトリを開く
# macOSのデフォルトアプリで開く
open ディレクトリ名
# vimエディタで開く(ファイルブラウザモード)
vim ~/.zshrc
# VS Codeで開く
code ~/.zshrc
コマンド操作と履歴
# 過去に実行したコマンドの履歴を表示
history
# 直前のコマンドを再実行
!!
# N番目のコマンドを再実行(番号はhistoryで確認可能)
!N
# 直近で<文字列>を含むコマンドを検索して実行
!?<文字列>?
操作 | 内容 |
---|---|
Ctrl + r | コマンド履歴をインクリメンタルサーチ |
Tabキー | コマンドやファイル名、ディレクトリ名の補完 |
システム情報とプロセス管理
# ディスクの使用状況を人間が読みやすい形式で表示
df -h
# 指定したディレクトリのディスク使用量を表示
du -sh ディレクトリ名
# 現在実行中のすべてのプロセスを表示
ps aux
# プロセスのCPU使用率やメモリ使用量などをリアルタイムで表示(qで終了)
top:
# 指定したプロセスを終了
kill プロセスID
# 指定したプロセスを終了(強制終了)
kill -9 プロセスID
# ターミナルのセッションを終了
exit
ネットワーク
# ネットワークの疎通確認(Ctrl + cで終了)
ping ホスト名またはIPアドレス
# ネットワークインターフェースの設定を表示
ifconfig
ip addr
# リモートサーバーにSSH接続
ssh ユーザー名@ホスト名
ssh IPアドレス
# SCPでファイルをリモートサーバーにコピー
scp ローカルファイル ユーザー名@ホスト名:リモートパス
パイプ (|)
コマンドの出力を別のコマンドの入力として渡す
# 現在のディレクトリの中からtxtファイルのみ絞り込んで表示
ls -l | grep .txt
リダイレクト
# ファイルリストを指定したファイルに書き込み(新規作成または上書き)
ls > ファイル名
# ファイルリストを指定したファイルに書き込み(末尾に追記)
ls >> ファイル名
クリア
# terminalをクリアにする
clear
画像リサイズ
# 画像フォルダの全JPEGファイルを比率を保ちつつ縦横どちらか大きい方を800pxにリサイズする場合
sips -Z 800 *.jpg
読み上げ
say テキスト
xtraceとverbose
#「実行されるコマンド」 を表示 (実行直前、展開後)
#スクリプト全体の実行の流れや、変数展開が期待通りに行われているか
zsh -x
#「読み込まれた行」 を表示 (読み込み直後、展開前)
# 特定のコマンドの入力形式が正しいか、元の記述がどうなっているかを確認したい場合
zsh -v
# 両方
zsh -xv
ディレクトリスタック
ディレクトリの位置をフルパスで複数保存しておくための記憶領域を使って移動
# 現在のディレクトリを「ディレクトリスタック」に保存し、指定されたディレクトリに移動
# スタックからディレクトリを取り出して移動
pushd ディレクトリ名
# 引数無しでpushdを実行
# ディレクトリスタックの先頭のディレクトリ(最後に pushd で保存されたディレクトリ)と現在のディレクトリを入れ替える
pushd
# pushdで操作するディレクトリ履歴の一覧を表示
dirs
# 引数なしで実行 ディレクトリスタックの一番上(先頭)のディレクトリを削除しつつ、そのディレクトリに移動
popd
# 引数ありで実行 ディレクトリスタックの指定番目(先頭から)のディレクトリを削除しつつ、そのディレクトリに移動
popd +2
ファイルへの書き込み
# ファイルの新規作成若しくは上書きする場合
echo "Hello World" > file.txt
# ファイルへ追記する場合
echo "New line" >> file.txt
GitHub用の秘密鍵、公開鍵を作成
ssh-keygenで使える暗号化方式
- dsa 最弱
- rsa
- ecdsa
- ed25519 最強
rsa
ssh-keygen -t rsa -C メールアドレス
ssh ed25519
ssh-keygen -t ed25519 -C "メールアドレス"
パスフレーズの変更
ssh-keygen -p -f ~/.ssh/秘密鍵ファイル名
zshの設定ファイルの種類
準備
準備 | 操作 |
---|---|
隠しディレクトリ、隠しファイルを表示 | Command + Shift + . |
ファイル名の拡張子を表示 | Finder→「環境」の「詳細」タブで「すべてのファイル名拡張子を表示」にチェック |
zshの設定ファイル概要
ターミナルを開いた時に読み込まれる設定ファイル(読み込み順に記載)
パス | 内容 |
---|---|
/etc/zshenv | 常に読み込まれる(すべての Zsh ユーザー共用) |
~/.zshenv | 常に読み込まれる(ユーザー固有) |
/etc/zprofile (ログインシェル) | ログイン時に読み込まれる(すべての Zsh ユーザー共用) |
~/.zprofile (ログインシェル) | ログイン時に読み込まれる(ユーザー固有) |
/etc/zshrc (インタラクティブシェル) | 常に読み込まれる(すべての Zsh ユーザー共用) |
~/.zshrc (インタラクティブシェル) | 常に読み込まれる(ユーザー固有) |
/etc/zlogin (ログインシェル) | 現在はあまり使われない傾向(すべての Zsh ユーザー共用) |
~/.zlogin (ログインシェル) | 現在はあまり使われない傾向(ユーザー固有) |
ログアウト時に読み込まれる設定ファイル(読み込み順に記載)
パス | 内容 |
---|---|
~/.zlogout | シェルからexitするときに読み込まれる(ユーザー固有) |
/etc/zlogout | シェルからexitするときに読み込まれる(すべての Zsh ユーザー共用) |
ログアウト時は~が先で/etc/が後に読み込まれる |
履歴
パス | 内容 |
---|---|
~/.zsh_history | コマンドの実行履歴がZsh の起動時に読み込まれ、セッション終了時に書き込まれる |
~/.zsh_sessionsディレクトリ | ターミナルがセッションの状態を保存する |
設定ファイルの内容確認
# ファイルの内容確認
less /etc/zprofile
less /etc/zshrc
less ~/.zsh_history
# デフォルトでは存在しないもの
less /etc/zshenv
less ~/.zshenv
less ~/.zprofile
less ~/.zshrc
less /etc/zlogin
less ~/.zlogin
less ~/.zlogout
less /etc/zlogout
~/.zshrcを作成する
# 現在地は場所はどこでもいいパターン
touch ~/.zshrc
# homeに移動してから実行するパターン
# homeディレクトリに移動
cd ~
# または cd $HOME
touch .zshrc
zshのカスタマイズ
~/.zshrcを編集する
オプション
有効無効切り替え
# AUTO_CDオプションを有効にする
setopt AUTO_CD
# AUTO_CDオプションを無効にする
unsetopt AUTO_CD
setopt NO_AUTO_CD
有効無効確認
※先頭に「no...」と付いているオプションは有効/無効が逆になる
# 有効になっているオプション一覧表示
setopt
# 無効になっているオプション一覧表示
unsetopt
# 有効/無効含めてすべてのオプションの設定を一覧表示
set -o
オプションのマニュアル
# Zshの全てのオプションに関する詳細な説明を表示
man zshoptions
環境変数
一時的変更
変更はターミナル再起動まで有効
export 環境変数名="環境変数の値"
永続的変更
この方法で追加した環境変数は、セッションに関係なく有効
echo 'export 環境変数名="環境変数の値"' >> ~/.zshrc
追記した内容を反映する(設定ファイルの読み込み)]
~/.zshrcを変更して保存した後、変更を現在のターミナルセッションに反映させるには下記の方法
- 新しいターミナルウィンドウを開く
- 以下のコマンドを実行する
source ~/.zshrc
値を削除して上書き保存してsource ~/.zshrcしてもターミナル再起動までは消えない
値を変更して上書き保存してsource ~/.zshrcすると新しい値に変わる
確認
環境変数の中身を表示
# 一覧表示
printenv
# 個別表示
echo $環境変数名
print $環境変数名
環境変数のpath
PATHとは
コマンドの実行ファイルを探すための環境変数
ファイル名だけでコマンドを実行できるようにする仕組み
フルパスを毎回入力する手間を省く
コマンド実行の流れ
- コマンドを入力(例:
ls
) - PATHに設定されたディレクトリを順番に検索
- 最初に見つかった実行ファイルを実行
- 見つからない場合は
command not found
エラー
現在の環境変数PATHの確認
# PATH一覧表示
echo $PATH
# 見やすく表示
echo $PATH | sed -e 's/:/\n/g'
# 特定コマンドの場所確認
which コマンド名
PATHの優先順位
同名コマンドが複数ある場合
先に書かれているパスが優先される
システムデフォルト(/etc/paths)
- /usr/local/bin
- /System/Cryptexes/App/usr/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
ディレクトリ | 役割 |
---|---|
/usr/local/bin |
Homebrew等でインストールしたコマンド |
/usr/bin |
一般的なユーザーコマンド |
/bin |
必須の基本コマンド |
/usr/sbin |
システム管理者向けコマンド |
/sbin |
システム起動・修復用コマンド |
Homebrewの使い方については
macOSでのパッケージ管理をご参照ください
例:/usr/local/bin/コマンド
と/usr/bin/コマンド
のように同じコマンドが違う場所にインストールされている場合に、Apple標準からHomebrew版に切り替える
# 悪い例(Apple版が優先)
export PATH="$PATH:/usr/local/bin"
# 良い例(Homebrew版が優先される)
export PATH="/usr/local/bin:$PATH"
# 実行ファイルの場所確認
which コマンド名
オプション設定を関数内だけで有効にする
目的
- 関数の独立性
- 一時的な設定変更
- 可読性の向上
setopt local_options
補完
# 補完機能を有効にする(zsh-completionsなどに必要)
# autoloadは指定された関数やモジュールを必要になった時に読み込む
autoload -Uz compinit
compinit
# コマンドのスペルミスを自動的に修正候補を表示
setopt correct
# 補完候補が複数あるとき、tabを押して表示される一覧から選択できる
setopt auto_menu
日本語を使用
export LANG=ja_JP.UTF-8
ディレクトリ移動
# コマンドとして認識されない単語がディレクトリ名の場合、自動的に cd する(ディレクトリ名のみの入力で移動)
setopt auto_cd
# 環境変数名のみの入力で移動(環境変数にディレクトリのパスを設定されている場合)
setopt cdable_vars
mkcd
mkdirとcdを同時に実行
function mkcd() {
if [[ $# -ne 1 ]]; then
echo "Usage: mkcd <directory>"
return 1
fi
if [[ -d $1 ]]; then
echo "$1 already exists!"
cd "$1"
else
mkdir -p "$1" && cd "$1"
fi
}
cdコマンドでディレクトリが見つからなかった場合にホームディレクトリ配下の中も探す
cdpath=(~)
cd後にezaかlsを実行
chpwd() {
if command -v eza >/dev/null 2>&1; then
eza -l --sort newest --color=always
else
ls -la
fi
}
pushd
# 自動でpushdを実行(cdしたら自動的にpushd)
setopt auto_pushd
# pushdから重複を削除(重複したディレクトリを追加しない)
setopt pushd_ignore_dups
lobbingパターン
# **/、(#c[...]) などを有効化
setopt extended_glob
# パターンにマッチするファイルがない場合にエラーを表示
setopt nonomatch
シェルの挙動
# 対話型シェルでも # 以降をコメントとして扱う
setopt interactive_comments
# Ctrl+D(End of File)でzshを終了しない(ログアウトはexit+Enterキー)
setopt ignore_eof
# フローコントロール信号を無視(zshの内部的な挙動)
setopt no_flow_control
# フローコントロール信号を無視(macOSのターミナルドライバの挙動)
stty -ixon
ファイルへの書き込み(リダイレクト)の制御
# >(出力リダイレクト演算子)を使っての既存ファイルへの上書きを拒否 (>|で強制上書き可能)
setopt noclobber
コマンド履歴の最大数
# 現在実行中のZshセッションでメモリ上に保持するコマンド履歴の最大数
HISTSIZE=10000
# Zshを終了する際に ~/.zsh_historyに保存するコマンド履歴の最大数を設定
SAVEHIST=10000
インクリメンタルサーチ
# Ctrl+r で履歴をインクリメンタルサーチ(古い順)
bindkey '^r' history-incremental-search-backward
# Ctrl+s で履歴をインクリメンタルサーチ(新しい順)
bindkey '^s' history-incremental-search-forward
スペースから始まるコマンド行は履歴に残さない
setopt hist_ignore_space
履歴ファイル(~/.zsh_history)に保存
setopt hist_reduce_blanks
複数のZshセッション間で履歴(セッション履歴と、~/.zsh_history ファイルの両方)を共有
※環境変数を設定するコマンドを実行した場合、そのコマンドの実行履歴は残るが環境変数は別のタブで使えるわけではない
setopt share_history
セッション履歴内の重複制御
# セッション履歴全体で重複を表示しない
setopt hist_ignore_all_dups
# セッション履歴で直近の重複を表示しない(setopt hist_ignore_all_dupsが有効の場合は無意味)
setopt hist_ignore_dups
履歴ファイル(~/.zsh_history)保存時に、過去分に重複があれば削除
setopt hist_save_nodups
複数のセッションが同時期に終了した時に履歴ファイル(~/.zsh_history)への追記の整合性を保証
setopt append_history
コマンド実行後すぐに履歴ファイルに書き込む
setopt inc_append_history
履歴にタイムスタンプとコマンド実行時間を記録
setopt extended_history
Zshの履歴検索機能(インクリメンタルサーチ)を使用する際に、重複するコマンドを検索結果として表示しない
setopt hist_find_no_dups
Sheldon
プラグインマネージャー
インストール
brew install sheldon
sheldonのロード
# シェル起動時にSheldonをロード
eval "$(sheldon source)"
~/.zshrc内の記述位置
- setoptより後
- プラグイン自体が提供する機能の定義より前
- ほとんどの環境変数の設定の後
sheldonの設定
シェルの指定
shell = "zsh"
zoxide
# zoxide本体をインストール
brew install zoxide
[plugins.zoxide-init]
inline = 'eval "$(zoxide init zsh)"'
実行
# いくつかのディレクトリに移動して移動履歴を蓄積
cd ~/Documents
cd ~/Downloads
cd ~/Desktop
z ~ # ホームディレクトリに戻る
# zoxideを使う
z ディレクトリ名 # ディレクトリに移動(部分マッチ)
zi # インタラクティブモードで選択
za ディレクトリ名 # ディレクトリを追加
zr ディレクトリ名 # ディレクトリを削除
thefuck
自動修正
- コマンドを打ち間違えてエラーになった時
- インストールしていないコマンドを使おうとした時
など
インストール
brew install thefuck
[plugins.thefuck-init]
inline = 'eval "$(thefuck --alias)"'
実行
# タイポしたコマンドを実行
got branch
# thefuck実行
fuck
# 候補から選択してEnterキー
git branch [enter/↑/↓/ctrl+c]
zsh-defer
プラグインの遅延読み込み
# sheldonでプラグインzsh-deferを追加
sheldon add zsh-defer --github romkatv/zsh-defer
[plugins.zsh-defer]
github = "romkatv/zsh-defer"
# zsh-deferを使用するテンプレートを定義
[templates]
defer = "{{ hooks | get: \"pre\" | nl }}{% for file in files %}zsh-defer source \"{{ file }}\"\n{% endfor %}{{ hooks | get: \"post\" | nl }}"
zsh-completions
サブコマンドの自動補完
インストール
# sheldonでプラグインzsh-completionsを追加
sheldon add zsh-completions --github zsh-users/zsh-completions
[plugins.zsh-completions]
github = "zsh-users/zsh-completions"
docker-zsh-completion
Dockerのコマンドを補完
インストール
# dockerのインストール
brew install --cask docker
# sheldonでプラグインdocker-zsh-completion を追加
sheldon add docker-zsh-completion --github greymd/docker-zsh-completion
[plugins.docker-zsh-completion]
github = "greymd/docker-zsh-completion"
apply = ["defer"] # 遅延読み込みする場合(zsh-deferも必要)
実行
docker+Tabキー
zsh-autosuggestions
コマンド履歴や入力候補をリアルタイムで提案
インストール
# sheldonでプラグインzsh-autosuggestionsを追加
sheldon add zsh-autosuggestions --github zsh-users/zsh-autosuggestions
[plugins.zsh-autosuggestions]
github = "zsh-users/zsh-autosuggestions"
apply = ["defer"] # 遅延読み込みする場合(zsh-deferも必要)
zsh-history-substring-search
途中まで入力して↑↓キーを入力すると、入力文字列を含んだ履歴のみを表示
インストール
# sheldonでプラグインzsh-history-substring-searchを追加
sheldon add zsh-history-substring-search --github zsh-users/zsh-history-substring-search
[plugins.zsh-history-substring-search]
github = "zsh-users/zsh-history-substring-search"
apply = ["defer"] # 遅延読み込みする場合(zsh-deferも必要)
fzf
ファジーファインダー
# fzf本体のインストール
brew install fzf
# sheldonでプラグインzsh-autosuggestionsを追加
sheldon add fzf --github junegunn/fzf
[plugins.fzf]
github = "junegunn/fzf"
実行
ターミナルで Ctrl+r
fzf-tab
fdやexaなどとの連携
# 別途fzfをインストールしていない場合はインストール
brew install fzf
# sheldonでプラグインfzf-tabを追加
sheldon add fzf-tab --github Aloxaf/fzf-tab
[plugins.fzf-tab]
github = "Aloxaf/fzf-tab"
動作確認
ls+tabキー
rm+tabキー
cd+tabキー
zsh-fzf-history-search
インストール
# 別途fzfをインストールしていない場合はインストール
brew install fzf
# sheldonでプラグインzsh-fzf-history-searchを追加
sheldon add zsh-fzf-history-search --github joshskidmore/zsh-fzf-history-search
[plugins.zsh-fzf-history-search]
github = "joshskidmore/zsh-fzf-history-search"
apply = ["defer"] # 遅延読み込みする場合(zsh-deferも必要)
実行
Ctrl+Rで履歴検索
キーボードで文字を入力すると、履歴がリアルタイムで絞り込まれる
上下の矢印キーで候補を選択し、Enter キーでそのコマンドをプロンプトに挿入・実行
Ctrl+Cで終了
ripgrep(rg)
# 本体のインストール
brew install ripgrep
# sheldonでプラグインzsh-fzf-rgを追加
sheldon add zsh-fzf-rg --github ppcamp/zsh-fzf-rg
[plugins.zsh-fzf-rg]
github = "ppcamp/zsh-fzf-rg"
apply = ["defer"] # 遅延読み込みする場合(zsh-deferも必要)
[plugins.aliases]
inline = '''
# 隠しファイルも検索
alias rga='rg --hidden'
# ファイル名のみ表示
alias rgl='rg -l'
# マッチ数を表示
alias rgc='rg --count'
'''
実行
# grep検索
rg 文字列 ファイル名orディレクトリ名
jq
JSONデータを操作
インストール
# jq本体はjq-1.7.1-appleが最初から入っているのでインストール不要
# sheldonでプラグインjq-zsh-pluginを追加
sheldon add jq-zsh-plugin --github reegnz/jq-zsh-plugin
[plugins.jq-zsh-plugin]
github = "reegnz/jq-zsh-plugin"
apply = ["defer"] # 遅延読み込みする場合(zsh-deferも必要)
サンプルのJSON
{
"name": "Alice",
"age": 30,
"city": "Tokyo",
"items": [
{"id": 1, "name": "apple"},
{"id": 2, "name": "banana"}
]
}
実行
# 整形してそのまま出力
jq . data.json
# 整形してitemsだけ
jq .items data.json
# 整形してitemsの配列の最初だけ
jq '.items[0]' data.json
# items配下の値
jq '.items[]' data.json
# items配下の配列のキーidの値
jq '.items[]|.id' data.json
解凍
インストール
# sheldonでプラグインextract-pluginを追加
sheldon add extract-plugin --github thetic/extract
[plugins.extract-plugin]
github = "thetic/extract"
apply = ["defer"] # 遅延読み込みする場合(zsh-deferも必要)
解凍
extract ファイル名
mv
- ファイル(ディレクトリ名)の変更
- ファイル(ディレクトリ)の移動
[plugins.zmv]
inline = '''
autoload -Uz zmv
'''
# エイリアス設定の設定
[plugins.aliases]
# zmvを実行するとnoglob zmv -Wを実行する
alias zmv='noglob zmv -W'
mv/zmv | 詳細 |
---|---|
mvコマンド | 1つまたは複数のファイルを移動、1つのファイル名を変更 |
zmvコマンド | 標準のmvコマンドの「改良版」 複数のファイルの一括リネームが可能 |
実行
# すべての.txtファイルを.textに一括変更
zmv '(*).txt' '*.text'
# -nオプションで実行前に試すことができる(ドライランモード)
zmv -n '(*).txt' '*.text'
# 変更結果の表示
mv -- aaa.txt aaa.text
mv -- bbb.txt bbb.text
# 一括コピー
zmv -C '*.txt' '*.txt_copy'
# 一括コピー(ドライラン)
zmv -C -n '*.txt' '*.txt_copy'
bat(Cat clone with wings)
catの改善
インストール
# homebrewでインストール
brew install bat
# sheldonでプラグインzsh-batを追加
sheldon add zsh-bat --github fdellwing/zsh-bat
[plugins.zsh-bat]
github = "fdellwing/zsh-bat"
apply = ["defer"] # 遅延読み込みする場合(zsh-deferも必要)
実行
bat ファイル名
マニュアル
colored-man-pages
# sheldonでプラグインcolored-man-pagesを追加
sheldon add colored-man-pages --github ael-code/zsh-colored-man-pages
[plugins.colored-man-pages]
github = "ael-code/zsh-colored-man-pages"
apply = ["defer"] # 遅延読み込みする場合(zsh-deferも必要)
実行
man ls
man zsh
コマンド | 内容 |
---|---|
zsh | Zsh全体の概要 |
zshroadmap | マニュアルの非公式な入門 |
zshmisc | 他のセクションに収まらないあらゆる情報 |
zshexpn | Zshのコマンドとパラメータの展開 |
zshparam | Zshのパラメータ |
zshoptions | Zshのオプション |
zshbuiltins | Zshの組み込み関数 |
zshzle | Zshのコマンドライン編集 |
zshcompwid | Zshの補完ウィジェット |
zshcompsys | Zshの補完システム |
zshcompctl | Zshの補完制御 |
zshmodules | Zshのロード可能なモジュール |
zshtcpsys | Zshの組み込み TCP 関数 |
zshzftpsys | Zshの組み込み FTP クライアント |
zshcontrib | 追加のZsh 関数とユーティリティ |
zshall | 上記すべてを含む |
エイリアスが使えることを教えてくれる
ターミナルでコマンドを打った時に、aliasで効率化できる場合に表示
# sheldonでプラグインyou-should-useを追加
sheldon add you-should-use --github MichaelAquilina/zsh-you-should-use
[plugins.you-should-use]
github = "MichaelAquilina/zsh-you-should-use"
エイリアス設定
[plugins.aliases]
inline = '''
# ls コマンドを eza にエイリアス
alias ls='eza --icons --git --long --header'
# 長いリスト形式
alias ll='eza -l --icons --git --long --header'
# 隠しファイルを含む
alias la='eza -a --icons --git --long --header'
# -a (隠しファイル), -l (長い形式), -F (種類を示す記号)
alias l='eza -alF --icons --git --long --header'
# cat コマンドを bat にエイリアス
alias cat='bat --paging=never'
# du コマンドを dust にエイリアス
alias du='dust'
# Git ブランチ関連のエイリアス
alias gb='git branch'
alias gba='git branch -a'
alias gbd='git branch -d'
alias gbD='git branch -D'
# zmvを実行するとnoglob zmv -Wを実行する
alias zmv='noglob zmv -W'
# 追加エイリアス
# ディレクトリ操作
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias -- -='cd -'
alias md='mkdir -p'
# ファイル操作
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ln='ln -i'
# 検索・テキスト処理
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias rg='rg --color=auto'
# システム情報
alias df='df -h'
alias free='free -h'
alias top='htop'
alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"
# ネットワーク
alias myip='curl -s ipinfo.io/ip'
alias ports='netstat -tulanp'
# 履歴
alias history='history 1'
alias h='history'
# 安全な操作
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'
# タイムスタンプ付きls
alias lt='eza -lt --icons --git --long --header'
alias ltr='eza -ltr --icons --git --long --header'
# find改良版
alias fd='fd --color=auto'
# 圧縮・展開
alias targz='tar -czf'
alias tarxz='tar -cJf'
alias untargz='tar -xzf'
alias untarxz='tar -xJf'
'''
シンタックスハイライト
fast-syntax-highlighting
# sheldonでプラグインfast-syntax-highlightingを追加
sheldon add fast-syntax-highlighting --github zdharma/fast-syntax-highlighting
~/.config/sheldon/plugins.tomlの最後に読み込む
[plugins.fast-syntax-highlighting]
github = "zdharma/fast-syntax-highlighting"
ghostty
インストール
brew install --cask ghostty
設定ファイル作成
# フォルダ作成
mkdir -p ~/.config/ghostty/
# 設定項目とデフォルト値を確認
ghostty +show-config --default --docs
# ~/.config/ghostty/内にconfigファイルを作成
ghostty +show-config --default --docs > ~/.config/ghostty/config
各設定オプション
https://ghostty.org/docs/config
https://ghostty.org/docs/config/reference
利用可能なすべての設定オプションとそのデフォルト値の一覧表示
ghostty +show-config --default --docs
guiで設定
https://ghostty.zerebos.com/
色
ターミナルから直接カラーテーマのプレビューを表示できる
# themeのプレビュー
ghostty +list-themes
# テーマを指定
theme = "catppuccin-mocha"
フォント
Nerd Fontsに対応したフォントを使う
UDEVGothicNF-*.ttf https://github.com/yuru7/udev-gothic/releases/tag/v2.1.0 のUDEVGothic_NF_v2.1.0.zipの中
font-family = "UDEV Gothic NFLG"
font-size = 16
使用可能なフォントの確認
ghostty +list-fonts
カラーテーマの選択
theme = "catppuccin-mocha"
リガチャ無効化
font-feature = "-calt"
font-feature = "-dlig"
font-feature = "-liga"
背景
# ターミナルの背景の透明度
background-opacity = 0.85
# ターミナルの背景に適用するブラー(background-opacityを1未満にする必要あり)
background-blur-radius = 50
パディング
window-padding-x = 20
window-padding-y = 20
window-padding-balance = true
シェルの指定
shell-integration = "zsh"
クリップボード
# クリップボード読み取り許可
clipboard-read = allow
# クリップボード書き込み許可
clipboard-write = allow
# クリップボードにコピーされるテキストの末尾にある不要なスペースを削除
clipboard-trim-trailing-spaces = true
カーソル
# カーソルの形状("block"/"underline"/"beam")
cursor-style = "underline"
# カーソルの点滅
cursor-style-blink = true
# タイピング中にマウスカーソルを自動的に非表示
mouse-hide-while-typing = true
選択時
# 選択時自動コピー
copy-on-select = true
# 背景色選択時
selection-background = #537E7E
# 前景色選択時
selection-foreground = #0B5050
Windowの装飾
window-decoration = true
クイックターミナル
# global:はAccessibility権限が必要
# Command (⌘) キーと;キーでクイックターミナルを開く
keybind = global:super+semicolon=toggle_quick_terminal
Starship
インストール
brew install starship
sheldonの設定ファイルに追記
[plugins.starship-init]
inline = 'eval "$(starship init zsh)"'
starshipの設定ファイルの作成
# ~/.config/starship.tomlファイル作成
touch ~/.config/starship.toml
starship.tomlで設定するもの
- プロンプトの表示内容
- 各要素のスタイル(色、太字等)
- 表示順序
- 特定要素の有効/無効
設定項目
format
format = """
$username\
$hostname\
$directory\
$time\
$git_branch\
$git_status\
$battery\
$memory_usage\
$python\
$nodejs\
$character"""
directory (現在のディレクトリ)
[directory] # 現在のディレクトリ表示に関する設定
style = "bold cyan" # ディレクトリ名の文字スタイル
read_only = " " # 読み取り専用の場合に、ディレクトリ名の後に表示される記号
truncation_length = 4 # 現在のパスを短縮して表示する際の最大表示ディレクトリ数
truncate_to_repo = false # Gitリポジトリなどのルートディレクトリを基準に短縮するかどうか
format = "[$path]($style)[$read_only]($read_only_style) "
time (時刻)
[time]
disabled = false # 時刻を表示する(at 00:00:00の形で表示)
style = "dimmed green"
use_12hr = true # 12時間表示に設定 AM PMも表示されるようになる
format = "at [$time]($style) "
character (プロンプトの記号)
[character]
success_symbol = "[❯](bold green)" # 成功時の記号とスタイル
error_symbol = "[❯](bold red)" # 失敗時の記号とスタイル
Git
[git_branch]
symbol = " " # ブランチ名の前のシンボル
style = "bold purple" # ブランチ名のスタイル
format = "on [$symbol$branch]($style) "
always_show_remote = true # リモートブランチを常に表示するかどうか
[git_status]
conflicted = ""
ahead = ""
behind = ""
diverged = ""
up_to_date = ""
untracked = ""
stashed = ""
modified = ""
staged = ""
renamed = "襁"
deleted = ""
format = "[$all_status$stashed$modified$staged$renamed$deleted$untracked]($style) "
Battery (バッテリー表示)
[battery]
format = "[$symbol$percentage]($style) "
[[battery.display]] # 1つ目の表示設定
threshold = 10 # バッテリー残量が10%以下のとき
style = "bold red"
discharging_symbol = "" # 例:空っぽのバッテリーアイコン
[[battery.display]] # 2つ目の表示設定
threshold = 30 # バッテリー残量が30%以下のとき
style = "bold orange"
discharging_symbol = "" # 例:半分くらいのバッテリーアイコン
[[battery.display]] # 3つ目の表示設定
threshold = 70 # バッテリー残量が70%以下のとき
style = "bold yellow"
discharging_symbol = "" # 例:半分くらいのバッテリーアイコン
[[battery.display]] # 4つ目の表示設定
threshold = 100 # バッテリー残量が70%より大きいとき(例として100%まで)
style = "bold green"
discharging_symbol = "" # 例:満タンに近いバッテリーアイコン
Python
[python]
symbol = " " # (nf-dev-python)
style = "yellow bold"
format = "via [${symbol}${pyenv_prefix}(${version} )(${virtualenv} )]($style)"
Node.js
[nodejs]
symbol = " " # (nf-dev-nodejs_small)
style = "green bold"
format = "via [$symbol($version )]($style)"
Memory (メモリ使用量)
[memory_usage]
disabled = false # メモリの使用量を表示(19GiB/32GiBの形で表示)
threshold = 75
style = "bold dimmed green" # メモリ表示の文字を太字(bold)、薄暗い緑(dimmed green)にする
username (ユーザー名)
[username]
show_always = true #常に表示(デフォルトではSSH接続時のみ表示)
style_user = "bold yellow"
format = "[$user]($style) in "
hostname (ホスト名)
[hostname]
ssh_only = false # SSH接続時のみ表示するか(デフォルトではSSH接続時のみ表示)
style = "bold dimmed green" # ホスト名のスタイル
format = "[$ssh_symbol$hostname]($style) in "
CLIツール
ngrok
ローカル開発環境で実行されているWebサーバーを、インターネット上でアクセス可能にする
インストール
brew install --cask ngrok
インストール確認
ngrok -h
使用には https://ngrok.com/ でサインイン必要
ログインした画面に表示されている「2. Connect your account」の中に記載されているコマンドをコピーして実行
一時的なURLが出力されるのでアクセスする
unp
解凍
インストール
brew install unp
実行
unzip ファイル名
aria2
高速ダウンロード
インストール
brew install aria2
実行
# -x5の部分は同時接続数
aria2c -x5 'ファイルのURL'
httpie
HTTPクライアント
インストール
brew install httpie
実行
# 構文(METHODは省略するとgetになる)
http [METHOD] [URL] [ITEMS]
# GET リクエスト
http GET https://api.example.com/users/octocat
# POST リクエスト(JSON)
http POST https://example.com/post name=John age:=30
# ヘッダー付きリクエスト
http GET https://api.example.com/data Authorization:"username password"
# クエリパラメータ
http GET https://examle.com/get q==search page:=1
# ファイルアップロード
http --form POST https://example.org/post file@path/to/file.txt
# レスポンスをファイルに保存
http GET https://example.com/json > response.json
# ヘッダーのみ表示
http --headers GET https://example.com/get
# ボディのみ表示
http --body GET https://example.org/json
文字列 | 意味 |
---|---|
key=value | JSON文字列 |
key:=value | JSON数値・真偽値 |
key==value | クエリパラメータ |
Header:value | HTTPヘッダー |
gh
githubのcli
インストール
brew install gh
認証状態の情報を表示
gh auth status
リポジトリの一覧表示
gh repo list
ghq
ローカルリポジトリの管理
インストール
brew install ghq
# ~/ghq/github.com/ユーザー名/リポジトリ名にクローン
ghq get github.com/ユーザー名/リポジトリ名
場所を変更したい場合
```shell
git config --global ghq.root '~/src'
diff-so-fancy
gitのdiffを見やすくする
brew install diff-so-fancy
Git への設定
diff-so-fancy は、Git の pager として設定することで利用する
Git の設定ファイル (~/.gitconfig) に以下の内容を追加
# diff-so-fancyのページャー設定
[core]
# git diff等の出力をdiff-so-fancyで整形してからlessで表示
# --tabs=4: タブ幅を4文字に設定
# -R: カラーエスケープシーケンスを解釈
# -F: 1画面に収まる場合は自動で終了
# -X: 画面クリアを無効化(終了時に内容を残す)
pager = diff-so-fancy | less --tabs=4 -RFX
# インタラクティブモードでのdiff-so-fancy設定
[interactive]
# git add -p等のインタラクティブモードでもdiff-so-fancyを使用
# --patch: パッチモード用の出力形式
diffFilter = diff-so-fancy --patch
# diff-so-fancy固有の設定
[diff-so-fancy]
# 空行を明示的にマークして表示
markEmptyLines = true
# 変更ブロック(hunk)の境界線を変更
changeHunkIndicators = true
# 行頭の+/-記号を除去してクリーンに表示
stripLeadingSymbols = true
# ファイル名の区切り線にUnicode文字を使用
useUnicodeRuler = true
# diff-so-fancyで使用される色設定
[color]
# Git全体でカラー表示を有効化
ui = true
[color "diff-highlight"]
# 削除された行の通常表示色
oldNormal = red bold
# 削除された行の強調表示色(背景色52番)
oldHighlight = red bold 52
# 追加された行の通常表示色
newNormal = green bold
# 追加された行の強調表示色(背景色22番)
newHighlight = green bold 22
実行
git diff HEAD^
TUIツール
テキストユーザインタフェース(text user interface)
計測系
fastfetch
システム情報表示
インストール
brew install fastfetch
実行
fastfetch
oha
HTTPサーバーへの負荷テストなど
インストール
brew install oha
実行
oha https://www.google.co.jp/
# リクエスト数を指定(合計1000リクエストを送る)
oha -n 1000 https://example.com
# 同時リクエストを送る (50人が同時にアクセス)
oha -c 50 https://example.com
# 認証付きのAPIテストの場合
oha -H "Authorization: name token" https://example.com
# POSTリクエストでjson形式のデータを送る
oha -m POST -d '{"key":"value"}' -H "Content-Type: application/json" https://example.com
speedtest-cli
ネット速度テスト
インストール
brew install speedtest-cli
実行
speedtest-cli
gping
複数のホストに対してPingテストを実行
インストール
brew install gping
実行
gping google.com
Ctrl+cで終了
hyperfine
コマンドラインやスクリプトの実行時間を計測
インストール
brew install hyperfine
実行
hyperfine 'コマンド'
bandwhich
ネットワーク帯域幅の使用状況をリアルタイムで監視
インストール
brew install bandwhich
実行
# 管理者権限で実行が必須
sudo bandwhich
dust (Disk usage analyzer)
du コマンドの代替
ツリー表示でディスク使用量を分かりやすく表示
インストール
brew install dust
実行
dust
# du コマンドを dust にエイリアス
alias du='dust'
duf
ディスク容量ファイルシステム全体
インストール
brew install duf
実行
duf
ctop
Docker
インストール
brew install ctop
実行
ctop
btop
システムのリソース使用状況(CPU、メモリ、ディスクI/O、ネットワークなど)を監視
インストール
brew install btop
実行
btop
procs
プロセス表示
インストール
brew install procs
実行
procs
計測以外
lagydocker
コマンドライン上で操作できるDocker管理ツール
インストール
brew install lazydocker
実行
lazydocker
終了はCtrl+C
lazygit
Gitクライアント
インストール
brew install lazygit
実行
lazygit
終了はCtrl+C
yazi
ターミナル上でファイル操作
インストール
brew install yazi
実行
yazi
終了はCtrl+C