自作Gitクライアントアプリを作っています

マルチプラットフォームでGUIのGitクライアントアプリを開発中です。

という話を、昨年12月に書きました。

https://qiita.com/soramimi_jp/items/4bdffae3f8660b7e6874

この場を借りて、この自作アプリの宣伝をさせていただきます。オープンソースなので開発に協力してくださる方や、開発は無理でも、使ってみて要望を寄せてくださる方も歓迎です。あと、このアプリの存在を広めていただけるだけでも嬉しいです。

そんなアプリの、開発の経緯や進捗の報告、機能の紹介をしたいと思います。

自宅のプライベートリポジトリで開発を始めたのは昨年2月、バージョン0.0.0を公開したのが昨年のクリスマスでしたので、開発を始めてから、まもなく2年が経ちます。

最初はGitの使い方を私自身が習得するためと、内部の仕組みに興味があったので、自分の勉強のために開発に着手しました。当時存在していたいくつかのGitクライアントを試してみながら、「ぼくのかんがえたさいきょうのGitくらいあんと」を作ってみようと思ったのです。

多くのGitクライアントアプリは何かしら問題を抱えています。起動時間が遅すぎるとか、よく落ちるとか、ダウンロードの際のユーザー登録が面倒だとか、商用利用するには有料だとか、マルチプラットフォーム対応してないとか、アニメーションや視覚効果のような演出が過剰でウザいとか、ソースコードが公開されていない、といったものです。そのような制約をできる限り排除するようにしました。

開発当初は「GetIt」という仮名でスタートしました。昨年中頃「Guitar」に改名しました。GUI + Git + er が元です。

![guitar.png](https://qiita-image-store.s3.amazonaws.com/0/61222/228084b7-1f8e-b8cb-cf29-dbf1b6b96195.png)

▼ Windows 版
![windows.png](https://qiita-image-store.s3.amazonaws.com/0/61222/a31b4cf9-f3a1-622d-26b5-2c8ecce687e0.png)

左側に、ローカルリポジトリのブックマークがあり、複数登録できるのはもちろん、グループを作成して階層で分類することができます。右側は上から、コミットログ、ファイルリスト、diffビューとなっています。下にドッキングされているのはログウィンドウで、実行されたコマンドが表示されます。

日常の基本的なGitの利用においては、そこそこ使えるツールになってきたと思いますが、まあ、堂々とクライアントアプリを名乗るよりかは、まだまだ、GitのためのGUI支援アプリというべきかもしれません。実際私も、ターミナルを開いて`git`コマンドを手入力する機会はあります。それはそれとして、コミットログやコミットグラフ（樹形図）の閲覧では、グラフィカルに見れた方が便利ではないでしょうか。昔の古いコミットを掘り返して、エクスプローラーライクにフォルダツリーを見ながら、ファイルを抜き出して保存なんていう機能もあります。

ファイルの差分表示は、二つのファイルを並べて見る、サイドバイサイドビューを採用しています。このままではちょっと狭いので、比較画面だけ最大化表示することもできます。

▼ 最大化diffビュー
![bigdiff.png](https://qiita-image-store.s3.amazonaws.com/0/61222/e967ba7b-d3c2-05e0-aa09-eb9377338be8.png)

このプログラムはGPL2.0で公開しているフリーソフトです。C++とQtで実装しています。Windows、Linux、macOSで動作するマルチプラットフォーム対応です。LinuxについてはRaspberry PiのRaspbian上でも動作しますし、私自身は未確認ですが、外国の方でHaiku OSにポーティングしてくださった例があります。Qtが使えるデスクトップ向けOS上ならコンパイル可能だと思います。

▼ macOS 版
![macos.png](https://qiita-image-store.s3.amazonaws.com/0/61222/f3df25c5-4b53-6e35-c540-9ff28941ad59.png)

▼ Raspberry Pi 版
![raspi.jpg](https://qiita-image-store.s3.amazonaws.com/0/61222/ee9c3f88-cce1-4da9-bb86-c3cca9008b6e.jpeg)

▼ Haiku OS 版
![haikuos.png](https://qiita-image-store.s3.amazonaws.com/0/61222/51c97933-ba40-5818-0db8-d877a6220b61.png)

一年前、α版（v0.0.0）を公開してから今まで、アプリ組み込み用テキストエディタの実装に取り組んでいました。diffビューやログのテキストをマウスで選択してコピーすることができるようになりました。簡易ターミナル機能も搭載し、ユーザーパスワード認証の入力や、SSHの未知のホストに対するアクセス確認を、ログウィンドウ上で入力できるようにしました。

▼ 認証情報の入力
![terminal1.png](https://qiita-image-store.s3.amazonaws.com/0/61222/98f23712-0eaa-a2ef-cfbf-20acf8f2b4f3.png)

▼ SSHのフィンガープリント確認
![terminal2.png](https://qiita-image-store.s3.amazonaws.com/0/61222/34ae7d34-6fb4-080b-8469-09b151699d6e.png)

コミットグラフの描画は、一年前の時点でだいたい完成していましたが、下図のように描画されます。できるだけ複雑なコミットグラフでも破綻せずに描画できるようにしたつもりです。（submoduleのあるリポジトリはまだ未確認です）

▼ 多数のブランチとタグ
![deepbranch.png](https://qiita-image-store.s3.amazonaws.com/0/61222/7e3d0ff1-920c-3a1a-632f-4a5587ae6377.png)

▼ 複雑なブランチ
![complexbranches.png](https://qiita-image-store.s3.amazonaws.com/0/61222/5e52d898-64f2-46a0-3809-9d3fe1045585.png)

開発言語はC++、フレームワークはQt5を使用しています。
![qtlogo.png](https://qiita-image-store.s3.amazonaws.com/0/61222/a9b90528-ef9e-ba83-925c-2dc548081bfe.png)

コーディングとGUIの設計は Qt Creator という統合開発環境で行います。
![qtcreator.png](https://qiita-image-store.s3.amazonaws.com/0/61222/a1bb430e-b7fe-7465-8cee-727ffb94dcdc.png)

Qt Creator すごいです。C++の構文をかなり賢く解釈して、リファクタリングの支援をしてくれます。Qt Creator に慣れると、今更 Visual Studio なんて、、、という気分になります。

なんか最近、デスクトップアプリ開発はオワコンらしいです。いや、そんなことはありません！ .NETやElectronなんて敵ではありません。C++とQtやりましょうよ！

▼ ソースコード／リポジトリ
https://github.com/soramimi/Guitar