楽しく開発するための私のターミナル設定
CodexやClaude Codeなどの普及により、ターミナル環境に触れる時間が増えた方も多いのではないでしょうか。
私自身もともとターミナル環境が好きで、日常のなかで最も長く接している画面とも言えます。
普段使っているターミナルの画面
毎日使うターミナル環境だからこそ、もっと便利に、もっと楽しく使えるものになれば素敵だと思いませんか?
そんな気持ちで私のカスタマイズについて紹介していきます。
この記事が、ターミナル環境をすこし良くする一助になれば嬉しいです 🙏
前提
私の環境は以下の通りです。
- 仕事:Webエンジニア(フロントエンド)
- OS:macOS 15.6.1
- シェル:zsh
シェルのカスタマイズ
zshを使っています。
最近のmacOSを使っている方であれば、デフォルトのシェルはこれのはずです。
一般設定
最低限のものだけなので、折り畳みで置いておきます。
zshrc
# ベル無効
setopt no_beep
# 補完候補を方向キーで選択可能にする
zstyle ':completion:*:default' menu select=2
# 入力ミスを訂正
setopt correct
# 日本語ファイル名に対応
setopt print_eight_bit
# ディレクトリ末尾に/を自動付与
setopt auto_param_slash
# ファイル名の展開でディレクトリにマッチした場合 末尾に / を付加
setopt mark_dirs
# ファイルの種類を示すマークを表示
setopt list_types
# Tab連打で候補を切り替え
setopt auto_menu
# =以降も補完
setopt magic_equal_subst
# 入力途中でも補完
setopt complete_in_word
# ドット無しで隠しファイルをマッチ
setopt globdots
# 大文字・小文字を区別しない
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# Ctrl+Dでログアウトしない
setopt IGNORE_EOF
# zmv
autoload -Uz zmv
#
# 履歴
#
export HISTFILE=${HOME}/.zhistory
export HISTSIZE=1000
export SAVEHIST=2000
# スペースで始まるコマンドを除外
setopt hist_ignore_space
# 重複するコマンドを除外
setopt hist_ignore_dups
# ヒストリに同じコマンドがあるなら古い方を削除
setopt hist_ignore_all_dups
zshプラグイン
プラグインマネージャー
sheldonを使っています。
- コマンドで簡単にプラグインを追加できる
- 設定ファイルがTOMLなので、手動でも編集しやすい
のが良いところかなと思っています。
設定がzshrcに1行書くだけなのも、ごちゃごちゃしなくて好きです。
# これだけ
eval "$(sheldon source)"
見た目系
テーマ
カレントディレクトリとブランチのみの、シンプルなテーマを使っています。
そのままだと味気ないので、プロンプトがランダムな絵文字になるような設定を書いています。
() {
local emoji=('🐶' '🌴' '🐙' '🐱' '📦' '🍺' '🥗' '🥙' '🍿' '🥝' '🍤' '🍣' '🍛' '🌵')
# デフォルトのプロンプトを上書きする
MNML_USER_CHAR=$emoji[($RANDOM % $#emoji + 1)]
}
シンタックスハイライト
入力したコマンドを良い感じにハイライトしてくれます。
文字列内の変数などがパッと見で分かったりするので便利です。
補完系
履歴の自動補完
コマンドの履歴をインラインでサジェストしてくれます。
インクリメンタルにサジェストしてくれて、→
もしくは Enter
で確定できます。
「コマンドの出だしは手が覚えているけどオプションまで覚えてない」みたいなときにちょっと便利です。
コマンド補完
コマンドの入力補完を提供してくれます。
全部ではありませんが、オプションの補完も効くのが嬉しいです。
その他
略字展開
登録した単語を入力してスペースを打つと、展開してくれるプラグインです。
このように略字を設定すると
abbrev-alias g='git'
abbrev-alias brewu='brew upgrade && brew autoremove && brew cleanup -s'
こんな感じに展開されます。
略字の後にスペースを打つと展開されます
通常のaliasとの大きな違いは、入力時に展開されるという点です。
例えば通常のaliasだと
-
alias g='git'
でg status
を実行 → 履歴にはg status
として残る - 後から履歴を見たときに何のコマンドか分かりにくい
一方、abbrev-aliasだと
-
g<space>
でgit
に展開 → 履歴にはgit status
として残る - 実行前に展開されるので、長いコマンドも内容を確認してから実行できる
というところが利点だと感じています。
コマンドを誰かに共有するときも便利ですね。
ni
Node.jsのパッケージマネージャー間のコマンドの差異を吸収してくれるコマンドです。
npm/pnpm/yarn/bunどれを使っていたとしても ni add <パッケージ名>
のように扱うことができます。
色んなプロジェクトを横断的に触ることが多いので、大変重宝しています。
SocketのAPIを使って、インストール前に安全かどうかチェックする機能があったりするのも嬉しいポイントです。
エイリアス
Git系
1〜3文字という少し強めのエイリアスなので、前述した abbrev-alias で略字として設定しています。 が、補完がかなり効く環境なので、正直 g
以外は使っていない気がします…。
abbrev-alias g='git'
abbrev-alias ga='git add'
abbrev-alias gd='GIT_EXTERNAL_DIFF=difft git diff'
abbrev-alias gs='git status'
abbrev-alias gp='git push'
abbrev-alias gpu='git pull'
abbrev-alias gb='git branch'
abbrev-alias gc='git commit'
abbrev-alias gf='git fetch'
abbrev-alias gsw='git switch'
# マージ済のブランチをまとめて消す
alias g-delete-merged-branches='git branch --merged | grep -v "*" | grep -v "^+" | xargs git branch -d'
difft
というCLIツールをdiffの表示に使っているので、gd
だけコマンドが少し長くなっています。
行単位ではなく、文字単位で出力されるので分かりやすいです。
ls系
abbrev-alias l='eza -la'
abbrev-alias la='eza -a'
abbrev-alias lt='eza -T'
eza
という ls
の代替ツールを使っています。
場合によっては普通の ls
を使いたい場面もあるので、エイリアスで上書きしないようにしています。
その他
# homebrewの更新・削除・クリーンアップをまとめて行なう
abbrev-alias brewu='brew upgrade && brew autoremove && brew cleanup -s'
# エディタ
abbrev-alias v="nvim"
# Neovimをビルドする
abbrev-alias nvim-rebuild='make distclean && make CMAKE_BUILD_TYPE=Release CMAKE_INSTALL_PREFIX=$HOME/.local/nvim && make install'
# ファイルのリネーム用
abbrev-alias zmv='noglob zmv -W'
# cls
abbrev-alias cls='clear'
# dotfilesのディレクトリへ移動
abbrev-alias dot='cd ~/dotfiles'
# 天気予報
alias wttr='(){ curl -H "Accept-Language: ${LANG%_*}" --compressed "wttr.in/${1:-Tokyo}" }'
よく行なう操作をメインに設定しています。
wttr <場所>
で天気を見られるようにしていたりします。おすすめです。
なんか良い
便利関数
1Passwordで.envを管理
可能な限り、.env に直接認証情報を置かずに 1Password の シークレット参照 を利用するようにしています。
を参考に、以下のような関数を作成しました。
opr () {
if [[ -f "$PWD/.env" ]]; then
env_file="$PWD/.env"
elif [[ -f "$PWD/.env.local" ]]; then
env_file="$PWD/.env.local"
else
echo ".envまたは.env.localがありません"
return 1
fi
who=$(op whoami)
if [[ $? != 0 ]]; then
eval $(op signin)
fi
op run --env-file="$env_file" -- "$@"
}
opr npm run dev
のように、後に続けて実行したいコマンドを渡して使います。
リポジトリ間の移動
ghqで管理しているリポジトリを絞り込んで、そこに移動する関数です。
絞り込みにはfzf(ファジーファインダーツール)を使っています。
頻繁に呼びだすので Ctrl+F
にバインドしています。
function ghq-fzf() {
local dir=$(ghq list -p | fzf)
if [ -n "$dir" ]; then
BUFFER="cd ${dir}"
zle accept-line
fi
zle clear-screen
}
zle -N ghq-fzf
# Ctrl+fにバインド
bindkey "^f" ghq-fzf
また、コマンドラインの文字列を編集するために zsh の ZLE という機能を利用しています。(zle 〜
の部分)
ZLEに関しては以下の記事が分かりやすく説明されていましたので、興味のある方は是非合わせてご参照ください。
履歴検索
先程の履歴検索版です。 こちらは Ctrl+H
にバインドしています。
function select-history() {
BUFFER=$(history -n -r 1 | fzf --no-sort +m)
zle clear-screen
}
zle -N select-history
bindkey "^h" select-history
ターミナルエミュレータ
ずっとWezTermを使っていましたが、最近Ghosttyに乗り換えました。
👻のキャラクターがかわいいです。
設定したキーを押せばどこでも一時的なターミナルを呼び出せる Quick Terminal という機能がユニークです。
表示位置は変更可能
フォント
PlemolJPという等幅フォントを使っています。
全角スペースが見えることはもちろん、独特のイタリック体が特に好きです。
日本語部分がはっきりとした形をしているので、目が滑りにくい気がしています。
GitHubのREADMEより
カラーテーマ
エディタ(Neovim)で使っているテーマと同じ色を設定しています。
お気に入りのテーマカラーにしておくと若干モチベもあがるような気がします…。
Ghosttyだとこのように設定できます。
設定例
# Colors - Minai Color Scheme
background = #232934
foreground = #E8E2D6
# Cursor
cursor-color = #E8E2D6
cursor-text = #232934
# Selection
selection-background = #DFC2BA
selection-foreground = #232935
# 256 Color Palette (ANSI colors)
# Standard colors (0-7)
palette = 0=#262626
palette = 1=#c66471
palette = 2=#bbcacb
palette = 3=#d4af8d
palette = 4=#7ea1b6
palette = 5=#9b8ea8
palette = 6=#85a3a1
palette = 7=#b3b8c2
# Bright colors (8-15)
palette = 8=#818181
palette = 9=#D46A74
palette = 10=#CED9D9
palette = 11=#E0BF9D
palette = 12=#82ACC2
palette = 13=#ABA1B5
palette = 14=#99B0B0
palette = 15=#BAC4CF
さいごに
今回紹介した設定の全体はこちらにあります。
では、素敵なターミナルライフを!👩💻

ちょっと株式会社(chot-inc.com)のエンジニアブログです。 フロントエンドエンジニア募集中! カジュアル面接申し込みはこちらから chot-inc.com/recruit/iuj62owig
Discussion