はじめに
みなさんLinuxコマンド使ってますか?
自分は今までcd
や、rm
などしか使っていませんでした。
最近パイプライン、xargsなどの存在を知り、その便利さに感銘を受けたので、紹介したいと思います!
全くLinuxコマンド使ってないよ!って人の一助になれば幸いです。
パイプラインとは
パイプとはコマンドの実行結果を,次のコマンドの入力として扱えるようにするシェルの機能である。パイプを利用するには,「|」という記号を用いる
以下のようなことが実現できます。
$ ls | grep Gemfile
Gemfile
Gemfile.lock
xargsとは
xargsは標準入力から一覧を受け取って、それを引数に任意のコマンドを実行するコマンド。
以下の章で実際の使い方を見ていきましょう。
何ができるようになるのか
Linuxコマンドは他のgitコマンドなどと組み合わせることで、強力な力を発揮します。
例えば、gitコマンドを用いて、次のcommitで反映されるファイルだけ対象に、rubocopを実行する、なんてことが可能になります。
git diff --cached --name-only --diff-filter=AM | grep '\.rb$' | xargs rubocop
またGitフックを用いると、このようなコマンドをコミットの前に自動で実行することができます。Gitフックを使っておかしいRubyコードをコミットできないようにする
これを応用すると変更したspecファイルだけ実行したい時は以下のようにします。
git diff --cached --name-only --diff-filter=AM | grep 'spec' | xargs bundle exec rspec
gitでマージ済みのローカルブランチを削除する時は以下のようにします。
git branch --merged | grep -v '*' | xargs -I % git branch -d %
注: xargsの-I オプションにより、標準入力より渡されたデータを、任意の位置の引数に展開することが可能になります。
補足
上で紹介したようなめんどくさいコマンドをzshrcなどにエイリアスとして登録しておくと便利です。
alias rubo=“git diff --cached --name-only --diff-filter=AM | grep '\.rb$' | xargs rubocop”
まとめ
以上数例紹介したように、地味に面倒な作業を一発で実行できるようになるので、Linuxコマンド覚えておくと便利、という話でした。
他にも便利な使い方があれば教えていただけると幸いです!