[はじめてのiOSアプリ]xcodeで地図アプリを作成（その９）

# はじめに

iOSアプリを作ってみたいけど
何から始めて良いのかわからない

とりあえず、
「やってみました」記事を参考に
地図アプリを真似てみようと思う

という記事の９回目です。

今回は、いままでやってきたことを git でソースコード管理し、GitHub にて公開までします。
とりあえず、今回のシリーズは、これで終了の予定。

## 懺悔（ざんげ）
- 今回のシリーズは、アプリを「作ってみる」ことが主眼だったので git に関することは「あとまわし」だったけど、本当であれば「最初」にすることだと思います
- そのようなこともあり、今回の記事は、あとからgitでソースコード管理し、GitHubと連携することになります
- 一部の方には参考になると思いますが、多くの方には参考になりません

# GitHubアカウントの作成
- ブラウザで、ここ↓にアクセス
  -  [https://github.com/join](https://github.com/join)
  - 手順などの詳細は、他の記事を参照してください
  - 簡単に作成できるはずです

# ソースコード管理対象の確認
- 【なぜ？】
  - 権利（著作権など）の侵害は、法律違反
      - 違反すると罰せられる
      - 他人のものを、自分のもののように公開するのは、格好が悪くない？
- 手順
  - 「ターミナル」アプリを起動
     - Launchpadからでも、アプリメニューからでも、好きな方法で起動する<br>
<img width="891" alt="launchpad_terminal.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/5b45176c-fce0-fbe4-57ab-903eb52d2b5b.png">

  - 「ターミナル」にて以下のように、プロジェクトフォルダ全体に対し検索
     - 【なぜ？】
         - cd で地図アプリ（MyGpsMap）のプロジェクトフォルダへ移動している
             - プロジェクトフォルダの位置に関しては、[この記事](https://qiita.com/shinobee/items/f87e36b706fab138c119)を参照
         - grep コマンドは、テキストファイル内の文字列を検索するツール
         - -r オプションは、サブフォルダ全てを検索対象と指定している
         - -i オプションは、大文字小文字を区別せず検索することを指定している
         - 'copyright' は、検索文字列を指定している
         - 最後の * は、全てのファイルが対象であることを指定している

    ```text:console
    % cd $HOME/github/shinobee/MyGpsMap/
    % grep -r -i 'copyright' *           
    ```

   - 実行結果は、以下の通り
      - 他者(shinobee以外)が copyright を持っているファイルが見つからない
      - プロジェクトフォルダ全体を公開しても大丈夫
      - プロジェクトフォルダ全体を公開してくれた方が、使う(git cloneする)人もファイルの過不足が気にならないので「楽」だと思います

    ```text:console
MyGpsMap/ViewController.swift://  Copyright © 2019 shinobee. All rights reserved.
MyGpsMap/AppDelegate.swift://  Copyright © 2019 shinobee. All rights reserved.
MyGpsMap/SceneDelegate.swift://  Copyright © 2019 shinobee. All rights reserved.
Binary file MyGpsMap.xcodeproj/project.xcworkspace/xcuserdata/shinobee.xcuserdatad/UserInterfaceState.xcuserstate matches
MyGpsMapTests/MyGpsMapTests.swift://  Copyright © 2019 shinobee. All rights reserved.
MyGpsMapUITests/MyGpsMapUITests.swift://  Copyright © 2019 shinobee. All rights reserved.
    ```

# GitHubリポジトリの作成
1. GitHubにログイン
   - ブラウザで https://github.com/login を表示
   - 【なぜ？】
     - OSS(Open Source Software)のプロジェクトは、GitHubで公開で間違いないから
     - GitHubでのプロジェクト作成は、ブラウザを使うから
         - 自分は、他の手段を知らない

1. GitHubにリポジトリを新規作成
   - 画面右上の「＋」をクリックし、「New repository」を選択
   - 以下のようにレポジトリ情報を入力
     - [Repository name]は、**MyGpsMap**
     - [公開範囲]は、**Public**
         - このプロジェクトは「公開」する
         - 必要に応じて「非公開 Private」を選択しても可
     - [Initialize this repository with a README]は、**チェックを入れない**でOK
     - [.gitignore]は、**変更しない**でOK
     - [Add a license]は、**変更しない**でOK
<img width="1315" alt="github-create-new-repository.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/bd4ff96c-448f-4bfa-2900-05a05b7daf53.png">
   - [Create repository]ボタンをクリックして、しばらく待つ
     - 作成されたら、以下↓のように表示される
<img width="1315" alt="github-created-new-repository.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/4d111b66-e406-332e-3855-bbfedd64f18c.png">

# XcocdプロジェクトとGitHubリポジトリの連携
1. GitHubアドレスを登録
   - 「ターミナル」にて以下のように、コマンドを実行
     - 【なぜ？】
         - GtHubでリポジトリを作成したあとに表示された「Quick setup」に書かれていたから
         - このコマンドを実行することで、GitHubのリポジトリを連携づけできる
         - 『プロジェクトに教えてあげる』と考えるほうが理解しやすいかも

     ```text:console
     % cd $HOME/github/shinobee/MyGpsMap/
     % git remote add origin https://github.com/shinobee/MyGpsMap.git
    ```

1. GitHub と同期
   - 「ターミナル」にて以下のように、コマンドを実行
     - 【なぜ？】
         - GtHubでリポジトリを作成したあとに表示された「Quick setup」に書かれていたから
         - このコマンドを実行することで、GitHubのリポジトリと同期（今回はpush≒アップロード）できる
         - なお、この時点では全てのファイルが同期（push）されていない
            - 今までの記事では、ソースコード管理をしてこなかったので、Xcodeが自動作成した初期状態のファイルが同期（push）対象
            - これ↑が理解できない人は、他の人の記事をもとにGitについて勉強しましょう

     ```text:console
     % git push -u origin master
     ```
   - なお、以下のようなコマンド実行結果が出力（表示）された

     ```text:console
Enumerating objects: 33, done.
Counting objects: 100% (33/33), done.
Delta compression using up to 4 threads
Compressing objects: 100% (29/29), done.
Writing objects: 100% (33/33), 11.30 KiB | 2.82 MiB/s, done.
Total 33 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), done.
To https://github.com/shinobee/MyGpsMap.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
     ```
   - ブラウザでgithubのリポジトリを表示したら以下のような状態<br>
<img width="1260" alt="github-init.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/8b27d3e5-9090-2618-cfe5-f9a843df7c50.png">
1. プロジェクトフォルダ以下の全てのファイルを git で管理
   - 「ターミナル」にて以下のように、コマンドを実行
     - 【なぜ？】
         - プロジェクトに関連する全てのファイルを対象とするため
         - git のコマンドオプション add で管理対象ファイルを追加することを指示
         - git のコマンドオプション '.' ドットで、カレント(現在の)フォルダ以下全てを指定

           ```text:console
           % cd $HOME/github/shinobee/MyGpsMap/
           % git add .
           ```
1. プロジェクトフォルダ以下の全てのファイルを git で管理
   - 「ターミナル」にて以下のように、コマンドを実行
     - 【なぜ？】
       - commit で管理対象ファイルを確定させることを指示
       - -m オプションで、コメントを記録

         ```text:console
         % cd $HOME/github/shinobee/MyGpsMap/
         % git commit -m 'update MyGpsMap project'
         ```

1. git の内容をGitHubと同期
   - 「ターミナル」にて以下のように、コマンドを実行
     - 【なぜ？】
         - Mac上での変更内容をGitHubに登録するため

         ```text:console
% git push 
Enumerating objects: 35, done.
Counting objects: 100% (35/35), done.
Delta compression using up to 4 threads
Compressing objects: 100% (24/24), done.
Writing objects: 100% (24/24), 126.10 KiB | 21.02 MiB/s, done.
Total 24 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
To https://github.com/shinobee/MyGpsMap.git
   091844c..c7f6b12  master -> master
         ```
   - ブラウザでgithubのリポジトリを再表示(reload)したら以下のような状態<br>
<img width="1260" alt="github-pushed.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/6cf945ca-c73c-e349-356d-b634669347f6.png">



# 今回の到達点
- プロジェクト(MyGpsMap)がGitHubにて公開された状態になった

# さいごに
- このシリーズの最初に書いた「＋αの目標」は達成できたのでしょうか？（自問）
  - 説明を書き始めると、どこまで深く説明して良いのかわからなくなる
  - 軽く読み切れる記事のボリュームを考えて説明を書いていたので、説明不足感があったかもしれません
- その中で、できるだけ説明を書いたつもりだけど、余計にわかり難くなったとしたら、ごめんなさい

```text:＋αの目標[再掲]
世の中に「やってみました」記事は、たくさんある。
多くの場合、同じことをすれば同じ結果を得ることができる。
しかし「なぜそのようなことをするのか？」を
解決できないから自分が成長しない。
『人が書いた「やってみました」記事を参考に
できるだけ「なぜ？」を解決しながらやってみよう』（汗）
```


# 連載
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その１：プロジェクト作成）](https://qiita.com/shinobee/items/1f6d26451336bf736484)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その２：地図表示）](https://qiita.com/items/50e1acee3024c3e26fb9)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その３：位置情報取得）](https://qiita.com/items/b8d287d2e34af20aab64)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その４：位置情報と連携した地図表示）](https://qiita.com/items/a91c49ebf5301d936120)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その５：アプリアイコン設定）](https://qiita.com/items/24804294ab86635ee5d3)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その６：拡大・縮小ボタン追加）](https://qiita.com/items/12c54c4e253bc48cad4d)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その７：地図を拡大・縮小）](https://qiita.com/items/4406c4fdf2fbdcc40533)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その８：地名表示）](https://qiita.com/items/3363779d0ea11ca6073c)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その９：ソースコード管理）](https://qiita.com/items/d0e63020b0dce4c70542)

<!-- eof -->