それゆけ!ターミナル部 第4回エイリアスで時短生活を始めよう!
skill

それゆけ!ターミナル部 第4回
エイリアスで時短生活を始めよう!

2016.11.29

みなさんこんにちは。ターミナル部 部長のタナカトモフミです。

本連載では意外と見落としがちな基本的な事柄からちょっとマニアックなテクニックまで、ターミナルを使いこなすための方法を若手エンジニアのタミ夫くんとシェルスキー先生と一緒に学んでいきます。

今回はシェルの展開について学びます。うまく活用すればファイルの操作などをまとめて行うことができるようになるので、是非マスターしてください!

タナカトモフミ

ショートカットに続きシェルの展開も
マスターしたはずのタミ夫くんですが、
相変わらずキーボードを連打しているようです。

カタカタカタカタカタカッターン!
カタカタカタカタカタカッターン!カチャパーン!

えー。。。また連打マンに戻ってしまったようじゃな。

いやいや、ちゃんと使いこなしてるんで!作業妨害やめてもらえます?

わしもそろそろ静かな暮らしがしたいんじゃ。一体何をしているんじゃ?

普通に git のコマンドとか色々叩いてただけっスよ。同じようなのを打つ頻度が多いだけっス。

もしかしてエイリアスとか設定してもらえば、もうちょい静かにしてもらえるのかのう。

この展開。。。さては何か知ってる顔っスね?
もったいぶらないで早く教えてくださいよー。

エイリアスを設定してみよう

シェルが提供するエイリアス(alias) は、その名の通りコマンドに別の名前をつけて使えるようにする機能です。alias コマンドで設定することができます。alias コマンドの書式は alias 別名=コマンド です。

例えば、ls というコマンドを l という名前で実行できるようにしたい場合は、以下のように実行します。

$ alias l=ls

これで、ls コマンドを l で実行できるようになりました。さらに、コマンドのオプションを含めることもできます。

# 空白が入る場合は '' や "" で囲む必要がある点に注意
$ alias l='ls -G'

良く使われる例として、lsコマンドでは la や ll といった定番のエイリアスがあります。

# 隠しファイル表示オプション
$ alias la='ls -a'

# 詳細表示オプション
$ alias ll='ls -l'

今回はオプション指定が少ない例を紹介しましたが、細かいオプションは人によって様々です。自分好みの設定にするのが良いでしょう。

また、同名のコマンドを上書きする設定もできるので、デフォルトのオプションを設定するのに使われることもあります。

# ls コマンドを -G オプション付きにして使う
$ alias ls='ls -G'

上書きできるからといって、やりすぎると問題になることも多々あります。個人の開発マシンでは良いですが、共有のサーバーに変なエイリアスを設定するのはやめましょう。

# 良くない例
$ alias vim='emacs'
$ alias emacs='vim'

aliasには、パイプを使ったエイリアスも設定できます。 findやgrepと併用されることが多いです。

# カレントディレクトリ以下のディレクトリの一覧から、指定された文字にマッチする行だけを表示する。マッチした部分は色付きにする。
$ alias fd='find . -type d | grep --color'

$ mkdir -p src/{main,test}/{scala,java}/com/example
$ fd example
./src/main/java/com/example
./src/main/scala/com/example
./src/test/java/com/example
./src/test/scala/com/example

最後に、alias を解除したい場合と alias なしのコマンドを実行したい場合の方法を説明します。

# 現在のaliasの一覧を表示
$ alias
alias ls='ls -G'
alias la='ls -a'

# unalias コマンドで aliasの設定を解除する
$ unalias la

# 解除されたことを確認する
$ alias
alias ls='ls -G'

# alias ではなく元の ls を実行したい場合
# バックスラッシュをコマンドの前につける
$ \ls

設定ファイルに書いておこう

alias コマンドで設定したエイリアスは、シェルを終了すると消えてしまいます。シェルの起動時にエイリアスが設定されるように、設定ファイルに書いておいて、毎回使えるようにしましょう。

通常は、~/.bashrcというファイルにエイリアスを書いておきます。ここでは、~/.bash_profileというファイルに以下の記述を行い、alias は~/.bashrc に記載します。

# bash_profile を以下の内容にお好みのテキストエディタで設定する
$ cat ~/.bash_profile
# すでに ~/.bash_profile というファイルが存在する場合は、最終行に追記してください。
if [ -f ~/.bashrc ]; then
 . ~/.bashrc
