Xcode9時代のゆるふわGitHub生活

## はじめに

Swiftも安定期に入り、どんどんと間口が広がっているiOS開発ですが、それにあわせてじわじわとXcodeも進化してきています。
今回はそんなXcodeとGitHubの連携に関して意外と注目されていない便利機能について紹介します。

## 対象

- iOS開発でGitHubを使っている人
- これからiOS開発をするにあたってGitHubを使ってみたい人
- Xcodeで開発しているあまねく人

## 実はこんなところからできるGitHub連携

そもそもGitHubって〜という部分はさまざまな記事があるので省かせていただきます。

さて、さっそくはじめにXcode9って実はこんなところからできるんだよ！というところから始めます。
ぜひすでにGitHubを利用している人は考えてほしいのですが、パソコンを新しくした時GitHubを使うにあたってまずしなければいけない操作とは何でしょうか？

色々思いつくこともあると思いますがこの２つのコマンドです。

```sh
$ git config --global user.name "Hoge Fuga"
$ git config --global user.email hogefuga@hogehoge.com
```

意外と忘れてしまいがちですがパソコン自体のgitの設定です。実はXcode9ではこの時点からXcodeだけで出来てしまうんです。それが以下のスライドの手順になります。

![welcome_and_github.002.jpeg](https://qiita-image-store.s3.amazonaws.com/0/10943/0b5fb73d-6ac8-5e25-9da4-8008ff118d55.jpeg)

![welcome_and_github.003.jpeg](https://qiita-image-store.s3.amazonaws.com/0/10943/a7c6d0d9-66c4-4d3e-1f2d-5457b0918451.jpeg)

これだけです。簡単ですね。こうすることでgitの設定が出来てしまいました。
そしてGitHubと実際に紐付けるためにはこのあと以下のステップをふみます。

![welcome_and_github.004.jpeg](https://qiita-image-store.s3.amazonaws.com/0/10943/30f88089-9ad5-c070-4571-8e4ad94031fb.jpeg)

![welcome_and_github.005.jpeg](https://qiita-image-store.s3.amazonaws.com/0/10943/0476e0fc-0844-5e14-06e1-6900f2398f28.jpeg)

![welcome_and_github.006.jpeg](https://qiita-image-store.s3.amazonaws.com/0/10943/fb46c899-3feb-5565-103f-f980a006b775.jpeg)

AppleIDとおんなじようにログインできてしまいました。しかも最後のスクショからわかるようにHTTPSとSSHを選ぶことが出来ます。そしてSSHモードにすると下にSSHキーに関してどうするかという設定項目が出てくるのでターミナルを開かずともSSH連携をすることも可能です。

これでもうGitHub連携ができてしまいました。

## リポジトリをつくろう

続いてリポジトリの作成です。順を追って説明していきます。

### その１ gitリポジトリとしての初期化

普段なら

```sh
$ git init
```

とするところ、これもXcode上で実現可能です。
まずまだプロジェクト時代も作ってない人、このひとはこの画面で`Create Git repository on my Mac`のチェックが入っているかを確認すればオーケーです。出てこない！という人はOptionsを押してみてください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10943/1420a9ca-d4c6-dcf6-d5de-292994ac1bb9.png)

次にすでにプロジェクトはあるけどリポジトリになってないよーという人はこのメニューの`Create Git Repositories...`を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10943/4458a8a3-43c5-7809-845d-d10ca54a8210.png)

これだけです。簡単ですね。

### その２ リモートリポジトリを作成/紐付けをしよう

続いてはGitHub上にリモートリポジトリを作成します。ここでさぁWebブラウザで...となった人、まだ待ってください。
こちらもXcode上だけで可能です。

あたらしくリモートリポジトリを作成する際は以下の部分を選択していきましょう。

![welcome_and_github.008.jpeg](https://qiita-image-store.s3.amazonaws.com/0/10943/cc06b68a-0f70-944d-2217-1ebe8a550561.jpeg)

すると以下のような画面が出てきます。必要な情報を入力したら`Create`で完了です。

![welcome_and_github.009.jpeg](https://qiita-image-store.s3.amazonaws.com/0/10943/db161263-ff04-70b4-18e9-133601078b0f.jpeg)

ここまででリポジトリの作成から紐付けまで終わってしまいます。簡単ですね。

もしすでに作成されているリモートリポジトリと紐付けたい場合は先程の`Create "Hoge" Remote on GitHub...`の下にある`Add Exsisting Remote...`を選択することで簡単にできます。

## GitHubにアップ

紐付けが終わった時点でGitHubにはInitial Commitがされています。ですが実際の作業内容を保存するにはもちろんコミット＆プッシュが必要なのでそちらもXcode上でやっていきます。

コマンドでやると、

```sh
作業する
↓
$ git add .
↓
$ git commit -m "add fuga"
↓
$ git push origin master
↓
次の作業へ
```

が普段のフローですね。（個人開発での利用を想定しているのでpullなどは含めていません。また全てをaddしてしまっているなど細かい点は気にしないでください。あくまで一例です。）

これはもともとちょっと前からもあった機能ですが、この部分をかなり簡略化することが可能です。
具体的には次のようにやります。

![welcome_and_github.010.jpeg](https://qiita-image-store.s3.amazonaws.com/0/10943/96f027d7-09a4-66f9-b589-fd8d7fc74fc5.jpeg)

まず`add`の過程は一旦気にせず`Commit`をクリックしましょう。すると以下のような画面が出てきます。

![welcome_and_github.011.jpeg](https://qiita-image-store.s3.amazonaws.com/0/10943/22f60c44-6a9d-e3da-1d5b-88dcf76e3309.jpeg)

左にコミットするファイルの一覧が出てきて、ファイルをクリックすると差分が見れます。横のチェックマークを外しておくとそのファイルはコミットされません（つまりここが`add`の操作に対応します。）
下側にある大きなテキストボックスにコミットメッセージを含めることができます。

そして重要なのは左下です。ここをチェックしておくとコミットと同時にPushまでしてくれます。その横でどのブランチに上げるかも選択可能です。

すべての設定が終わったら右下のボタンをクリックして終了です。コミットメッセージ以外文字を打たなくていいのはかなりの効率化になるのではないでしょうか。

## まとめ

以上GitHubとXcodeに関しての簡単な使い方を説明しました。相当複雑な操作以外基本まかなえるのでぜひ活用してみてください。

## FAQ

### ブランチを切りたいときはどうする？

リポジトリをつくるときに利用したXcodeの左にあるSource Control navigatorで可能です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/10943/a6fa41f4-c63c-341c-4d13-6f91fbd17452.png)

こんな感じに管理できます。少し注目してほしいのが`feature`のところで、これ実は`feature/hoge`というようなブランチを作るとこんなふうにフォルダとして表示してくれるんです。便利ですね。

さらにブランチを選択するとメイン画面に各ブランチのコミット履歴が表示されて、コミットをダブルクリックすればファイルの差分を確認することが出来ます。ひょっとしたらGitHubで見るよりも便利かもしれません...！

### マージや過去に戻りたいときは？

これもSource Control navigatorで可能です。コミットを右クリックしたりブランチを右クリックするとマージのオプションやチェックアウトの項目が出てきてくれます。

その他に

- コミットメッセージのコピー
- コミットした人へのメール作成
- 特定のコミットにタグをつける
- 特定のコミットからブランチを切る
- コミットやブランチのGitHub上の該当ページに飛ぶ

などの機能が確認できました。

### もしかしてターミナルいらない...？

僕自身ターミナルが好きなので一概に「はい。」とはいえないところですが、コンフリクトした時の処理をAtomやVSCode並にできるようになったり、うまくrebaseをGUIで直感的にできるようになったりするとiOSでgitを使うときはXcode+GitHubオンリーで行けるとなる日も近いのかもしれませんね。