Rails
GitHub
RSpec
Linuxコマンド
新人プログラマ応援

Linuxコマンド全然使ってないよ!って人のためのLinuxコマンド再入門

More than 1 year has passed since last update.

はじめに

みなさんLinuxコマンド使ってますか?
自分は今までcdや、rmなどしか使っていませんでした。
最近パイプライン、xargsなどの存在を知り、その便利さに感銘を受けたので、紹介したいと思います!

全くLinuxコマンド使ってないよ!って人の一助になれば幸いです。

パイプラインとは

【 パイプの使い方 】より

パイプとはコマンドの実行結果を,次のコマンドの入力として扱えるようにするシェルの機能である。パイプを利用するには,「|」という記号を用いる

以下のようなことが実現できます。

Terminal
$ ls | grep Gemfile

Gemfile
Gemfile.lock

xargsとは

findとxargsの基本的な使い方より

xargsは標準入力から一覧を受け取って、それを引数に任意のコマンドを実行するコマンド。

以下の章で実際の使い方を見ていきましょう。

何ができるようになるのか

Linuxコマンドは他のgitコマンドなどと組み合わせることで、強力な力を発揮します。

例えば、gitコマンドを用いて、次のcommitで反映されるファイルだけ対象に、rubocopを実行する、なんてことが可能になります。

Terminal
git diff --cached --name-only --diff-filter=AM | grep '\.rb$' | xargs rubocop

またGitフックを用いると、このようなコマンドをコミットの前に自動で実行することができます。Gitフックを使っておかしいRubyコードをコミットできないようにする

これを応用すると変更したspecファイルだけ実行したい時は以下のようにします。

Terminal
git diff --cached --name-only --diff-filter=AM | grep 'spec' | xargs bundle exec rspec

gitでマージ済みのローカルブランチを削除する時は以下のようにします。

Terminal
git branch --merged | grep -v '*' | xargs -I % git branch -d %

注: xargsの-I オプションにより、標準入力より渡されたデータを、任意の位置の引数に展開することが可能になります。

補足

上で紹介したようなめんどくさいコマンドをzshrcなどにエイリアスとして登録しておくと便利です。

.zshrc
alias rubo=“git diff --cached --name-only --diff-filter=AM | grep '\.rb$' | xargs rubocop”

まとめ

以上数例紹介したように、地味に面倒な作業を一発で実行できるようになるので、Linuxコマンド覚えておくと便利、という話でした。
他にも便利な使い方があれば教えていただけると幸いです!