勧誘
みなさんGitクライアントアプリを作っていらっしゃいます。
- 自作Gitクライアントアプリを作っています (@soramimi_jp さんの記事)
- 今、gitのGUIクライアント自作が大流行!(この記事)
自作するひとが増えて、そういう界隈が発生すると楽しいな、と夢見ています。
進捗
動機
私の場合、
- 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なのでどこでも動きますが、どうやって配布するのがいいんでしょうね。
まだ何も調べてないんですが、「強いストアがあればいいのに」とわがままを言ってるところです。