Photo by michelle
中村です。
開発業務では、なにかとターミナルを使って作業することが多いですよね。
最近ターミナルを使うことが増えてきたけどあまり効率的に作業できていない気がする人、GUIツールから乗り換えてみたいけど、ちょっと勇気がいるなと思っている新人の人とか、いませんか……いるって言ってほしい。
そういう人たちのために、ターミナルなんだけど割とGUIっぽくしてくれるpecoというコマンドツールについて、Railsエンジニアが普段からよく使っているコマンドを中心に紹介していきたいと思います。
■インストール
Macの人はhomebrewを使いましょう。
brew install peco
Windowsの人はChocolateyを使うといいようです。
C:\> choco install peco
■Git
◆ブランチ操作
ブランチ名をコピーして、作業する手間を省略できます。
git branchでリストを表示してからpecoで選択して、そのブランチ名を利用した操作をします。git branchは基本的に文字列編集なしで引数に使えるので、ちょっとだけ使ってみたい人にもおすすめです。
切り替え
git branch | peco | xargs git checkout
削除
git branch | peco | xargs git branch -d
マージ
git branch | peco | xargs git merge
リベース
git branch | peco | xargs git rebase
◆コミット操作
コミットのハッシュをコピーして作業する手間を省略できます。git log --oneline で、コミットのコメントを見ながら、操作したいコミットを探してあげましょう。
コミット内容の表示
# シンプルな表示 git log --oneline --branches | peco | awk '{print $1}' | xargs git show # グラフで表示したい人はこちら git log --graph --oneline --branches | peco | sed 's/^[\*|\|][[:space:]|\*|\|]*//g' | awk '{ print $1 }'
チェリーピック
git log --oneline --branches | peco | awk '{print $1}' | xargs git cherry-pick
■Rails
◆パスの検索
Railsで開発をしていると、かなりの頻度で rake routes を実行すると思います。動的に検索条件を書きたいときは、これを使って探し当てます。
rake routes | peco --initial-filter Regexp
ただ、 rake routes は内容が増えるとともに重くなりがちなので、遅い場合は定期的にファイルに出力しておくと起動が早くて嬉しい気持ちになります。
rake routes > tmp/routes.txt cat tmp/routes.txt | peco --initial-filter Regexp
◆タスクの実行
タスクの一覧から直接タスクを実行できます。Rails標準のタスクを呼び出すときよりも、自作したタスクを実行する時に使うことが多いです。
rake -T | peco | awk '{ print $2 }' | xargs rake
が、こちらも rake -T が遅いので、定期的にファイルに出力しておくと起動が早くて嬉しい気持ちになります。
rake -T > tmp/tasks.txt cat tmp/tasks.txt | peco | awk '{ print $2 }' | xargs rake
◆migrationの取り消し
特定のバージョンの操作だけを取り消したい時に、ファイル名を見つつ選択できます。この作業をやるのは開発中に試行錯誤する場面なので、ls -r で最近のものを上に出しておいた方が便利ですね。
ls -r db/migrate | peco | sed 's/_.*//' | xargs -I % rake db:migrate:down VERSION=%
ただし、ファイル名がわかりやすくないと、結局中身を見ないといけないので、ファイルを作成するときに気をつけておきましょう。とはいえ、ファイルの中身を見つつやるしかない場合もあります。
その場合は以下のようにしてソースを見つつ探し出します。
find db/migrate -name '*.rb' | xargs grep '' | peco --initial-filter Regexp | sed 's/db\/migrate\///' | sed 's/_.*//' | xargs -I % rake db:migrate:down VERSION=%
このやり方ですが、もっといい方法があるぞという人はぜひ教えてください…。
■その他
◆プロセス終了
プロセスが何かの拍子に残ってしまった場合、PIDを調べてからコピー&ペーストする手間が省けていい感じです。
ps -ef | grep rails | peco | awk '{print $2}' | xargs -o kill -9
■補足:xargsについて
pecoはxargsと組み合わせて使うことが多いので、ちょっと補足しておきます。
例えばcatコマンドの場合、通常はファイルの中身を出力させたいと思ったら、 cat [ファイル名] とコマンドを入力します。
cat paiza.txt
xargsコマンドは、この順序を逆にしてくれるのです。
パイプを使ってコマンドを連結した時に [ファイル名] cat と入力しても動作しません。なので、以下のようにxargsコマンドを使って順序を入れ替えてあげます
echo 'paiza.txt' | xargs cat
これで、cat [ファイル名] の順番でコマンドが実行されます。
もっと詳しく使い方を知りたい人はこちらのサイトなどで勉強してみてください。
<参考>
itpro.nikkeibp.co.jp
■まとめ
ターミナルでの作業に慣れている人なら、grepで事足りるやんけと感じたところもあるかと思いますが、pecoだと検索条件を何度も試行錯誤しつつ作業できるので、その辺がおすすめポイントだと思います。
あと、今回はターミナルから直接実行する方法で紹介しましたが、aliasとして登録したり、自作の関数にしておくのも便利です。
興味のある方はぜひ一度使ってみてください。
■「Ruby入門レッスン」を期間限定・無料公開中!動画で学べる「paizaラーニング」
「paizaラーニング」は、プログラミング未経験者・初心者向け学習サービスです。
普段は有料のRuby入門の各レッスンを、期間限定で連続無料公開しております。5/15(月)までの期間は「Ruby入門5: ハッシュ(連想配列)の基礎」が無料です。
また、5/22(月)までにpaizaのスキルチェック問題に挑戦してくださった方の中から抽選でAmazonギフト券をプレゼントするキャンペーンも実施しています。プレゼント金額は挑戦人数によってどんどん増額していきますのでぜひチャレンジしてみてください!