GitHub の環境構築から git clone までの手順

Gitクラウド

素の Git による環境構築については以前の記事で解説いたしましたので、今回は GitHub を利用したソース管理の環境を構築する手順を説明したいと思います。

GitHub を利用するメリットはなんといってもブラウザ画面からの GUI での操作が可能なこと。
視覚的にわかりやすく、コマンドラインでの操作よりもはるかにとっつきやすいです。
リポジトリの環境構築も画面上だけで完結し、わざわざサーバを用意する必要もありません。


中央リポジトリの作成
Git による開発環境・テスト環境・本番環境の構成は以下のようになります。

Git リポジトリ構成の例

それぞれの環境についての説明については過去の記事を参照してください。

参考: Git を利用した開発環境・テスト環境・本番環境の構成

中央リポジトリの部分が GitHub になります。
素の Git では中央リポジトリは自身でサーバを用意し環境を構築する必要がありますが、GitHub の場合はブラウザ画面上から操作するだけで環境構築が完了します。

トップページの赤枠部分から新しくリモートリポジトリを作成します。

GItHub リモートリポジトリの作成

リポジトリ作成画面にてリポジトリ名やリポジトリの公開/非公開、README.gitignoreファイルの作成、ライセンスの種類を選択し、「Create repository」をクリックします。

GitHub リポジトリ作成画面

これでリモートリポジトリが作成できました。

GitHub リポジトリトップ画面

後々、設定等が必要になりますが、これだけで中央リポジトリ環境が構築できるのは便利ですね。
なお、GitHub では新規に作成されるリポジトリのデフォルトブランチ名がmasterからmainに変更されました。

ちなみにリポジトリの削除は SettingsGeneral の一番下にあります。


develop リモートブランチの作成
これもブラウザ画面上から簡単に作成できます。
リポジトリのトップ画面より、ブランチ操作ボタン(赤枠の部分)をクリックします。

GitHub developブランチの作成

テキストエリアに develop と入力し、「Create branch : develop from main」をクリックします。

GitHub developブランチの作成

これでdevelopブランチの作成が完了しました。
以降、ブラウザ画面上でブランチを切り替える場合はこのボタンを使用します。

GitHub ブランチ切り替えボタン


プロテクションルールの設定
なにやら警告文がでてますね(上図矢印部分)。
ブランチのプロテクションルールを設定した方が良さそうです。
この警告文をクリックするか、SettingsBranches に移動します。

GitHub ブランチ保護ルール画面

ここでは最低限、プルリクエストの設定を行いましょう。
他にも様々なルール設定がありますが、説明は別の機会にしたいと思います。
※なお private でブランチ保護ルールを適用するためには、組織アカウント(有料)が必要なようです。

GitHub プルリクエストの設定

Protect matching branches の Require a pull request before merging にチェックを入れます。
これにより、当該ブランチのマージにはプルリクエストの発行が必須となります。

Require approvals
ブランチのマージには承認が必要となります。
マージが可能となる承認数を Required number of approvals before merging で設定します。

Require review from Code Owners
ブランチのマージには特定のレビュアー(Code Owner)の承認を必須とします。
自身のリポジトリを公開する方は自分自身をレビュアーに設定しておいた方が安心かもしれません。
レビュアーの指定方法ですが、.github/CODEOWNERSというファイルを作成し、その中に各ソースコードに対する Code Owner を指定します。
Code Owner が指定されたファイルを含むプルリクは、該当する Code Owner すべての承認が必要となります。
書式は以下の通りです。

# すべてのソースコードに対して yanox2 の承認が必要
* @yanox2

# ソースコードにワイルドカードが使えます
*.php @johndoe

# ディレクトリ指定も可能
database/ @johndoe @yanox2

mainブランチおよびdevelopブランチの両方に設定しておきましょう。
ブランチの追加は「Add rule」、編集は「Edit」ボタンをクリックします。

GitHub 保護ルールの設定


開発環境の作成(git clone)
git cloneコマンドでリポジトリを開発環境に複製します。
リポジトリの場所は、トップ画面の「Code」ボタン(赤枠の部分)をクリックすることで参照できます。
HTTPS でアクセスする場合は HTTPS のタブを、SSH でアクセスする場合は SSH のタブをクリックします。

GitHub リポジトリの場所の確認

git コマンドを利用するため、Git をインストールします。

# Linux
>yum -y install git # CentOS
>apt-get install git # Ubuntuなど

Git for Windows
https://gitforwindows.org/


HTTPS でアクセスする場合
GitHub では private なリポジトリでも URL によるリポジトリ参照が可能です。
2段階認証が必須となったことでgit cloneの際のパスワード認証は廃止され、アクセストークンが必要となりました。

>git clone https://github.com/yanox2/TestRep.git
Cloning into 'TestRep'...
Username for 'https://github.com': yanox2
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/yanox2/TestRep.git/'

