目次
2026 年 3 月、Zenn で**「爆速 CLI 入門」**が公開された。
怠惰はプログラマの美徳である。
CLI はそんな怠惰人間を支えてくれる最強の相棒だ。
キーボードだけで操作し、自動化を積み重ねていく。
そんな世界へ踏み込もうとすると、最初の一歩で壁にぶつかる。
本を開けば呪文のようなコマンドオプションが並び、由来もわからない。
man や help があると言われても英語がつらい。
何から手をつければいいのかわからない。
本稿は、zsh で最初に知りたかった CLI の Tips を 7 つ紹介する。
1. 自分の使っているシェルを確認しよう
現在使用しているシェルは以下の環境変数から確認できる。
| 環境変数 | 内容 |
|---|---|
| $SHELL | ログインシェルの設定(標準で設定しているシェル) |
| $0 | 現在動いてるシェル または 実行中スクリプト名 |
# 現在のシェルを確認
echo $0
# ログインシェルを確認
echo $SHELL
シェルの変更
シェルを zsh に変更したい場合は以下のコマンドで変更できる。
# 今のセッションだけ zsh にする
zsh
# デフォルトで zsh を使うようにする
chsh -s /bin/zsh
トラブルシューティング
CLI ツールのアップデート時に、普段使用しているコマンドが使えなくなったことがある。
こういった場合に、echo $0 と echo $SHELL を確認してみると自分のシェルの状態を確認できる。
# トラブル時の状態
# 標準で使用するシェルは zsh
$ echo $SHELL
/bin/zsh
# なのに実際に起動しているシェルは bash
$ echo $0
bash
この結果から、本来 zsh で起動するはずが、実際には bash が起動してしまっていることがわかる。
そのため、zsh の設定ファイルが読み込まれずコマンドが使えなくなっていたのだ。
2. キーバインド → bindkey を打て
ぜひ最初に把握しておいてほしい物がある。それはキーバインドだ。
どのツールを使う上でも必ずキーバインドを抑えておくのが上達のコツである。
事前に取りのぞける「めんどう」は取りのぞいておこう。
もちろん全てを覚える必要はない。よく使うものから覚えていけばよい。
キーバインドの確認
キーバインドは bindkey コマンドで確認できる。
そう、デフォルトでキーバインドのチートシートが用意されているのだ。
# キーバインド一覧の表示
bindkey
実行すると以下のような内容が表示されるはずだ。
左側にキーバインド、右側にその動作が表示されている。
^ は Control キーを表している。
bindkey
# 出力例
# "^A"-"^C" self-insert
# "^D" list-choices
# "^E"-"^F" self-insert
# "^G" list-expand
# "^H" vi-backward-delete-char
# <省略>
キーバインドの数を数える
wc (word count) コマンドを使ってキーバインドの数を数えてみよう。
-l オプションは --lines の略で、改行を数えるオプションである。
# キーバインドの数を数える
bindkey | wc -l
# 出力結果
31
「31 個も覚えられない!」と思ったかもしれない。
安心してほしい。これは重複したキーバインドも含まれている。
重複を除くならこうする。
# 重複を除外してキーバインドの数を数える
bindkey | awk '{print $2}' | sort | uniq | wc -l
# 出力結果
17
重複を除くと 17 個まで減った。
案外覚えられそうな数ではないだろうか?
コマンドの分解
長いコマンドがでてきたら | (パイプ) ごとに実行してみると理解しやすい。
まず、bindkey コマンドだけを実行してみる。
bindkey
# 出力結果
# "^A"-"^C" self-insert
# "^D" list-choices
# ...
そして、次に awk '{print $2}' をつなげてみる。
出力を比べてみると、1 列目のキーバインドの表記が消え、2 列目のみ表示されている。
ここで、awk '{print $2}' が「2 列目を取り出す」という意味であることがわかる。
bindkey | awk '{print $2}'
# 出力結果
# self-insert
# list-choices
# ...
次に sort をつなげてみる。
出力結果を見ると、重複したものがまとめられていることがわかる。
bindkey | awk '{print $2}' | sort
# 出力結果
# accept-line
# accept-line
# bracketed-paste
# clear-screen
# down-line-or-history
# down-line-or-history
# ...
uniq をつなげてみると、重複が取り除かれていることがわかる。
bindkey | awk '{print $2}' | sort | uniq
# 出力結果
# accept-line
# bracketed-paste
# clear-screen
# down-line-or-history
# ...
最後に wc -l をつなげてみると、先ほどの出力結果の行数が数えられていることがわかる。
bindkey | awk '{print $2}' | sort | uniq | wc -l
このように、長いコマンドはパイプごとに分解してみると案外理解できるものだ。
コマンドに慣れるには分解して試してみるのが一番である。
3. キーバインドのモード
実はシェルのキーバインドにはvim モードとemacs モードがある。
現在のキーバインドモードを確認するには以下のコマンドを実行しよう。
# キーバインドモードの確認
bindkey -lL main
# 出力例
# vim モードの場合
# bindkey -A viins main
# emacs モードの場合
# bindkey -A emacs main
たいていの環境では emacs モードがデフォルトになっているため、emacs モードに変更することをオススメする。
# emacs モードに変更
bindkey -e
これは余談だが、emacs モードの方がキーバインドの数が多い。
bindkey | awk '{print $2}' | sort | uniq | wc -l
# 69
設定の永続化
この設定を今回のセッションだけではなく、永続化したい場合は zsh の設定ファイル(~/.zshrcなど)に追記しよう。
~/.zshrc
bindkey -e
また、設定ファイルを更新したら以下のコマンドで再読み込みしよう。
# 設定を読み直すために、ログインシェルとして起動しなおす
exec $SHELL -l
4. おすすめキーバインド(初級)
まずはここから。
| キーバインド | 機能 | 説明 |
|---|---|---|
^F |
forward-char | 1 文字右へ移動 |
^B |
backward-char | 1 文字左へ移動 |
^P |
up-line-or-history | ひとつ前の履歴を呼び出す(↑) |
^N |
down-line-or-history | ひとつ次の履歴(↓) |
^A |
beginning-of-line | 行頭へ移動 |
^E |
end-of-line | 行末へ移動 |
^D |
delete-char-or-list | カーソル位置の文字を削除 何も無い行で押すとシェル終了 |
^K |
kill-line | カーソル以降を削除 |
^Y |
yank | ^K や ^W などで消したものを貼り付け |
^T |
transpose-chars | 隣り合う 2 文字を入れ替える(typo 直しに便利) |
^H |
backward-delete-char | バックスペース |
^W |
backward-kill-word | 1 単語削除 |
^U |
kill-whole-line | 行全削除 |
^L |
clear-screen | 画面クリア(clear コマンドと同じ) |
5. おすすめキーバインド(中級)
意外と知られていないのに便利なやつ。
| キーバインド | 機能 | 説明 |
|---|---|---|
^Q |
push-line | 今入力している行を一時退避。別のコマンドを打って戻りたい時に便利 |
^_ |
undo | 編集の取り消し |
^[f |
forward-word | 単語単位で右へ移動(Meta キー) |
^[b |
backward-word | 単語単位で左へ移動(Meta キー) |
^[q |
push-line | 行退避。^Q がターミナル側で使われている環境向け |
^[. |
insert-last-word | 直前のコマンドの「最後の引数」を挿入 連打でさらに遡れる |
^[H |
run-help | 現在入力中のコマンドのヘルプを開く(zsh 固有) |
^[? |
which-command | カーソル位置の単語がどのコマンドかを表示(zsh 固有) |
run-help をより便利にする設定
初期状態だと、run-help は man コマンドのエイリアスになっているだけで、zsh 固有のヘルプ機能が使えない。
# run-help の実態を確認
type run-help
# run-help is an alias for man
zsh 固有のヘルプ機能を使うには、以下の設定を追加しよう。
~/.zshrc
unalias run-help 2>/dev/null
autoload -Uz run-help
設定すると、run-help の実態が関数になっていることが確認できる。
type run-help
# run-help is a shell function from /usr/share/zsh/5.9/functions/run-help
この設定により、functions コマンドのような、man では見つからない zsh 固有のコマンドのヘルプも開けるようになる。
# man で開こうとしてもマニュアルが見つからない
man functions
# No manual entry for functions
コマンドを入力して ESC→H (run-help) を実行すると、マニュアルが見つかる。
6. 使えるコマンドを増やしたい → tlrc で要約チェック
使えるコマンドを増やしたい、でも何をどこまで抑えておくべきかわからない。
そんな時に便利なのが tldrコマンドである。
実用的な使用例に焦点を当てた、より簡潔なヘルプを確認することができる。
インストールは Homebrew で簡単にできる。
# tlrc をインストール
brew install tlrc
例えば、wc コマンドの使い方を知りたいときは以下のように実行する。
# tldr で wc の使い方を確認
tldr wc
実行するとコマンドの使い方の要約が確認できる。
7. オプションが覚えられない → help と man は最高の情報源
オプションといえば、ls -laでいう-laの部分である。
そう、あのパっとみて何かわからないやつのことである。
オプションは何の略か確認すると頭に入りやすい。
そんな時に使えるのが --help と man である。
例えば、tldr のコマンドオプションを確認したいときは以下のように実行する。
tldr --help
# Options:
# -u, --update Update the cache
# -l, --list List all pages in the current platform
# -a, --list-all List all pages
出力を見ると、-u は --update の略であることがわかる。
また、manコマンドでより詳しい情報を確認することもできる。
man tldr
このように --help と man はコマンドの使い方を知る上で最高の情報源である。
しかし、英語が苦手な人にとっては読むのがつらい。
そんな人にオススメの対処方法がPLaMo 翻訳である。
ブラウザの拡張機能と CLI ツールの両方が提供されている。
PLaMo 翻訳のブラウザ拡張機能
拡張機能版はサブスク形式で提供されているが、無料で試せる Free プランも用意されている。
ページのレイアウトを崩さずに翻訳できる上に、ショートカットキーひとつで実行できる手軽さが魅力である。
結論:CLI は最強の相棒
CLI は怠惰なプログラマを支えてくれる最強の相棒だ。
- シェル確認 -
echo $0,echo $SHELL - キーバインド -
bindkeyで確認、17 個の重複を除いたキーバインド - モード設定 -
bindkey -eで emacs モードに - 時短コマンド -
tldr,--help,man
これらの Tips を知ることで、キーボード操作の効率が劇的に向上する。
参考:
引用元・参考リンク
免責事項 — 掲載情報は執筆時点のものです。料金・機能は変更される場合があります。最新情報は各公式サイトをご確認ください。