ターミナルのコマンド一発でブランチ名をクリップボードにコピーする

概要

  • .bashrcに現在のブランチ名を取得するコマンドを書く
  • pbcopyが便利
  • sedはすごい(わかってない)

あらすじ

(しばらく本筋と関係ない話が続きます)
最近、PHPとLaravelを用いた開発をしています。 PHPでの開発に役立つツールの一つに、PsySHがあります。

Psyshはインストールも簡単で、PHPファイルの任意の場所にeval(\Psy\Sh()); と入力するだけで実行中に対話式のコンソールを展開してくれます。 変数やメソッドを確認することができ便利です。

ただしpsyshには一つだけ大きな問題があり、eval(\Psy\Sh());を毎回間違いなく空でタイプするのは人間には不可能と言われています。 毎回'Psysh'とかでググってコピーするのも手間... ということで、ターミナルから取得することにしました。

alias psysh='echo "eval(\Psy\Sh());" '
[XXX@XXXX] ~/
% psysh
eval(\Psy\Sh());

これでわざわざブラウザ等を見に行かなくても良くなりましたね。

ところで、ちょっとは楽になりましたが、これを選択してコピーするのがまだ手間です。
何かいい手はないでしょうか?→ありました

pbcopyというコマンドを使うと、入力をクリップボードにコピーしてくれるらしいです。 ということで、先ほどのコマンド標準出力ではなくpbcopyに繋いでやります。

alias psysh='echo "eval(\Psy\Sh())"; | pbcopy '
[XXX@XXXX] ~/
% psysh
[XXX@XXXX] ~/
% eval(\Psy\Sh()); // command + V を押下

いいですね。

本題

ここまでやって思ったのですが、よく使う固定のテキストを引っ張ってくるだけならエディタにスニペット登録するとかで良くないですか? →確かに...

というわけで、全章の内容はなくても良かったのですが、せっかくpbcopyの存在を知ったので、他の使い道を考えます。
固定のテキストでなく、都度状況によって変わる内容を簡単に取得できれば良さそうです。 例えば、今いるgitのブランチとか。

というわけで、現在のブランチ名を特定のコマンドで取得できればそれをパイプで渡すだけなので、そのような方法がないか調べます。 →ありました。
How to show current git branch with colors in Bash prompt | by Chi Thuc Nguyen | Medium

alias cpbr="git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' | pbcopy"

何をやっているかの説明はリンク先を見てもらうといいかと思いますが、簡単に説明すると

  • git branchを表示
  • *のついている行を取得
  • *を削除して整形
    としています。(リンク先は最終的に取得するブランチ名を括弧で囲っており、微妙に違うので気をつけてください)

f:id:socha77:20200801102840p:plain
このアスタリスクです

リンク先ではこれを常時表示させて現在のブランチ名がわかるようにしているようですね。(こっちの方が便利度が高いので先にやるべきですね?)

2> /dev/null は何をやっているかというと、git管理下でないディレクトリで実行した時の標準エラー出力を処理しています。 2って何?という人はこの辺をどうぞ

bash: 標準出力、標準エラー出力をファイル、画面それぞれに出力する方法 - Qiita

リダイレクトとして 2&>1 を使うと何が起きるのか? - Qiita

これでめでたくコマンド一つで現在のブランチ名をクリップボードに収めることができました。

[XXX@XXXX] ~/some_git_repository
% cpbr
[XXX@XXXX] ~/some_git_repository
% develop // command + Vを押下

おわりに

こういう効率化みたいな知識もちゃんと蓄えていきたいですね(自分は放っておくとこういうちょっとした面倒から逃げて最終的に損するタイプなので...)