読者です 読者をやめる 読者になる 読者になる

paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

Webエンジニアがよく使う【Git,Railsのための】pecoコマンド10種

f:id:paiza:20170512120419j:plain
Photo by michelle
中村です。

開発業務では、なにかとターミナルを使って作業することが多いですよね。

最近ターミナルを使うことが増えてきたけどあまり効率的に作業できていない気がする人、GUIツールから乗り換えてみたいけど、ちょっと勇気がいるなと思っている新人の人とか、いませんか……いるって言ってほしい。

そういう人たちのために、ターミナルなんだけど割とGUIっぽくしてくれるpecoというコマンドツールについて、Railsエンジニアが普段からよく使っているコマンドを中心に紹介していきたいと思います。

github.com

■インストー

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: ハッシュ(連想配列)の基礎」が無料です。

↓詳しくはこちら
paiza.jp

また、5/22(月)までにpaizaのスキルチェック問題に挑戦してくださった方の中から抽選でAmazonギフト券をプレゼントするキャンペーンも実施しています。プレゼント金額は挑戦人数によってどんどん増額していきますのでぜひチャレンジしてみてください!

↓詳しくはこちら
paiza.jp

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza

プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編