Git初級者がGitHub Desktopを布教する

![スクリーンショット 2020-12-22 22.12.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/1e569cc1-b138-dbab-95cd-9a129a78201f.png)
<font color="Orange">[FUN Part2 Advent Calendar 2020 12月23日目](https://adventar.org/calendars/5511)


#概要
みんな大好きGitとGitHub、どう使っていますか？
もちろん、一般的にはターミナルやGit Bashなどを使ってコマンドラインであらゆる操作を実行するでしょう。

###**<font color="Red">でも、正直コマンドでGitって使いづらくないですか？**

自分の実行したいコマンドがわからない時はその都度ググって調べたり、よくわからんエラー吐かれて眉間に皺を寄せながらエラー文を検索欄にコピペするといったことが頻発するんですよね（Git初級者な自分の場合）。
正直いちいちめんどくさいしコマンドを叩くのはもう勘弁といったところなんです。

いえ、皆さんのお気持ちは分かります！
>「別に使いづらくないし」「お前が未熟なだけ」「黙ってコマンド覚えとけ」「甘えんな」「コマンドが無理ならGitも無理」「エンジニアとして意識低い」

ですが・・・ちょっと待ってください！

###**<font color="Red">コマンドを叩かずにアプリでGitが使えるならその方が良くないですか？？**

GitHub Desktopを使えば、こんなメリットが得られるんです！
・コマンドを叩く時間を削減できる
・コマンドを知らなくてもあらゆる操作ができる
・エラーの対処が簡単
・何もしなくても一瞬で変更点と差分が見られる
・変更の取り消しも一瞬でできる
・and more...

挙げればキリがないほどあります。本当です。

このように、コマンドを一切叩かなくてもGitとGitHubを使えるようになったんです！
つまり、コマンドやエラー対処についていちいち調べてコマンドを叩く必要がなくなるのです！
もうこれ以上の説明はいりませんよね！ダウンロードリンクはこちらです！

**[GitHub Desktop](https://desktop.github.com)**

※ GUIのGitツールとして「Source Tree」が有名かもしれませんが、私は**純正アプリ**である「GitHub Desktop」を強くお勧めします！
#GitHub Desktopとは？
![スクリーンショット 2020-12-22 22.14.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/abec88a1-ecda-afe1-d11f-82d18aa7ea22.png)

###概念
公式サイトにはこのように記されています。
>Focus on what matters instead of fighting with Git. Whether you're new to Git or a seasoned user, GitHub Desktop simplifies your development workflow.

つまり、
>Gitと戦うことよりも大事なことに集中しよう。あなたがGitの新入りでも熟練者でも、GitHub Desktopはあなたの開発フローをシンプルにします。

ということですね。

「Gitと戦うこと」とは、コマンドを叩いたりエラーの対処をすることにあたるでしょう。
そして、「大事なこと」とは、開発することそのものです。
###GitHub Desktopでできること

どういうことかと言いますと、**GitHub Desktopではコマンドを叩かずに、マウスカーソルによるGUI操作であらゆるGitコマンドを実行できます。**
すなわち、GitHub Desktopを使えば、知らないコマンドやそのオプションを調べたり、長いエラー文について検索するといった手間を省くことができます。

できることがコマンドよりも限定的じゃないのかと思われるかもしれませんが、GitHub Desktopには必要十分な機能がしっかり搭載されています。
cloneやadd、commit、pushはもちろん、diffを見たり、ブランチのrebaseを行ったりなど、細かな機能もコマンドを調べることなく**直感的に**実行することができます。
![スクリーンショット 2020-12-23 9.23.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/16d0cfcd-edaf-208f-92c6-001d8a1758de.png)


まとめると、GitHub Desktopを使えば、**マウスカーソルと少しのタイピングだけであらゆるGit操作が素早くできてしまう**のです！
単調な作業になりがちなGitに費やす時間を削って、**その時間と集中力を開発に当てられる**ようになります！

#基本的な使い方
##1. cloneからpushまで、一連の操作がマウスカーソルで直感的！
基本的な一連のGit操作はこんな感じだと思います。
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/f2bc89d2-b044-d672-edba-b2a216edc4a4.png)
はい、いつも通りですね（？）

黒い画面にアルファベットの羅列という感じですが、GitHub Desktopではこうなります↓

###❶ git clone
まず、初めの画面はこのようになっております（GitHubアカウントへのログインと既存リポジトリの登録後の画面です）
![スクリーンショット 2020-12-22 20.37.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/05208ca5-4cc6-03ac-73cb-86c39b1606d6.png)


左上の「Current Repository」をクリックすると、既に登録されているリポジトリのリストが表示されます。
ここで「Add ▼」をクリックすると、リポジトリを追加する3つの方法が表示されます。
ここではGitHub上にあるリポジトリをクローンするので、「Clone Repository...」をクリックします。
![スクリーンショット 2020-12-22 20.39.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/11914a95-1001-d90f-dfd8-bf582e127767.png)



自分自身のリポジトリまたは自分が加入しているリポジトリの一覧が表示されるので、目的のリポジトリを選んで選択状態にします。
そして、このリポジトリをローカルのどの場所に置くかをLocal Pathで指定します。
設定ができたら「Clone」をクリックします。
クローンできるリポジトリの一覧が見られるというのはコマンドラインではできないですよね！（憶測）
![スクリーンショット 2020-12-22 20.40.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/f23a59a4-17b8-5715-9dae-d3ec3263455b.png)



すると、設定された通りにクローンが実行されます。
![スクリーンショット 2020-12-22 20.25.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/d83c2e92-316b-06d4-e32a-e92404c0395f.png)

これでクローン完了です。
左上の「Current Repository」もクローンしたものの名称になっていますね。
![スクリーンショット 2020-12-22 20.27.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/2070b986-10f1-afb0-e97b-2bde7e2ac974.png)

###❷ git status / add
クローンしたリポジトリ内のコードを編集しました。
ここで、GitHub Desktopに戻ると、git addが自動で行われ、さらに差分もグラフィカルに見られます。
![スクリーンショット 2020-12-22 20.43.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/eca39a7a-d319-fc53-e6a8-c25faa0bb642.png)

###❸ git commit
左下の欄にコミットメッセージを記入し（任意で概要も記入）、「Commit to [ブランチ名]」をクリックします。
これで、コミットは完了です。
![スクリーンショット 2020-12-22 20.50.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/f87d94d4-ea05-6a59-3cec-7aa81a03ce7b.png)

###❹ git push
画面右のどちらかの「Push origin」をクリックすると、GitHubにプッシュできます。
新しく作成したブランチをプッシュする場合、コマンドでは追加のオプションが必要になり一手間かかりますが、GitHub Desktopではその辺りも自動で行ってくれます。
![スクリーンショット 2020-12-22 20.54.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/1a974ec5-f0e6-358d-6424-9c31062b4827.png)

##2. ブランチの切り替えも作成も瞬発！
コマンドでブランチの切り替えをする場合、
`$ git branch [ブランチ名]`で、目的のブランチを探してから`$ git checkout`で、ブランチの**フルネーム**をタイプして切り替えるため、かなりのタイムロスですが・・・
GitHub Desktopならたった2回のクリックで完了します！

画面上の「Current Branch」をクリックすると、そのリポジトリにあるすべてのブランチ（リモートブランチも含む）が表示されるので、目的のブランチをクリックで選択します。
これだけで切り替え完了です。
コマンド叩くよりも明らかに速いですよね・・・？
![スクリーンショット 2020-12-22 21.08.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/ef0b4ae0-2a66-6d3b-03b0-fb467ca27f93.png)

また、ブランチの作成もブランチリスト内にある「New Branch」をクリックすることですぐにできます。
![スクリーンショット 2020-12-22 21.13.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/016f311d-601e-0d68-0124-aaef95722430.png)

##3. コミット履歴の確認と復元も一発！
「History」を開くと、これまでのコミットの履歴が見られます。
他のメンバーのコミット履歴もここに含まれます。
あるコミットを復元する際は、右クリックして「Revert this Commit」を選ぶことで復元できます。
~~この辺りのことができるコマンドを調べて入力するのは大変めんどくさいので便利な機能ですね！~~
![スクリーンショット 2020-12-22 21.14.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/445889c5-23c8-e901-8e58-95f4385d27d0.png)

##GitHub Desktopの機能はまだまだたくさん！
ここまで、基本的な使い方を紹介してきましたが、あくまでもこれはほんの一部です。
GitHub Desktopには見た目以上に多くの機能を備えています。
正直自分には何ができるのか分からない機能もたくさんあるのです！

例えば、自分がGitHub Desktopで使ったことのある機能に該当するコマンドは以下のものです。
`$ git init`
`$ git rebase`
`$ git revert`
`$ git diff`
`$ git pull`
`$ git add`
`$ git commit`
`$ git push`
`$ git fetch`
`$ git marge`
`$ git stash`
`$ git log`

自分の浅はかな知識ではgitコマンドはこのくらいしか思いつきませんが・・・もちろんこれも一部に過ぎません。
~~まあ、そもそもコマンドを覚える必要もなくなるからね。しょうがないね。~~

ちなみに、GitHub DesktopでGitHubのプルリクエストを作成するページをワンクリックで起動するといったこともできます。

つまり、<font color="Red">**コマンドを調べたり覚えたり叩いたり一切しなくても、本当に色々できちゃうよ**</font>ということです。

#評価実験 〜すべてのタスクを早く終えられたのはどっち？〜
コマンドラインとGitHub Desktopの両方で同じことを行った場合、どちらが早く完了するのか？
私自身の手で検証をしました。

タスクは以下の通り:

1. `$ git clone [自分のリポジトリURL]` で、リモートリポジトリをクローンする。
2. `$ git branch testBranch` で、「testBranch」というブランチを作成する。
3. `$ git checkout testBranch` で、「testBranch」に移動する。
4. コードを編集する
5. `$ git add / commit / push` で、「testBranch」をGitHubにプッシュする。
6. `$ git checkout main` で、「main」に移動する。
7. `$ git merge` で、「testBranch」を「main」にマージする。

以上のタスクを、コマンドラインとGitHub Desktopの両方で実施し、すべてのタスクが完了するまでの時間を測りました。
ただし、使用するコマンドはあらかじめ把握しておき、一般的なタイピングによって入力できる状態で行っています。

結果は・・・こちら！！
![スクリーンショット 2020-12-22 22.47.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/948e4bc7-cceb-3396-e0d8-8f2adfd33fd0.png)
コマンドラインでは185秒かかったのに対し、GitHub Desktopでは何と80秒で完了しました！
圧倒的ですね！！！
**※あくまでも個人の感想です。**


#そんなもん人によるやろ
はい、おっしゃる通りです。
ですが、私が言いたいのは・・・

![スクリーンショット 2020-12-22 22.05.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/971773/82c9e849-20fb-c783-a015-a1ef20e7b73c.png)

Git のエラーハンドリングなんかしてる場合じゃない！
その時間を開発に充てよう！ということです。
もちろん、コマンドラインを用いて開発を行っているなど、コマンドラインが開発フローに含まれている場合ならコマンドラインを使用する方が良いでしょう。


#まとめ 〜コマンドラインから卒業しよう！〜
<font color="Red">「Gitと戦うこと」に貴重な時間を使ってしまい、開発に支障が出てしまう</font>のは非常にもったいない事です。
そのもったいない時間を開発に当てられるとなれば、素晴らしいことではないでしょうか？

コマンドに慣れきってしまい、コマンドこそがエンジニアのロマンだと感じ、CUIがこの世の正義だと信じ、もはやマウスカーソルには一瞬たりとも触れず、そして宗教上の理由によりコマンド以外は許されないという先輩エンジニアの皆様！

今一度、 **GUI版のGit**をお試しください！！
###**[GitHub Desktopをダウンロード](https://desktop.github.com)**