2. githubのリポジトリの設定

<h2>Gitの設定</h2>

初期設定として、ユーザー名とメールアドレスを設定します。
ユーザー名は自分だとわかる名前を入力してください。
メールアドレスはリモートリポジトリ上で一般公開されることを考慮して設定してください。

```:ターミナル
$ git config --global user.name "設定したいユーザー名をここに入力してください"
$ git config --global user.email 設定したいメールアドレスをここに入力してください
```

ユーザー名はダブルクォーテーション"で囲みますが、メールアドレスはそのまま入力します。
これらのコマンドは実行しても結果は表示されません。コマンドで確認しましょう。

```:ターミナル
$ git config --global -l
core.editor=/usr/bin/nano
user.name=[設定したユーザー名]
user.email=[設定したメールアドレス]
```

「ちゃんと登録できたか？」を確認することができます！

<h3>git add</h3>
次にgit add .でプロジェクトのファイルをローカルリポジトリに追加します。

```:ターミナル
$ git add .
```

このコマンドを実行することで、
現在のアプリケーションディレクトリにある全てのファイルがローカルリポジトリに追加されます。
このコマンドは実行結果などは表示されません。

しかしこの時点では保存（コミット）されてはおらず、
一時待機用のリポジトリ（ステージングと言います）に置かれているということを覚えておきましょう。
安全のため、いきなり保存（コミット）しない仕組みになっているという認識でOKです。


<h3>git commit</h3>
ステージングにある内容をローカルリポジトリに保存反映（コミット）するためには
git commitコマンドを使います。

```:ターミナル
$ git commit -m"hello world" 
```

コマンドに-mフラグを入れることで、
コミットメッセージを直接指定することができます。
上記の"hello world"がコミットメッセージです。
このコマンドは実行結果などは表示されます。
今回は新規作成したアプリケーションフォルダが大量にコミットされていますので、
かなりの行数が表示されるはずです。
⇓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/e1b0c964-7bad-f207-8e82-ceebd7584d6e.png)

こんな感じになります！

<h2>GitHubの設定</h2>
GitHubのリモートリポジトリにソースコードをアップロード（プッシュ）するための準備を整えます。
リポジトリをGitHubにアップロードすることで、ソースコードと変更履歴のバックアップを作成しておけることや、他開発者との共同開発をスムーズに行うなどのメリットがあります。

<h3>GitHubのアカウントを作成</h3>
すでにGitHubのアカウントをお持ちの方はここを飛ばしてください。
まだアカウントをお持ちでない方は<a href="https://git-scm.com/book/ja/v2/GitHub-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E6%BA%96%E5%82%99%E3%81%A8%E8%A8%AD%E5%AE%9A">こちら</a>を参考にしてアカウントを作成してください。

<a href="https://git-scm.com/book/ja/v2/GitHub-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E6%BA%96%E5%82%99%E3%81%A8%E8%A8%AD%E5%AE%9A">Git Hubの準備と設定方法</a>

<h3>リポジトリを新規作成</h3>

最初にログインします。
すでに登録してログインされてる方はGit Hubのログイン後の画面になります。
⇓
<a href="https://github.com/">Git Hubログイン画面</a>

登録した、メールアドレスとパスワードの入力をお願いします。（登録してログインされてる方はスルーでOKです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/6574fd63-f85a-e987-b9b2-2acf49c66201.png)

ログイン後、次のようなページが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/2e1cc48c-c7fc-27d7-546c-ed304b90a2c4.png)

画像で案内している+マークをクリックし、メニューを表示
⇓
「New repository」をクリック


すると次のようなページが表示されます。

![スクリーンショット 2022-01-21 163943 git リポジトリ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/d0af3b52-8d0a-15e9-e2af-9cdca0716349.png)

GitHubのリポジトリ新規作成画面です。

「Repository name」を入力。ここはリポジトリの名前を入力します。
☆わかりやすい名前にしましょう

「Description」の入力は任意。設定しなくても特に問題はありません。

他の項目は初期状態のままでOKです。
ここまでの設定が済みましたら、
緑色のボタン「Create repository」をクリックしてください。
すると、次のような画面が表示されます。

![スクリーンショット 2022-01-22 141447 gitレポジトリ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/e5720aea-0792-cbdb-58c9-c1e2d82b0c7d.png)

上記の画像で「SSH」を設定してください。

________________
<h3>SSHキーとは</h3>
SSHとは「Secure SHell」の略で、ネットワークに接続された別のコンピューターをリモートで操作するための方法です。

自分のPC(ローカルサーバー)から、遠方にある外部サーバー(レンタルサーバーやクラウドサーバーなど)のサーバーコンピューターを遠隔操作するために使います。

SSHキーを使う事によって「外部サーバー(Git)」と「ローカルサーバー(VS.CODE)」間の通信データが「暗号化」されるため、安全に遠隔操作を行うことが出来ます。

ですので、開発を行う際はセキュリティー面を考慮してHTTPSよりSSHを使うようにしましょう
________________

2番目の赤枠には２つのコードが掲載されています。

1行目のコードが、リモートリポジトリ追加用のコード

```:ターミナル
git remote add origin git@github.com:[自分のリポジトリ名].git
```

2行目のコードが、mainブランチに移動するコマンドです。

```:ターミナル
git branch -M main
```

3行目のコードが、ローカルリポジトリでコミットしてある内容をリモートリポジトリへのプッシュ用のコードです。

```:ターミナル
git push -u origin main
```

これでリモートリポジトリへのプッシュが可能な状態となりました！
先ほどのリポジトリ初期ページはまだ使いますのでそのままにしておいてください。

<h2>SSHキー作成</h2>
SSHキー、Gitの環境構築を行います！
開発環境内でのSSH公開鍵の確認および出力
今回出力したSSH公開鍵をGitHubの設定に追加する事を行います！

sshキーを自分のGitHubに接続します
sshコマンド
色々と表示されますが、何も入力はせずにEnterキーを3回押してください。

```ruby:ターミナル
$ssh-keygen
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266515/d170eb3d-0980-dd57-aa74-88c02e4c5331.png">


ここまで完了したら公開鍵の作成OKです！

<h2>Githubに公開鍵を設定</h2>

ここからGitHubとの連携となります。
まずは先ほど作成した公開鍵の内容を出力してコピーします。

次のコマンドを実行してください！

```ruby:ターミナル
$   cat ~/.ssh/id_rsa.pub
```

⇓
上記のコマンドを打った後下記のような文字列が表示されます（実際の皆さんの開発環境では、
文字が折り返されて何行かに渡って表示されていると思います。)
⇓

![スクリーンショット 2021-09-05 194530.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/0c2847da-fc65-2923-4137-61842f16ef0b.png)

出力されたテキストを全て正確にコピーしてください。
コピーが完了したら、GitHubにアクセスしましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266515/c932a7f3-0320-b0ef-68f1-870a76506200.png">

画像の赤枠、まずは画面右上にあるユーザーアイコンをクリックします。
すると、画像のようにドロップダウンメニューが表示されます。
次はメニュー内の「Settings」をクリックしてください。設定画面へと移動します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266515/2e177ebc-88d6-25eb-d9e4-062292cb68af.png">

画面左側のメニューにある「SSH and GPG keys」をクリックしてください。
（場合によってはテキストが違う可能性がありますが、SSHと記載されている項目を選びます）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266515/98ce6912-cd08-aa05-50d0-bd024b9b003f.png">

画像のように、見出しにSSH keysと表示された設定ページが開きます。
筆者の環境ではすでに公開鍵をいくつか設定しているため、
大きな赤枠にある鍵マークの部分が表示されていますが、
皆さんの画面では未設定なので表示はないはずです。
ここで画面上部にある緑色の「New SSH key」ボタンをクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266515/91648783-1249-c543-67d5-8dad67af70af.png">

開かれたこのページで公開鍵とタイトルの設定をします。

タイトルは特に指定はありませんので自由に入力できます。

今回は画像ではATTendance System Turorialになってますがtest_developmentで良いでしょう。
（わかりやすい名前にしましょう）

次の赤枠部分は、
先ほどコピーした公開鍵をそのまま貼り付ける項目です。
特に余計なことはせず、貼り付けるだけでOKです。
どちらの設定も完了したら、下にある緑色の「Add SSH Key」ボタンをクリックします。
ボタンをクリック後、パスワードの確認画面が表示されます。
パスワードを入力して先へ進んでください。
全て正しく入力が進めば、SSH設定メニュー画面が表示されるはずです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266515/34133822-accb-2b83-19f1-206c033a1234.png">

このように、先ほど設定したタイトルと鍵のアイコンが追加されました。
（鍵のアイコンは緑色じゃなくても大丈夫です）
登録しているメールアドレスに、鍵を追加したという内容のメールが届きます。
これでGitHubでの公開鍵の設定もOKです。

<h2>Protected Branchの使用</h2>
Protected BranchとはGithubにあるブランチを保護する設定になります。

チーム開発において、gitの使い始めではどうしてもmainへPushしてしまい様々なトラブルが発生してしまします

__________________________________________________________________________
<h3>mainブランチにpushする事がダメな理由</h3>
・自分以外のメンバーがpushできなくなる危険性があるため
・ファイルなどを消してしまった場合にそのまま反映されるため
・間違えがそのまま反映されてしまう危険性があるため
などの危険性があるため、チーム開発では一旦作業用branch(確認するためのbranch)を作って開発する必要があります。
__________________________________________________________________________

GitHubにはPush権限を限定する設定があり、これを使えば誤ったPushを防ぐことができます。

[①Settinng>②Branches>③Add rule]の順にクリックします。

![スクリーンショット 2022-01-22 175240.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/1a0d922c-c3b2-3bfb-e6ac-611fc574e35a.png)
⇓
保護対象のbranch名を入力（今回はmain）
![スクリーンショット 2022-01-22 193811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/324ccf37-7193-cd54-8263-51c5d34887e8.png)
⇓
「Require pull request reviews before merging」
「Include administrators」
にチェックを入れます

![スクリーンショット 2022-01-22 201522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/fd6b630f-9f2a-021d-0504-9a628a130767.png)


「Require pull request reviews before merging」
有効にすると、すべてのコミットを保護されていないブランチ(main以外)に対して行い、プルリクエストを介して送信する必要があります。
つまりmainに直接pushができなくなります。

「Include administrators」
有効にすると、項目にチェックしたルールがGithub管理者でも適用されます。

セキリュティ面をもっと手厚くしたい場合の参考記事です。
⇓
https://qiita.com/KeisukeKudo/items/6404f51d1f4407661321

今回はこの二つのチェックだけで実際にmainブランチにpushして試してみたいと思います。

![スクリーンショット 2022-01-22 202103.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/a9726382-46c8-0127-724f-19fdf6fd370c.png)

mainブランチにpushできなくなっております。成功ですね！

rails6の環境構築の環境構築は以上です。

次回は
devise'を使ったログイン機能の実装を行います。