Edited at

aliasと関数で幸せになろう


はじめに

みなさんターミナル使ってますか?

エンジニアになると真っ黒な画面でマトリックスみたいに、コマンドをカタカタ打ってハッカーっぽい行為を毎日のようにするかと思います。

特に、プログラミング初心者の人は教材やスクールで「ターミナル開いて」って言われると、「またかよ、何が悲しくて真っ黒い画面と話さなくちゃなんないんだよ」って気持ちになる人も多いと思います。

僕もそうでした

しかしながら、ターミナルでの操作はめちゃくちゃ便利だし、sshとかでリモートサーバーに接続した際は必須のスキルになるので、せめて、aliasや関数を登録してコマンド入力を楽にしましょう

キズナアイのような対話型AIが実装されるその日まで、alaisと関数を使って快適なターミナルライフを実現しましょう。

因みに、オススメの設定は aliasと関数で幸せになろう(実践編) にまとめました。是非使ってみてください。


そもそもなんやねん?

そもそもaliasと関数てなんなのっていう説明と使い方をざっくり説明します。

因みに、これから参照してるコマンド例は全てターミナル上で実行してるので、ターミナルを事前に立ち上げてコマンドを打って動作を確認してみてくださいね。


alias

実はaliasもコマンドです。

aliasコマンドはコマンドを別名で登録または、登録されている内容を確認するLinuxコマンドのことです。

例えば、下記のように使えます。

% hoge

zsh: command not found: hoge
% alias hoge='echo "This is alias hoge"'
% hoge
This is alias hoge
%

順番に説明すると



  • hogeと打ってもhoge なんてコマンドはないぜ!って怒られる

  • aliasコマンドを使ってhogeを登録


  • hogeがコマンドのように使えるようになる

要するにaliasはショートカットみたいなものです。

alias <ショートカット名>='<実行したいコマンド>' で登録できます。


関数

bash関数とかとも言われたりします。

その名の通りシェルスクリプトで書かれた関数のことです。

例えば、下記のように使えます。

% hoge

zsh: command not found: hoge
% hoge() {
function> echo "This is function hoge"
function> }
% hoge
This is function hoge
%

順番に説明すると



  • hogeと打ってもhoge なんてコマンドはないぜ!って怒られる


  • hogeという名前の関数を定義する


  • hogeを呼び出せるようになる

はい、このように使い方や機能はaliasと似たようなものです。

では、どのような点が違うのかを次の項目で説明します。


aliasと関数の使い分け

aliasと関数の使い方について分かったところで、じゃあ、どのようにして使い分けるのかを簡単に説明します。

ただ、明確にこうであるべきって事はないですし、あくまで個人用なのでお好きな方を使う感じで大丈夫ですよ。


aliasを使うべき時

aliasを使うときは主に単純な処理コマンドの上書きをする時です。

例えば環境変数に設定されてるPATHを観たい時とかは単純なコマンドですみますよね。

% path

zsh: command not found: path
% alias path='echo $PATH'
% path
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

コマンドの上書きをする場合です。

% ls

Applications Desktop
% alias ls='ls -l'
% ls
total 324
drwx------@ 3 me staff 96 3 13 2018 Applications
drwx------+ 7 me staff 224 9 7 17:45 Desktop

個人的には既存のコマンドを破壊的に変える後者のaliasの使い方はあまり好きじゃないので、前者の使い方がほとんどです。


関数を使うべき時

対して関数を使うときは主に複雑な処理引数を使う処理をする時です。

特に、aliasは引数を使う事はできないので、引数を使うのであれば関数一択です。

複雑な処理だとアバウトな言い方ですが、個人的には1行以上であれば関数にするべきだと思います。

引数を使う処理とは下記のような処理のことです。なお、シェルスクリプトの細かい書き方については割愛します。半端ないボリュームになるので。。。

% hoge() {

function> case $1 in
function case> "s") echo "You choose s" ;;
function case> "m") echo "You choose m" ;;
function case> *) echo "You are normal" ;;
function case> esac
function> }
% hoge s
You choose s

簡単に説明すると、$1には関数に渡した引数が格納されています。今回だとsですね。この第一引数で与えられたパラメータに応じてCASE式で実行処理を分けてます。

なんとなく予想できたかと思いますが、引数を使える関数の機能がかなり便利なので、よく使う一連の処理を関数で定義しておくと、ターミナル操作が格段に楽になります


実際の使い方

さてさて、aliasと関数について単体での使い方について説明してきましたが、いちいちターミナルを起動した時にaliasを登録したり、関数を定義したりするのは現実的じゃないですよね。

そこで、こういった処理はホームディレクトリ直下の.bashrc.zshrcに書いちゃいましょう。

そうすればターミナル起動したら自動で読み込んで使えるようにしてくれます

ただし、既にログイン済みで.bashrcを書き換えた場合は、必ずsource ~/.bashrcを実行して読み込んでください。そうしないと追加したaliasなどが反映されません。


書き方

.bashrcなどに直接書けば大丈夫です。こんな感じで。

%cat ~/.bashrc

# alias
alias ll='ls -al'
alias d='docker'
alias dc='docker-compose'

# function
ssk() {
if [ -e ~/tmp/sshuttle.pid ]; then
echo "kill sshuttle.pid"
kill `cat ~/tmp/sshuttle.pid`
fi
}

gre() {
grep -E $1 -rl $2
}


どのファイルに書けばいい?

実はこのようなファイルって地味に多くてどのファイルに書けばいいか分からないと思います。

ざっくり下記のような使い分けがされているので参考にしてみてください。

因みに、使ってるシェルの種類によって微妙に違うのでecho $SHELLを実行して自分が使ってるシェルを事前に確認しておいてください。

私の場合はzshを使ってるので以下の出力になります。

% echo $SHELL

/bin/zsh


bashの場合

いくつかファイルがありますが、ざっくりと以下のように使い分けられています。

結論から言うと~/.bashrcに記述すれば良いです。



  • ~/.bash_profile : シェルへのログイン時に存在していれば読込まれる設定ファイル。ログイン時に一度実行されれば良い処理を書くので、環境変数を定義するexport処理とかを記述。


  • ~/.bashrc : シェルを起動するたびに読み込まれる設定ファイル。基本的にはこのファイルに書けばいい。


  • ~/.bash_logout : シェルからのログアウト時に毎回読込まれる設定ファイル。ログアウトする時に実行したい処理はこちらに記述する。


zshの場合

ファイル名以外は殆どbashと同じなので書く意味ないかも。

結論から言うと~/.zshrcに記述すれば良いです。



  • ~/.zprofile : シェルへのログイン時に存在していれば読込まれる設定ファイル。ログイン時に一度実行されれば良い処理を書くので、環境変数を定義するexport処理とかを記述。


  • ~/.zshrc : シェルを起動するたびに読み込まれる設定ファイル。基本的にはこのファイルに書けばいい。


  • ~/.zlogout : シェルからのログアウト時に毎回読込まれる設定ファイル。ログアウトする時に実行したい処理はこちらに記述する。


オススメの設定

aliasと関数で幸せになろう(実践編) でまとめました。

個人的に有用だと思う設定をまとめてGistに挙げておいたので、コピって使ってみてください。


まとめ

いかがだったでしょうか?

今まで苦手だったターミナルで、ゴニョゴニョ遊んでみたくなってきたかと思います。

最初は面倒臭いしわけ分からないですが、とにかくコマンドを打ったりこういった便利な機能を試していくことで、必ず使いこなせるようになってきます。

全ては自分が楽をするためと思って、あなたの考える最強の.bashrcを完成させてください。