もうCUIGitで消耗しない！😉 GitGUIクライアント「GitKraken」でハッピーなGitライフを実現しよう🦑

# ❤みんな大好き - Git❤
いつもお忙しいエンジニアの皆様、お疲れ様です
Git便利ですね。というかエンジニアにとってみれば必須ですよね。お料理で例えると「まな板」ぐらい大事だと思います（わかりづらい）
若輩者である私にとってみると、コードを書き始めた当初から使っているので、**無い状況が考えられない**くらいです。
皆様に置かれましても関わり方はどうであれ、エディタに並んでもっと良く使いたいと思うツールの筆頭ではないでしょうか？

## Gitクライアントソフト使ってる？
ここでいうGitクライアントというのは、[これらのような使いやすくUI/UXが調整されたソフトウェア](https://git-scm.com/download/gui/windows)のことを指します。SourceTreeが有名ではないでしょうか？
ただしこれらのようなソフトを使わず、CUIGitを使い続ける理由としてイカのようなものがあるのかなと思います。

- CUIで使える機能が使えない
- ごちゃっとしててむしろ使いにくい・とっつきにくい
- コマンドラインのほうがかっこいい

「一度はクライアントソフト使ったんだけど、CUIに戻ってきたんだよねー」みたいな人多いと思います。そもそもよく使うコマンドは`git commit`と`git push`と`git checkout`でシェルでコマンドエイリアス作って〜みたいに自分にとっての最適化をやっている人も多いと思います。
でも（特に複数人開発のときとか）`git rebase`とか`git merge`とか`git fetch`とか、便利なSquash CommitとかStashとかCherryPickとか、とにかくGitって色んな機能があって使い方覚えたりとか大変じゃありませんか？
それで使い方を覚えず便利な機能を使わないままだともったいないですよね。

## Git操作が得意でなくても安心！
「Git初心者だけど、Gitの概念を理解するので精一杯でコマンドを覚えていられない」なんて人もいっぱい居ると思います。
「ローカル？リモート？リポジトリ？他人のローカルがあーだから自分はこーだけどリモートがー。。。」最初は誰でも混乱すると思います。でもクライアントソフトを使えば少なくともコマンドを覚える部分はラクできますよ。
「Gitを使いこなしたいからコマンドから理解する」という人、大事なことだと思います。だけどたどり着きたい結果は初心者でもベテランでも大体一緒なんだから、ツールに頼ってもいいと思います。特に[GitKraken](https://www.gitkraken.com/git-client)ならね！

# 「[GitKraken](https://www.gitkraken.com/git-client)」でもっとGitをラクに
![Keif](https://www.gitkraken.com/img/keif-gallery/gallery-keif.jpg)
[GitKraken](https://www.gitkraken.com/git-client)
🦑イカ🦑がイカしたGitクライアントツールです。

## 何がいいのさ？
### 「直感的」UI/UX

一度使ってみれば、その練られたUI/UX設計に感嘆することでしょう。
CUIGitでも同じことができるとは思いますが、ここまでわかりやすいものをセットアップすることすら大変です。
しかもそれらの機能にアクセスする導線についても考えられており、「必要なものを必要になったときだけ」提供してくれます。もちろんCUIGitでできることはおそらく全て出来ますよ！

### WindowsでもMacでも同じUI/UX

意外と嬉しい。プライベート開発はMacだが、仕事ではWinを使っているみたいな人にとって、使いたい機能が片方で使えなかったり、目に見えて手抜きだったりすると嫌ですよね。私がそんな感じだったのでこのツールに出会えたときは嬉しかったですね。
### より良いGitライフを提供してくれる
- 開発が楽しくなるようなイカしたUI
- [GitKrakenチートシート](https://www.gitkraken.com/downloads/gitkraken-cheat-sheet-219.pdf)
- [GitKrakenによるGit自体の解説動画](https://www.gitkraken.com/student-resources#get-started)

提供会社自体がGitに対して理解があり、そしてGitKrakenを愛しているのが、[彼らのブログ](https://blog.axosoft.com/)などからも伝わってきます。私は開発自体が好きなので、そんな人たちが作ってるツールを使うと自分のモチベーションも上がるような気がします。

そしてイカから、普段CUIの人がGitKrakenを使うことでどんなことがラクになるか例をあげていきます！

## ラク１：意識せず常に最新の状態
auto-fetch機能によって何もしなくても`git fetch`してくれます（もちろん任意のタイミングでも出来ます）
複数人開発であれば、リモートのコミットツリーは常に変化し続けるため最新の状況を把握するためにも重要なことですね。
フェッチすることを意識づけていないと、例えば他の人のコミットが自分の開発しているブランチにあったとして、PushがうまくイカなくてForcePushしてしまうとその人のコミットが消えてしまいます。
もちろんコミュニケーションこのような事は防げることもありますが。

## ラク２：コミットする前に、変更箇所全体を俯瞰して見れる
変更箇所が大きくかつ、複数の意味を持つようになるとどんな目的で変更したのかわかりにくくなります。
コミットを適切に分けたり、意図に沿ったコミットメッセージを残すことで、あとで見返した時に変更意図が追いやすくなります。
GitKrakenではコミットパネルといった箇所でコミット前の変更差分の全体が把握でき、ひとつずつ選択してコミットに含めたりできます。

## ラク３：RebaseやMergeがドラッグ＆ドロップで
コマンドラインでいつも迷っていたのが、マージやリベースの際のどっちがどっちだっけ問題でした。毎回ググってたような気がします。
GitKrakenではブランチが一つのアクセシブルアイテムとして表現され、

- ドラッグドロップでマージ操作やリベース操作
- クリックしてチェックアウト操作
- 右クリック（副ボタンクリック）でコンテキストメニューが表示され、ブランチ作成操作など

が可能です。個人的にはマージやリベース操作に迷わなくなったのが嬉しいです。

### Interactive Rebaseもカンタン！

1. 例えばこんなコミットツリーがあったとして
<img width="684" alt="スクリーンショット 2019-06-18 13.50.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439627/50e76662-ecd9-d020-6bb5-33a07ee87715.png">

2. `feature/first`ブランチを`develop`から生えているようにしたいとき`Interactive Rebase`が便利
<img width="684" alt="スクリーンショット 2019-06-18 13.50.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439627/bf808dd8-3803-16e4-1e1a-cb49805f4809.png">

3. こんな画面が出て
<img width="684" alt="スクリーンショット 2019-06-18 13.51.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439627/60429001-e9e4-ec57-50c2-d85877f127e5.png">

4. CherryPickしてコピーしたコミットをDrop（自分のブランチからコミットを消すこと）をすることでリベースができる
<img width="684" alt="スクリーンショット 2019-06-18 13.51.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439627/b5fb5e9a-1c91-fdc1-8fbc-8baf397146e3.png">

インタラクティブリベースでは、各コミットに対してイカの操作が出来ます。

- `Pick`: コミットをそのまま取り入れる
- `Reword`: コミットを取り入れつつ、コミットメッセージを変更する
- `Squach`: １つ前のコミットに混ぜ込む
- `Drop`: コミットを取り入れず無視する

これは一例なので、他にも便利な使い方があると思います！


# ここから先は自分で確かめて見てくれ！
Gitがデフォルトで色んな機能を備えているため、それらをうまくGUIに落とし込みつつ使いやすくするのは難しいんだと思います。だったらCUIでいいじゃんってなるのも仕方ないのではと思いますが、エンジニアが本当に集中するべきことはツールをうまく使いこなすことでは無く、プロダクトに集中して開発したり、自分のできることを増やしたりすることです。

本当の意味でGitのサポートをしてくれるこのGitKrakenを使って、自分のプロダクティビティを上げてください！

[GitKraken](https://www.gitkraken.com/git-client)