fi

次に、~/.bashrc ファイルにエイリアスを設定しましょう。

# お好みのエディタで開いてエイリアスを記述しましょう
$ cat ~/.bashrc
alias l='ls -G'

設定を記述しただけでは、現在のシェルには反映されません。新しいシェルを立ち上げれば確認できますが、設定を試している段階では、現在のシェルに設定を取り込んで確認すると良いでしょう。

# 現在設定されている alias の一覧を見る
$ alias

# 設定を読み込みなおす
$ source ~/.bashrc

# 設定ファイルのエイリアスが有効になったことを確認する
$ alias
alias l='ls -G'

定番のエイリアスを設定しよう

lsコマンドに定番エイリアスがあったように、世の中には便利なエイリアスを公開していたり、まとめていたりするWebサイトやOSSがたくさんあります。自分が使いたいと思う素敵なエイリアスを探してきて、自分好みのエイリアス集を作ると良いでしょう。

OSSでは、Bash-it というソフトウェアがGitHubで公開されていますので、サイトから参考になるaliasを探して、参考にすると良いでしょう。
https://github.com/Bash-it/bash-it/tree/master/aliases/available

ここでは定番のaliasをいくつか紹介します。

rm/mv/cp の定番

# 確認(confirmation) を付ける
alias rm='rm -i'
alias mv='mv -i'
alias cp='cp -i'

ls の定番

# 定番のtypoに備える。おじさんのマシンで実行すると機関車のSLが走ることもある。
alias sl=ls
# カラー表示
if [ $(uname) = "Linux" ]; then
 # LinuxとMacでオプションが違うので切り替える
 alias ls='ls --color=auto'
else
 alias ls='ls -G'
fi

cd 系の定番

# .. で1つ上の階層のディレクトリに移動する
alias ..='cd ..'

grep系の定番

# カラー表示オプションをつける
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'

git の定番

# g を git にする
alias g='git'
# gb で git branch
alias gb='git branch'
# gc で git commit
alias gc='git commit -v'
# gc! で amend オプション付きの commit
alias 'gc!'='git commit -v --amend'
# gf で git fetch
alias gf='git fetch'
# gst で git status
alias gst='git status'
# glg で git log
glg='git log --stat --color'
# glgg で graphオプション付きの git log
glgg='git log --graph --color'

git のエイリアスも設定しよう

シェルが提供するエイリアス機能以外に、git自体がエイリアスの機能を持っています。これを使用することでgitのサブコマンドにエイリアスを設定することができます。

# status コマンドを st で実行できるようになる
$ git config --global alias.st status
$ git st

git config を --global オプション付きで実行することでホームディレクトリの .gitconfig に設定が反映されます。.gitconfig ファイルを直接編集することで設定することもできます。

$ cat ~/.gitconfig
[alias]
 st = status

シェルのaliasと同様に、オプションを指定することもできます。

$ cat ~/.gitconfig
[alias]
 st = status -sb

以下のように commitを ci に、checkoutを coにする人も多いです。

$ cat ~/.gitconfig
[alias]
 st = status -sb
 ci = commit -v
 co = checkout

まとめ

数日後

やばいっス!aliasを設定しすぎて、すでに思い出せない!

それは完全にアンチパターンじゃな。

あと、人のマシンとかサーバーとかに入ると、aliasないから Command not found 出まくり。

それも完全にアンチパターンじゃな。

でも、gとかlとか1文字でできちゃうの快感。

それは完全に病気じゃな。(ふふふ。。。調教が効いてきたようじゃな。。。)

エイリアスは自分好みの設定をした環境に慣れすぎると、共有のサーバーなどで作業する際に本来のコマンドやオプションがわからず、かえって作業効率が落ちてしまう可能性もあります。適切な用法・用量で使用するようにしましょう。次回はワンライナーのテクニックを紹介します。お楽しみに!

原稿: 株式会社ビズリーチ ターミナル部部長 タナカトモフミ
株式会社ビズリーチ所属。ScalaコードをVimで書く日々をおくる。たまにうっかりIntellij IDEAに浮気してしまう。社内のVim部とEmacs部を和解させ、ターミナル部に統合することに成功したが、社内はEclipse, Intellij IDEA, Sublime Text, Atomが主流のため、戦いは続く。
https://twitter.com/tanacasino

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW