一歩目のGitとGitHub設定方法

初めてGitを使用する際に、自分なりにメモとして残します。

私が使用しているのはMacですので、Mac用の設定方法についてご説明します。ご了承ください。

まず、前提としてGitとGitHubは異なるものです。

私はこれを理解するのに、時間がかかりました。

簡潔に説明すると、Gitはプロジェクトのコードを記録するためのソフトウェアです。

一方、GitHubは記録したコードを他人と共有したり、自分自身が分かりやすく管理できるようにしたものと認識しています（もし間違っていたら、すみません）。

以下は超基本的な設定手順の順番になります。

# ①GitとGithubをインストール
GitはMacでは標準でインストールされているため、別途インストーラーを用いた環境構築などの作業は不要です。

インストールされているかどうかは、ターミナル上で以下のように確認できます。

```
ユーザー名@PC名 ~ % git -v
```
~　はホームディレクトリの為、そこで実装する方が後々良いです。

-vは`git --version`の略であり、どちらでも同じ挙動が確認出来ます。

実行結果は以下のようになります。

```
~ % git -v
git version 2.39.2 (Apple Git-143)
```

このように表示されていれば、Gitは標準で使用出来ます。

[GitHub](https://github.com "GitHub公式サイト")はこちらからサインアップを行って頂くことで、アカウント登録が可能となっています。

# ②Gitの初期設定
Gitに自身のユーザーを登録します。

登録方法は以下の通りです。

```
~ %　git config --global user.name "hoge"
```
ダブルクォーテーション内にはGitHubで登録したユーザー名が入ります。

ユーザー名を登録出来たら、次に、メールアドレスを登録します。
```
~ %　git config --global user.email "hoge@gmail.com"
```
こちらも、GitHubで登録したメールアドレスが入ります。

これで登録完了になります。

登録した内容を確認したい場合は、以下のように実行して下さい。
```
~ % git config --list
```
実行して以下のように表示がでたら成功しています。
```
user.name=hoge
user.email=hoge@gmail.com
```

# ③リポジトリの作成
GitHubを開き、Newボタンからリポジトリを作成します。
![スクリーンショット 2023-09-28 13.29.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698138/39a8fd6f-7a8e-0263-f476-e5566b6e7b21.png)
押下すると以下のような画面が表示されます。
各機能について、簡単に説明します。
![スクリーンショット 2023-09-28 13.23.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698138/33af2a2b-77d9-ea88-4cce-347749a5f854.png)
<table>
  <caption>リポジトリ作成画面の操作</caption>
  <thead>
    <tr>
      <th>項目</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> Owner </td> <td>だれが管理するのか</td>
  </tr>
  <tr>
    <td> Repository name </td> <td>どんなタイトルにするのか</td>
  </tr>
　　　　<tr>
    <td> Description </td> <td>なんの為のリポジトリなのか</td>
  </tr>
　　　　<tr>
    <td> Public </td> <td>世界中に公開する</td>
  </tr>
　　　　<tr>
    <td> Private </td> <td>自身若しくは、任意で追加したメンバーしか閲覧不可</td>
  </tr>
</table>
※Initialize this repository with:以下は特に特殊な開発目的がなければ使用しないと思われます。
設定出来たら、Create repository。
以下のような画面が表示されたら、作成完了。

![スクリーンショット 2023-09-28 14.00.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698138/8686ca6b-6d31-454c-be62-5134888a14e1.png)


# ④SSHkeyの生成
SSHに関しては、設定しなくても、設定してもどちらでも良い項目にはなりますが、公開鍵暗号方式という接続方法使用していて、大きなメリットが２つあります。

まず、1つ目のメリットとして、通信が暗号化されるため、セキュリティ上のリスクが低減します。

2つ目のメリットとして、GitからGitHubにコードを保存する際に、ユーザー名とパスワードを毎回入力する手間が省け、開発の効率が向上します。

以下に、設定方法を記述します。

```
~ % ls -al ~/.ssh
```
このコマンドで拡張子`.ssh`で終わるファイルがないか確認します。
初めて作成する場合は、なにも表示されず、作成した事がある場合は、以下のように表示されます。
```
-rw-------   1 ユーザー名  staff  3389  6 22 15:03 id_rsa
-rw-------   1 ユーザー名  staff   747  6 22 15:03 id_rsa.pub
```
このように表示されていても、作成した記憶がない場合、同じ名前で保存したら、上書きは出来ます。
上書きしたくない場合は、ここに表示されない別の名前で保存するようにしましょう。
実際に以下にSSHkeyを作成していきます。
```
cd .ssh
.ssh %　ssh-keygen -t rsa -b 4096
```
.sshディレクトリに移動してから実行すると、以下のように保存する名前と場所を聞かれます。
移動はしなくてもいいかもしれないが、ホームディレクトリ上に作成されるのを防ぐ為、移動してからにしている。
```
Enter a file in which to save the key (/Users/YOU/.ssh/id_ALGORITHM):
```
名前を設定しなければ、id_rsaで設定されます。以前にも同じ名前で作成した事がある場合、以下のように聞かれます。
```
id_rsa already exists.
Overwrite (y/n)?
```
上書きする場合はyをせずに、別の名前で保存したい場合は、nを入力します。
yを入力したり、初めてファイルを作成する時は、以下のように、パスワードを入力できます。
```
Enter passphrase (empty for no passphrase):
```
ここでは、設定しないという方法もとれますし、設定するという方法もとれます。
自身の開発環境によってどちらにするべきか決めます。
決めてパスワードを入力すると以下のように表示されます。
```
Enter same passphrase again:
```
このように表示されると、もう一度同じパスワードを入力し、確定させます。
確定させると、下記のように表示されます。
```
Your identification has been saved in 作成した秘密鍵
Your public key has been saved in id_test_rsa.pub
The key fingerprint is:
SHA256:oZDcMJvwzAiemfP+qi5DF1v29m3/TVWLCO7XBDNOmMs raku@Rakuto-NOV.local
The key's randomart image is:
+---[RSA 4096]----+
|. . o            |
|..+B B    o      |
| *. X . .+ =    .|
|  o. + .o.= = . o|
|   .= o SE o o ..|
| ..o   o.   o   .|
|. ..  . .... .  .|
|o   .    ..o   ..|
|o+....    . .....|
+----[SHA256]-----+
```
そうして、先程の`.ssh`の拡張子を確認する以下を実行する。
```
~ % ls -al ~/.ssh
```
作成したファイルが作成されていれば成功となる。

# ⑤生成したSSHキーをSSHエージェントに登録する
SSHエージェントに関しても、設定しなくても、設定してもどちらでも良い項目にはなりますが、公開鍵認証の代行することができ、大きなメリットが２つあります。

まず、１つ目のメリットとして、鍵を隠しファイルなどに保存しておく必要が無く、通信を行いたい時だけ、鍵が渡される為、セキュリティ上のリスクが低減します。

2つ目のメリットとして、秘密鍵は使用する度、設定したパスワードの入力を求められますがSSHエージェントに登録しておくことで、パスワードの入力を省略出来ます。

以下のコマンドを入力し、SSHエージェントを起動します。
```
~ % eval "$(ssh-agent -s)"
```
起動できたら以下のように表示されます。(pidの後の識別番号は環境により異なります)
```
Agent pid 59566
```
設定ファイルに秘密鍵を設定する為、以下のコマンドを実行する。
```
~ $ open ~/.ssh/config
```
ファイルが無ければ以下のように表示されます。
```
The file /Users/YOU/.ssh/config does not exist.
```
ファイルが無ければ、以下のコマンドを実行し、設定ファイルを自作する。
```
touch ~/.ssh/config
```
作成出来たら以下を設定ファイルに記述する
```
Host github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
```
記述が出来たら、SSHエージェントに秘密鍵を登録する。
```
ssh-add --apple-use-keychain ~/.ssh/id_rsa
```
以下のように表示されたら、登録完了。
```
Identity added:
```

# ⑥SSHキーをGitHubへ設定する
これまでに作成したSSHキーを使用して、GitHubへ設定します。

以下のコマンドを実行して公開鍵をクリップボードに保存します。

```
pbcopy < ~/.ssh/id_rsa.pub
```
保存したら、GitHubを開いて、以下のユーザーアイコンをクリックし設定項目へ移動します。
![スクリーンショット 2023-09-28 13.26.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698138/bf89f717-2569-87f9-c1f7-5f5f0b50c070.png)
![スクリーンショット 2023-09-28 13.24.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698138/1be8e923-4a90-a628-f9cf-9055b749a369.png)
設定項目に移動したら、`SSH and GPG keys`を選択します。
![スクリーンショット 2023-09-28 15.30.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698138/4300b2d2-5d09-84bf-5384-8ac153efd93c.png)
移動したら、`New SSH keys`を選択します。
![スクリーンショット 2023-09-28 15.34.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698138/8296fbb3-9fe8-3b52-e11f-be39e836f859.png)
Titleにはid_rsa.pubや公開鍵などのタイトルを入力し、Keyには先程、クリップボードにコピーした公開鍵を貼り付けする。この時に余計な空白がないように注意しなければいけない。
![スクリーンショット 2023-09-28 15.38.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698138/b3feae78-40dd-15b4-ed93-851d8549b884.png)

# ⑦SSH接続をテストする
登録したSSHキーが通信出来るのか予め確認をする。
以下のコマンドを入力してください。
```
~ % ssh -T git@github.com
```
以下のように表示出来たら、接続完了。
```
Hi Rakuto-NOV! You've successfully authenticated, but GitHub does not provide shell access.
```

# ⑧Gitに内容をコミットする。
cdで編集したいファイルがある直前のディレクトリまで移動する。
これをカレントディレクトリという。
例えば、下記のような形
```
my_project/
├── src/
   ├── main/
   │   ├── java/
   │   │   └── com/
   │   │       └── example/
   │   │           └── MyClass.java
   │   └── resources/
   │       └── config.properties
   └── test/
       ├── java/
       │   └── com/
       │       └── example/
           └── TestClass.java
       └── resources/
           └── test_config.properties

```
MyClass.javaを編集したい場合、exampleがカレントディレクトリとなる。
その場合、以下のようにコマンドを入力する。
```
~ % cd my_project/main/java/com/example
```
移動したら、カレントディレクトリ上にローカルリポジトリを作成します。
```
example % git init
```
以下のように表示されたら作成完了。
```
Initialized empty Git repository in
```
作成したら以下のように入力し、更新したファイルを選択する。選択せず、全てのファイルを更新する場合は、`git add .`
```
~ %　git add MyClass.java
```
選択したら、ブランチ名を設定する。以下のように入力します。
```
git checkout -b develop
```
入力したら、以下のコマンドを実行し、設定したブランチになっている事を確認します。
```
~ % git branch
```
確認したら、コミットする。ダブルクォーテーション内には更新内容を記述します。
```
git commit -m “first commit”
```

# ⑨GitHubにプッシュする。
コミットしたら、それをGitHub上へプッシュします。
プッシュするにはリモートリポジトリの作成が必要です。
以下のようにSSHを選択し、右のコピーを選択します。
![スクリーンショット 2023-09-28 16.36.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698138/ae7d5c56-4758-448a-b5f8-e558efdfb03b.png)
コピーしたらターミナル上で、以下のコマンドを入力する。
```
git remote add origin git@github.com:Rakuto-NOV/TEST.git
```
originまで入力し後は貼り付け。
ここでのoriginはリモートリポジトリ名になります。
以下のように入力することでプッシュすることが出来ます。
```
git push origin develop
```
github上で反映されていれば、完了。