エンジニアリングをする際に切っても切りはせないのがGit操作。
そんなGitを扱うのを便利にするライブラリをご紹介します。
この記事ではCUIでの操作を便利にするライブラリの紹介になります
検証した環境
1 | git | 2.36.0 |
2 | gh | 2.9.0 |
3 | tig | 2.5.5 |
4 | ghq | 1.2.1 |
Git関係のおすすめライブラリ
gh
GitHub公式から出ている、GitHubを操作するためのcliコマンド
$ brew install gh
- PRを作る
- gistを作成/編集する
といったGitHubに関する操作をコマンドで行う事が出来ます。
以下は公式マニュアルページより引用。
$ gh browse
#=> Open the home page of the current repository
$ gh browse main.go:312
#=> Open main.go at line 312
# issueの作成
$ gh issue create --title "I found a bug" --body "Nothing works"
# PRの作成
$ gh pr create --title "The bug is fixed" --body "Everything works again"
↑に記載している事はごくごく一部で、
GitHubに関する事であればほとんどの事をコマンドで操作出来てしまいそうな印象..!
さすがGitHub!!
tig
CUI上で手軽にgitの操作が出来るツール
$ brew install tig
雑な言い方をするとターミナル上で操作出来るSourceTreeのようなもの。
- logの確認
- add
- commit
- reset
などなど
基本的な操作はもちろん、
設定ファイルを追加する事で自分なりのカスタマイズも出来て
Git操作がかなり速く出来るようになります!
diff-highlight
gitのdiff表示を文字単位でしてくれるライブラリ
# git-diffはgitコマンドに同梱されているが、使えるようにするためには設定が必要
# 設定方法は以下の記事を参考に
変更点が文字単位になるので分かりやすくなります。
GitHubも diff-hightlight
が効いた状態で表示されるし、いずれデフォルトでこのライブラリが設定されると嬉しいなぁ
ghq
gitのリポジトリ管理をしやすくするためのライブラリ
$ brew install ghq
ghq
単体だと機能としては弱く
「Git管理しているリポジトリフォルダの一覧を表示する」という機能にとどまってしまいますが
# ghqで管理しているgitリポジトリの一覧を表示
$ ghq list -p
/Users/yuu/src/github.com/Alamofire/Alamofire
/Users/yuu/src/github.com/auth0/auth0-cli
・・・
下記のようにpeco
やfzf
のようなインクリメンタルサーチが出来るライブラリと組み合わせる事で、
# ghqでリポジトリ一覧をpecoに渡し、選択したフォルダに移動(cd)する
$ cd $(ghq list -p | peco)
該当のリポジトリフォルダにすぐに移動出来るようになって重宝します!
anyframe
zsh専用のライブラリで、良く利用する関数がパッケージになったもの!
手動でインストールする方法とAntigenでインストールする方法が公式で記載されています。
mollifier/anyframe: peco/percol/fzf wrapper plugin for zsh
私はzplug
を利用しているので.zshrcに以下1行を追加してます
zplug 'mollifier/anyframe'
anyframeで提供されている関数は全てキーバインド、エイリアスに対応!
# キーバインドでanyframeの関数を設定
bindkey '^x^b' anyframe-widget-checkout-git-branch
# エイリアスでanyframeの関数を設定
alias aw=anyframe-widget-cd-ghq-repository
Git以外の関数も入っているので自分が使いたいものがあればちゃちゃっと設定出来ます!
私が実際に使っているのは以下2つ
# ghqで管理しているリポジトリフォルダにインクリメンタルサーチで移動
alias gr='anyframe-widget-cd-ghq-repository'
# インクリメンタルサーチでブランチを変更
alias gc='anyframe-widget-checkout-git-branch'
anyframeの更にいいところは細かいところも設定が出来る点。
例えば私はインクリメンタルサーチにpecoではなくfzfを利用してまして、
anyframeのデフォルト設定のpecoからfzfに変更する事も可能です。
zstyle ":anyframe:selector:" use fzf