Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

今、gitのGUIクライアント自作が大流行!

勧誘

みなさんGitクライアントアプリを作っていらっしゃいます。

自作するひとが増えて、そういう界隈が発生すると楽しいな、と夢見ています。

進捗

進捗_3.gif

動機

私の場合、

  • Windows版のSourceTreeがつらくなってきたので、そろそろ何か別のを使いたい
  • 行単位のstage/unstageをサポートしてるアプリが少ない
  • gitが好きなので、いつか自分でGUIアプリを作りたい
  • 無職最高!!!!!

みたいなのが自覚してる動機です。まあ他にもあったかもしれません。
(現在はフリーランスエンジニアとしてiOSやAndroidアプリの開発をやっています。)

また、昨年「GUIのGitクライアントアプリを作ってみた 」を読んでいたおかげで、
自分で作ろうとするのが2~3年ぐらい早まったと思います。

コミットを作る or コミットを操作する

作れそうなところまで作ってみるか、と思い立った後、
自分がgitのGUIクライアントに何を求めているかを考えて、
書き出したり、優先度をつけたりしていると、次のように思うようになりました。

gitを使ってやることは、次の2つのフェーズに分けて考えたほうがいいんじゃないか、と。

  • コミットを作る(git add, git reset, git commitなど)
  • コミットを操作する(git merge, git rebase, git resetなど)

この2フェーズを必ずしも同じアプリケーションでやる必要は無いんです。
気に入ってるアプリケーションを使いつつ、時にはコマンドラインを直接叩くように。

もちろん行ったり来たりするので同じアプリケーションのほうが楽ですし、
どちらにも区分できない機能もあるかもしれません。
(例えばgit bisectは専用の何かを用意したほうがいいかもしれません。)
でもgitのアプリケーションを作るなら、ここは分けて考えたほうが良さそうです。

そして、どういう使い方でもコミットは作りますし、
私は何より行単位のstage/unstageを命綱として求めているので、
まずはこれを作ることにしました。

行単位のstage/unstageを実装する

これまでqiitaに書いた記事と、これから書く予定の記事です。

[1] stage/unstage基礎知識編

行単位のstage/unstageのためにやるべきこと5つ

1. 元になるpatchとしてdiffを出力する
2. stage/unstageしたい行を選ぶ
3. hunkのボディを編集する
4. hunkのヘッダーを再計算する
5. 最終的なpatchをapplyする

[2] stage/unstage不完全攻略編

JGitを使ってみたら無理だったので、git.exeをそのまま使おうというお話でした。
詳しくは書いていませんが、Electronには返り討ちにされました。
いつかリベンジします。

[3] stage/unstageパッチ編集編

3. hunkのボディを編集する
4. hunkのヘッダーを再計算する

[4] diff et al.

1. 元になるpatchとしてdiffを出力する

[5] 初めてのデスクトップアプリ

2. stage/unstageしたい行を選ぶための表示

[6] stage/unstageの仕上げ(仮)

2. stage/unstageしたい行を選ぶの続き
5. 最終的なpatchをapplyする
ローカルの変更を破棄する(未完成)

[7] テストを書く(仮)

コマンドラインで不可能なことにまで頑張って対応したりしてるのでテストを書かないと死にます。
テスト部分だけ切り出せてライブラリ化できたりすると最高なんですが、
たぶんそれは近いうちには厳しいので、どうやってテストしてるかを書く予定です。
なお、テストコードを書くのは初めてでした。

次の開発予定

なんだかんだでコミットするまではできました。
細かい課題や問題はありますが、一段落です。

無職を辞めてしまったので、使える時間が減りましたが、
「仕事で使おうとしたら必要な機能が足りなくて全速力で実装する」
というのもあったりして、良い効果もあります。

次は、大きい絵としては、

  • コミットを操作する

なんですが、まずはそのためにコミット履歴を表示するUIを考えるところからです。
まずは、複雑なグラフの表示を頑張らずに良い感じにしたいと思います。

ちなみに、私がGUIクライアントに求めるもの第二弾はgit rebase -iです。
ハードルが高いと感じていますが、きっとなんとかなるでしょう。
ところで最近、手元のWindows10環境では
git rebaseでスタックオーバフローするようになったので泣いています。

配布

Javaなのでどこでも動きますが、どうやって配布するのがいいんでしょうね。
まだ何も調べてないんですが、「強いストアがあればいいのに」とわがままを言ってるところです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?