アクセストークンはユーザー個人設定から取得できます。
ヘッダメニュー右上のユーザーアイコンより settings をクリックし、左メニューより Developer settings をクリックします。

GitHub ユーザー個人設定

左メニューより Personal access tokens をクリックし、「Generate new token」ボタンをクリックします。

GitHub 個人アクセストークンの作成

2段階認証の画面が出た場合は認証コードを入力します。
アクセストークン生成画面で、トークン名(note)や期限(Expiration)を設定します。
スコープはとりあえずrepoを指定しておけばフルコントロールになります。

GitHub 個人アクセストークンの作成画面

画面下部の「Gererate token」をクリックして生成が完了です。

画面上に生成されたアクセストークンが表示されますのでこれを保存しておきます。
1回しか表示されませんので、必ずこの画面でトークンをコピーしてどこかにメモっておく必要があります。

保存したアクセストークンを元に、以下のようにgit cloneします。

# git clone https://{アクセストークン}@github.com/{アカウント名}/{リポジトリ名}.git
>git clone https://XXXXXXXXXX@github.com/yanox2/TestRep.git
Cloning into 'TestRep'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), done.


SSH でアクセスする場合
SSH でアクセスする場合は、SSH キー(秘密鍵・公開鍵)が必要となりますので、まずはこれを作成します。
ssh-keygenコマンドを利用するには Git をインストールする必要があります。

>ssh-keygen -t rsa

キーの保存先やパスフレーズの設定を聞かれますが、そのままEnterを繰り返したデフォルト設定で大丈夫です。
なお、キーの保存先はデフォルトでは以下の場所にid_rsaid_rsa.pubの名前で保存されますので、もしすでに作成しているキーが存在している場合は退避しておいてください。

Windows
%UserProfile%\.ssh

Linux
/home/{ユーザー}/.ssh

次に作成した SSH キーの秘密鍵を GitHub に登録します。
SSH キーの登録は2種類あります。

リポジトリ専用のキーを作成する
当該リポジトリでのみ使用できるキーを作成します。
リポジトリへアクセスできるディストリビューターで共有するような運用が可能となります。
当該リポジトリの上部メニュー「Settings」より左メニュー「Deploy keys」をクリックし、「Add deploy key」ボタンをクリックします。

SSH キーの登録


Title にタイトルを入力し、Key に秘密鍵(id_rsa)の内容をコピーします。
コピーする内容はヘッダ部(—–BEGIN OPENSSH PRIVATE KEY—–など)やフッター部も含めてコピーします。

Allow write access にチェックを入れることで、git push が可能となります。
チェックを入れない場合は参照のみとなります。
Add key」をクリックして登録完了です。

個人専用のキーを作成する
自分自身だけが使用できるキーを作成します。
このキーは当該ユーザが GitHub 全体でアクセス可能なすべてのリポジトリに対して利用できます。
ただし個人の設定ですので、他者は利用できません

ヘッダメニュー右上のユーザーアイコンより settings をクリックし、左メニューの SSH and GPG keys をクリックします。

GitHub SSH キーの登録

New SSH key」ボタンをクリックすると SSH キー作成画面が出てきますので、キーの名称と先ほど作成した公開鍵(id_rsa.pub)の内容を入力し、「Add SSH key」ボタンをクリックして完了です。

GitHub SSH キーの登録画面

作成された SSH キーの情報が表示されます。
SSH でアクセスする場合のリポジトリの場所は、トップ画面の「Code」ボタンで SSH タブを選択します。

GitHub リポジトリの場所の確認


git clone する
SSH の設定ができたところで、実際にgit cloneしてみましょう。

# git clone git@github.com/{アカウント名}/{リポジトリ名}.git
>git clone git@github.com:yanox2/TestRep.git
Cloning into 'TestRep'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (5/5), done.

もし、以下のようなエラーが出たら、

Cloning into 'TestRep'...
Permission denied (publickey).
fatal: Could not read from remote repository.

キーファイルの場所を見つけられなかったようなので、以下のように-cオプションにてcore.sshCommandを指定するか、SSH 接続のコンフィグファイルにあらかじめエイリアスを設定しておきます。

# -c core.sshCommand="ssh -i キーの場所とキーファイル名"
>git -c core.sshCommand="ssh -i ./keys/id_rsa" clone git@github.com:yanox2/TestRep.git
# エイリアスを指定
>vim /home/ec2-user/.ssh/config # Linux
>vim %UserProfile%\.ssh\config # Windows

Host TestRep
  Hostname github.com
  User git
  IdentityFile ./keys/id_rsa

>git clone TestRep:yanox2/TestRep.git
Cloning into 'remote'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (5/5), done.

これで中央リポジトリと開発環境が構築できました。
ステージングやプロダクションのデプロイ環境については別記事で解説したいと思います。

参考: GitHub のタスク管理やプロジェクト管理を利用した運用方法
参考: GitHub Actions を利用した本番環境適用(デプロイ)の方法

コメント