Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

GitのGUIクライアントの便利な点と手が届かないこと

この記事はモバイルファクトリー Advent Calendar 2020 19日目の記事です。


こんにちは!新卒エンジニアのid:dorapon2000です。開発する方にとってGitは必須だと思いますが、どのように操作しているでしょうか。コマンドラインから、エディタの拡張機能から、GUIクライアントからなどの方法があると思います。今回は、GitKrakenというGitのGUIクライアントについて紹介して、コマンドラインとの違いについて考えたことを書きたいと思います。クライアントだけを利用する人やコマンドラインだけを利用する人が新しい気付きを得られると嬉しいです。

GitKraken

https://www.gitkraken.com/

f:id:dorapon2000:20201215182542p:plain

UI/UXにとても力を入れているGitのGUIクライアントです。第一印象はGitグラフが美しいですよね。私自身はこの見た目に魅了されて、個人的な開発ではGitKrakenを利用しています。見た目がきれいだと開発のやる気も起きます。

アカウントマネジメントやself-hostedのリポジトリと連携する以外のおおよその機能は無料で利用できますが、プライベートリポジトリを利用したい場合はサブスクリプションに登録する必要があります。プライベートリポジトリを利用できるようになるIndividualであれば$29/yearです。

機能

Git操作の基本的なことはGUI上からほぼできます。

git add & commit

addとcommitをします。

f:id:dorapon2000:20201218140033g:plain

git add -p

addする部分の選択も行単位で可能です

f:id:dorapon2000:20201218140239g:plain

git rebase -i HEAD~2

2つのコミットを1つにまとめます。

f:id:dorapon2000:20201217151614p:plain

git commit --amend & rebase -iの[r]eword

コミットの編集をします。

f:id:dorapon2000:20201218140436g:plain

git checkout/push/pull

ボタンを押すだけですぐ可能です。

f:id:dorapon2000:20201217151819p:plain

コマンドラインと比べて楽なところ

  • 差分をすぐ見れる
  • ファイルや一部のコードに対するHEADに戻す操作がとても簡単
    • コマンドラインでは複数のコマンドを使い分ける必要がある
      • git reset --hard HEAD
      • git checkout -p
  • ファイルのgit addが簡単
    • コマンドラインではgit add -pでハンクごとに追加するか指定する必要があるがGUIではさくっとできる
  • コミットメッセージの編集が簡単
    • コマンドラインではコミットが直近であるかないかで複数のコマンドを使い分ける必要がある
    • 1つ前であればgit commit --ammend
    • 2つ以上前であればgit rebase -i
  • remoteでバックログされているコミットがすぐわかる
    • コマンドラインではgit fetchをしないとremoteの最新版とlocalでどれだけ履歴が離れているかわからない
    • クライアントであれば裏で定期的にgit fetchをやってくれる
  • mergeコミットのrevertが簡単
    • コマンドラインからだとgit revert $hash -m 1のようにオプションを付ける必要ある。このオプションを覚えなくても済みます。

GitKrakenではできないこと

普段遣いで気づいたGitKrakenではできないことをあげようと思います。

  • 少し複雑なgit差分だと、1行単位でgit addができない(git add -pの[e]dit)
  • rebaseをundoできない
  • ssh先のリポジトリを管理できない

少し複雑なgit差分だと、1行単位でgit addができない

コミットせずにまとめて編集をして、あとから細かくコミットしていくということが私はよくあります。変更が離れた場所であればGitKraken上でもワンクリックでその部分だけaddできるのですが、同じ場所に分離したい変更が混じっているとまとめてaddされてしまい、1行ずつaddのような細かい指定ができません。つまり、git add -pの[e]ditのような細かいaddができません。

rebaseをundoできない

コマンドラインではgit reflogからgit reset --hardでもとに戻せますが、GitKrakenの現在の仕組みではそこまで柔軟に対応できないようです。

ssh先のリポジトリを管理できない

sshした先のgitリポジトリをGitKrakenでは管理できません。しょうがないかなとも思っていますが、将来の機能追加に期待しています。

GUIクライアントを使ってみて

コマンドラインだとオプションやコマンドの使い分けを覚える必要がある部分を、GUIクライアントではワンクリックで実現できてしまいます。一部の操作において手数を大きく省ける力があります。また、gitの学習敷居を下げる役割もあると思いました。

どちらからでもよいと思った操作は、checkoutやstash、push、pullのようなシンプルなコマンド群です。個人的にはコマンドラインから操作するのと手数感は変わりませんでした。

逆にGUIクライアントでは手が届かない部分として、上述したgit add -pのeやgit reflogなどがあります。いつも使うわけではないですが、いざというときにあると嬉しいですね。

私の場合、基本的にGitKrakenから操作して、コマンドラインをちょうど触っているときは直接コマンドを叩いたりしています。

まとめ

GitKrakenの紹介を兼ねて、GUIクライアントとコマンドラインの操作感の違いについてご紹介しました。結論としてどちらにも得手不得手がありますが、個人的にはGUIクライアントのスピード感はとても好みです。


明日の記事は Yunagi_N さんです!