👋

fzfとghqを組み合わせてプログラミングの心理的・作業的負荷を軽減する

2021/07/02に公開

fzfとghqを組み合わせてプログラミングの心理的・作業的負荷を軽減する

対象読者

fzf+ghqは便利だよという話はよく耳にするけど、具体的なイメージが湧かない人。

モチベーション

ターミナルでの作業を効率化するtipsとしてfzf(もしくはpeco)+ghqの組み合わせは非常に有名です。もちろん筆者も毎日活用していて、fzfとghqが無いとプログラミングできないなと感じる程に気に入っています。
しかし、実際に使ってみるまでは具体的にどう便利なのかイメージしづらく、筆者自身も想像していたのとは全く別の便利さを感じていることに気がついたので、ここで言語化してみようと思います。

fzfとは

go製のファジーファインダです。要するにfzfコマンドに何でも良いので一覧を渡してやると、その一覧からインクリメンタルサーチで絞り込みができるcliです。fzf単体で何かをするものではなくて、シェルコマンドを駆使して好きな一覧をインクリメンタルサーチしようというものです。インストールスクリプトを使って導入するとkey bindをよしなに設定してくれるのでctrl-rでコマンドヒストリをインクリメンタルサーチできるようになるので入れるだけで即便利です。
https://github.com/junegunn/fzf

ghqとは

gitリポジトリを単一のディレクトリで管理するためのツールです。ghq getコマンドで任意のリポジトリを取得したり、ghq listでghq管理下にあるリポジトリの一覧を表示したりできます。当記事の主なトピックはghq listの表示結果をfzfに渡すテクニックにまつわる話です。
https://github.com/x-motemen/ghq

プログラミング時の心理的・作業的負荷を軽減する

fzfとghqを組み合わせることで複数のリポジトリを高速に行き来できるようになります。こういったユースケースは趣味でめちゃめちゃプログラミングをやっている人や、仕事で大量のリポジトリを扱っている人にとってはどれほどの恩恵があるか想像に難くないでしょう。
しかし、筆者のようにそれほど多くのリポジトリを管理していない人は実際に利用してみるまで何が便利なのかいまいちピンとこないと思います。
筆者がfzfとghqを使っていて便利だなと感じるのは「ちょっとした検証のためにリポジトリを切るとき」です。
仕事中などに、ライブラリやフレームワークの挙動を検証したくなった時のことを考えてみましょう。作業中のリポジトリから移動してmkdirしてディレクトリを切って作業ログ残したいのでgit initして作業して終ったら元のリポジトリに戻るのは、ただでさえコンテキストスイッチが発生してダルいのに手数が多くて一時的に集中がダレてしまいます。fzfとghqを使うことで、こういった心理的・作業的負荷を軽減し仕事の流れを極力止めずにプログラミングをすることが出来るのです。
以下のデモではtest_doctrineというリポジトリで作業中にghq createコマンドでhoge_scriptというリポジトリを作成してfzfで移動しhoge.phpを作成した後、元のリポジトリに戻っています。
ghqfzf
このように「いつでも気軽にコーディングできるのだ」という状態を作ることは、単純に打つコマンドの手数が減ったという事実よりも生産性に対して強力なインパクトがあると筆者は感じています。

まとめ

fzfとghqを組み合わせることでプログラミングにおける心理的・作業的負荷を軽減できるという紹介でした。気になった方は是非試してみてください。

Happy Hacking

Discussion