以前 Fork について書いたのですが、GitKraken についても書いておこうと思います。
- tl;dr;
- GitKraken の設計目標
- 価格
- プロファイル
- GitHub.com とのOAuth認証
- SSH鍵
- UI
- コンフリクト解消
- ターミナル統合
- LFS
- シングルスレッド
- ファイルロック
- git-hook
- まとめ
tl;dr;
Unity リポジトリではgit操作が重く悩ましいのですが、それを除くと GitKraken は最高の Git GUIクライアントだと思います。速度の Fork か、使いやすさの GitKraken か、両取りのGitKrakenターミナル統合か、と用途に応じて使い分けるのも手でしょう。
- GitKraken を商用で利用するなら有料版が必須。OSS開発だけなら無料版が利用できる
- 視点移動が少ないUI設計が使いやすい
- ターミナルタブはコマンド派でも操作しやすくGitKrakenのツリーも使えて便利
- Unityリポジトリなどサイズの大きいリポジトリでgit操作が重くなりやすい
- GitKranen の push 時にかかる git-hook が失敗するようになることがある
GitKraken の設計目標
GitKraken は、GitKraken で一連の git 操作 (clone, fork、pr) が完結することが目指されており、実際実現できています。目指すゴールとコンセプトがはっきりしているのは良いことです。ではこの設計目標は実際どのように達成されているのか見てみましょう。
GitKraken has deep integrations to create a streamlined workflow: create pull requests, clone, fork, and more 💥🚀 without ever leaving GitKraken. https://t.co/FZtUolrDPB pic.twitter.com/FICY9HJ2xg
— GitKraken (@GitKraken) November 2, 2021
価格
GitKrakenには無料版、有料版として Pro $4.95 per user/month、Teams $8.95per user/month あとは Enterprise があります。無料版はOSS利用のみ、GitHub.com のみ接続可能、プライベートリポジトリが開けない、プロファイル切り替えができない などの制約があります。Pro は複数のVCSに対して接続1でき、コマーシャル利用が可能になります。Teams は 10人を超えるユーザー管理、複数チーム管理ができます。
企業利用としても、ユーザーに対するライセンス割り当てをフローティング管理できるので、有料版は企業にも優しいなぁと感じます。
プロファイル
有料版で利用できる、複数のプロファイル設定は非常に優秀です。それぞれのプロファイルにメアド、VCS認証情報やデフォルトCloneフォルダが持てるので、個人で GitHub.com を使うとき、会社で GitHub.com を使うとき、会社で GHE を使うとき、会社で AzureDevOps を使うとき、とすべてプロファイルを分けたりできます。
プロファイル切り替え = .gitconfig の [user]
セクションの name, email の書き換えになります。dotfiles で .gitconfig を管理している場合、プロファイルを切り替えで意図しない書き換えがpush されないか気を付ける必要があります。プロファイルが [credential]
を見てくれればいいのですがそうはならないのが残念です。 [include]
で指定した別.gitconfig の [credentials]
に定義した.... を期待してはいけない。
GitHub.com とのOAuth認証
GitKrakenをGitHub.com で使うには Orgに対して OAuth App の許可を行う必要があります。これは結構厄介で、サクッと使おうと思っても GitKraken だと利用できないというケースがよくあります。一方で、GHE (Selfhost) や Azure DevOps は PAT 認証なのですんなり使えます。
プロファイルの[credential]
の件も併せて、できれば CLIの認証と同じ仕組みで GitKraken が利用できるといいのですが。
SSH鍵
GitHub.com はSSHで認証するのですが、そのSSH鍵の生成、GitHubへの登録など一通りの操作はGitkrakenで完結します。これは結構重要で、こだわりがないならいちいちSSH鍵生成のために別ツールを利用する必要はありません。とはいえ、GHE や GitLab、Azure DevOps は PAT認証なので関係なかったりします。
UI
GitKraken のUI最大の特徴はツリー画面だと思います。ツリーは真ん中に位置し、左にブランチ、右にコミットが表示されます。
ツリーが見やすいと感じるのが、ブランチやタグがどのコミットを指しているかパッとわかること、複数ブランチから自分のブランチだけをツリー表示する Solo
でのフィルタリングです。
左のブランチカラムは、ほかにもPR、Issue、Tag、Submodules、GitHub Actions が表示されいます。普段の開発だとLocalのブランチ操作がメインになると思いますが、すでに上がっているPRをここからひらくこともできます。Tag 操作もここで行えるなど、git の大半の操作が集約されています。
右のコミットカラムは、選んでいるコミットの表示やファイル変更を示し、その変更一覧とコミット操作も右カラムの画面切り替えで表示されます。ファイルの差分表示は、ツリー表示に代わって左+真ん中カラムが切り替わって表示されます。
この UI表示で何よりも素晴らしいのが、目線の移動がいかに少なくなるか設計されていることです。特にそれを感じるのが、ファイル差分を左+真ん中カラムを切り替えて表示することです。差分表示は幅も高さも広いほど作業効率が高い一方で、ファイル差分チェック中はブランチ状態やツリー状態は不要です。左+真ん中カラムのスペースを切り替えつつ、コミットにかかわるファイル選択は右カラムのままなので、視線移動が少ないのに必要な視野が確保されています。すごいです。
私が知ってる Git GUI クライアントでこういった視線移動に対する設計がきっちり行われていると感じるものは他になく素晴らしいと思います。
コンフリクト解消
GitKraken は Merge時にコンフリクトが起こってもコンフリクト解消が容易です。コンフリクト時はファイルDiffの表示が「コンフリクト状態と解消選択表示」に切り替わります。行ごとにどちらのブランチから変更を引っ張ってくるか選択ができるのでミスせず操作ができます。VS Code や Vim での解消二度としたくない。
ターミナル統合
GitKraken は CUIのみで操作するときでも便利で、push/pull のみ CLI で行ってブランチ操作やツリーはGitKrakenを使うことができます。ターミナル統合のもう1つのメリットは、認証が Git CLI に準じることで「OAuth認証されていないリポジトリだけどGitKraken を使いたい」ができます。そして隠れたもう一つのメリットが git push/pull がターミナル操作なので GitKraken で push/pull するより高速なため大きなリポジトリでも操作が快適です。操作が早くてツリーが便利、を実現するのがターミナル統合の真の価値!
ちなみにGitKraken は Fork や SourceTree のようなカスタムコマンド連携はないのですが、ターミナル統合ならカスタムコマンドも利用可能なので、いつもの感覚で利用できるでしょう。
LFS
Unity を使っていると出てくるのが git lfs です。2 GitKraken は、リポジトリルートの.gitattributesに lfs設定を記載していれば、pull操作で git lfs pull
が自動的に実行されるのでLFSを意識しなくなり実体化忘れもなくなります。Fork などは git lfs 統合がなく、都度 git lfs pull
が必要なので GitKraken の便利さはすごいです。逆にこの LFS統合によって、1回一回の pull操作が待たされるという感じもあるので、LFS 統合がいいか悪いかは微妙なラインもあるかもしれません。Preference では有効無効を設定できないので仕方ないかなぁ。
シングルスレッド
GitKraken にはいくつか課題がありますが、大きなストレスの1つが 「一つ操作をしているとUIがロックされて連続操作ができない」ことです。例えば、A リポジトリタブで pull 中に、別のBリポジトリタブに切り替えることもできません。また、バックグラウンドで git fetch が走っていて、UI上は何の表示もないのに無言で操作できないことがまれによくあります。ストレスに拍車をかけるのがリポジトリが大きい場合の挙動の遅さです。.git が大きなリポジトリ (体感で10GB超~) で git操作 3 に時間がかかるようになります。
シングルスレッドは GitKraken 最大の弱点であり、これが理由で Fork に魅力を感じるのはよくわかります。
ファイルロック
GitKraken のもう1つの課題がファイルロックでしょう。GitKraken で開いているリポジトリの .git は GitKraken につかまれているため、Windows でリポジトリのフォルダが消せなくなります。そんな時は GitKraken を終了させてからフォルダを消してみるといいでしょう。
git-hook
GitKraken の最後の課題が、push 時に勝手に仕込まれている git-hook 操作です。公式ドキュメントにデフォルト hook の記載がないのですが、push 時に git-hook が失敗してpush自体が行えないことがあります。git-hook が一度できないと リポジトリをgit clone しなおしてもずっと解消しなくて詰むことがまれにあるので終わったとなることがあります。
GitKraken で push しようとすると pre-commit hooks で hooks syntax error: unterminated quoted string 出て解消できなくて だいぶんはまった... hooks 外しても起こるし、git cmd や fork で問題ないんだけどこれなに...
— guitarrapc_tech (@guitarrapc_tech) October 7, 2021
まとめ
GitKraken は、細かい課題や速度に大きな課題があると感じます。しかし UI設計やプロファイルなど使いやすい機能が多く、Git GUI クライアントとしては最も好みです。
私も Unity で LFS なリポジトリだけは Fork を使ったりしています。くやしい。