RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【超入門】初心者のためのGitとGitHubの使い方

f:id:itoken1013:20200529193757p:plain

はじめに

こんにちは。itoken1013です。
今年もラクスにたくさんの新入社員が入社しました。
日本中の新エンジニアが研修に取り組んでいるであろうこの頃、今回はGitとGitHubの超基本的な使い方をまとめてみたいと思います。
今やエンジニアにとって必須であるGitですが、チーム開発を行うためにはGitHubも使いこなせると、
よりスムーズに開発を進めることができるでしょう。
まずは今回の記事で基本的な使い方を押さえていただければと思います。

基本知識

まず、バージョン管理とは

ソースコードをはじめとしたファイルの変更履歴(バージョン)を管理することを「バージョン管理」と呼びます。
ファイルの追加や変更の履歴情報を管理することで、過去の変更箇所を確認する、特定時点の内容に戻す、などの「バージョン管理」という作業が可能となります。

このバージョン管理という概念が存在しない状況下での開発作業を考えた場合、
バグ発生時には混入時期が分からず、修正が遅れる、発生したバグによる影響度が不明確になる、
結果としてユーザーの満足度低下につながるなどのリスクが高まります。
また後述するチームでの開発においても、メンバー間での開発内容を連携することが難しくなり、
開発の生産性を大きく損なうことにつながります。

以上のことより、ソフトフェアの開発において、バージョン管理への理解は必須となります。

Gitとは

上記で説明しましたバージョン管理を行うためのシステムがGitです。

他のバージョン管理システムと比較したGitの特徴として、「分散型」のバージョン管理システムである点が挙げられます。
バージョン管理システムは大きく「集中型」と「分散型」に分けられます。
「集中型」のバージョン管理システムでは、特定の場所にあるリポジトリへの接続が必須となりますが、
「分散型」のバージョン管理システムでは個々人のマシン上にリポジトリを作成して開発を行うことができ、現在のチーム開発における主流となっています。

Gitの具体的な使い方は、後ほど紹介していきます。

リポジトリとは

バージョン管理によって管理されるファイルと履歴情報を保管する領域を、リポジトリと呼びます。
リポジトリの配下でファイルやディレクトリを操作することで、私たちはバージョン管理を行うことができます。
分散型のバージョン管理システムであるGitでは、まず個々人のマシン上にあるリポジトリ上で作業を実施後、
作業内容をネットワーク先のサーバー上などにあるリポジトリに集約する流れで開発を進めていきます。
この個々人のリポジトリを「ローカルリポジトリ」、集約先となるリポジトリを「リモートリポジトリ」と呼びます。
Gitを使った開発ではこの区別が重要となるため、しっかり理解いただければと思います。

f:id:itoken1013:20200529191832p:plain

GitHubとは

複数人のエンジニアがリモートリポジトリとして活用する他、チーム開発を行うための機能を提供するWEBサービスGitHubです。
リポジトリとしての機能を持つ他にも、コードレビュー機能Wikiなどのコミュニケーションツールとしての機能を持ち、組織規模を問わず、多くの企業・団体がソフトウェア開発で利用しています。

後述ではリモートリポジトリの作り方、またコードレビューを実施する方法を紹介していきます。

1. GitとGitHubの超基本的な使い方

概要の説明を踏まえたところで、まずはGitとGitHubの超基本的な使い方を説明していきます。
Gitの初期設定を踏まえ、以下の流れでGitHubにファイルを反映してみましょう。

1-1. Gitのインストール

まずはGitを利用できる状態にしていきましょう。

  • Macの場合
    MacであればGitはインストール済となりますため、本作業は不要です。

  • Windowsの場合
    公式ページからインストーラーをダウンロードします。
    インストーラーを起動すると多くの設問が表示されますが、 本記事の作業では全てデフォルトの状態で問題ありません。
    「Next」ボタンをクリックし続け、以下の画面まで辿り着きましたら「Install」ボタンでインストールを行います。
    f:id:itoken1013:20200529103101p:plain

インストールが完了しましたら、Git Bashを起動します。
Git Bashとは、Windows上でGitのコマンドを操作するためのツールです。
Git Bashを起動後、以下のコマンドを入力してGitのバージョン情報が表示されることを確認してください。

$ git --version
git version 2.26.2.windows.1

※以降のGit操作は全てターミナルやGit Bashなどのコマンドラインとして紹介していきますが、
GitはGUIツールを使って利用することも可能です。
「Git GUI」などで検索の上、利用シーンに応じて使い分けていただければと思います。

1-2. Gitの初期設定

Macだとターミナル、WindowsだとGit Bashでの作業です。
Gitではソースコードの変更履歴を確認できますが、「誰が」変更したかを確認するための情報が必要となります。
この作業者を識別するための情報として、ユーザ名とメールアドレスを登録する作業を行います。

  • ユーザ名
    以下のコマンドを入力してください。
git config --global user.name 任意のユーザ名
  • メールアドレス
    以下のコマンドを入力してください。
git config --global user.email 任意のメールアドレス

最後に以下のコマンドを入力すると、上記のユーザ名とメールアドレスが登録されていることを確認できます。

$ git config --list
core.symlinks=false
core.autocrlf=false
color.diff=auto
 ・
 ・
 中略
 ・
 ・
user.name=設定したユーザ名
user.email=設定したメールアドレス
 ・
 ・

1-3. GitHubのアカウント作成

次にGitHubにアカウントを作成してみましょう。
GitHubへアクセスし、ユーザ名・メールアドレス・パスワードを入力し、「Sign up for GitHub」ボタンをクリックします。

f:id:itoken1013:20200526170214p:plain

次に以下の画面で「Verify your account」の設問に回答後、「Join a free plan」を選択します。 f:id:itoken1013:20200526170520p:plain

次に「Welcome to GitHub」と表示された画面へ進みますが、一番下まで進み、
「Complete setup」ボタンをクリックしてください。 f:id:itoken1013:20200526170954p:plain

~~ 中略 ~~

f:id:itoken1013:20200526171010p:plain

最後にこちらの画面が表示され、入力したメールアドレスへ認証用のメールが配信されます。
メールを確認の上、認証を行ってください。
f:id:itoken1013:20200526171857p:plain

ここまででGitHubのアカウント作成は完了です。

1-4. リモートリポジトリを作成する

GitHubにアクセスし、リモートリポジトリを作成します。
トップ画面で「Create Repository」ボタンをクリックしてください。
リポジトリ作成画面に移動します。

f:id:itoken1013:20200526174202p:plain

以下の画面では、「Repository name」には任意のリポジトリ名を入力します。
ここでは例として、「rakus」というリポジトリ名を入力しておきます。

次にリポジトリの種類として、「Public」か「Private」を選択します。
GitHubでは長らく有料会員のみ「Private」を選択できていましたが、2019年からFreeプランでも「Private」を作成できるようになりました。
今回はどちらを選択いただいても構いません。

  • 「Public」を選択した場合:他のユーザーがソースコードを閲覧することが可能となります。
  • 「Private」を選択した場合:非公開となります。

次に「Initialize this repository with a README」ですが、リポジトリの説明や使い方を記述するREADMEファイルを事前作成しておく場合にはチェックをONにします。

最後の「.gitignore」や「license」は None を選択で構いません。

f:id:itoken1013:20200526174313p:plain

最後に「Create repository」ボタンをクリックすると、リポジトリが作成されます。

1-5. ローカルリポジトリを作成する

次にローカルリポジトリを作成していきます。

今回は例として「rakus」というディレクトリを作成してください。
その後、git initコマンドを入力することで、rakusディレクトリをリポジトリとして初期化します。
コマンドはrakusディレクトリ上で実施する必要がある点に注意してください。

git init

1-6. ローカルリポジトリにコミットする

コミット(commit)とは、ファイルの追加・変更をローカルリポジトリに反映する操作を意味します。
実際にローカルリポジトリにファイルを追加してみましょう。

まずは1-5の「rakus」ディレクトリ配下で「index.html」というファイルを作成します。
テキストエディタなどでファイルを作成してください。
この状態ではファイルを作成しただけですので、まだリポジトリにはファイルは追加されていません。
f:id:itoken1013:20200526194122p:plain

次に以下のコマンドを入力し、インデックスへ「index.html」を追加します。
インデックスとは、コミット前に変更内容を一時的に保存する領域を指し、インデックスに追加されたファイルのみがコミットの対象となります。

git add index.html

最後に、インデックスへ追加したファイルをコミットします。
以下のコマンドを入力すると、インデックスに存在するファイルがローカルリポジトリへ追加されます。

git commit -m "[Add] index"

ここで -m はコミットメッセージを入力するためのオプションです。
コミットメッセージを残すことでより詳細な履歴情報を残すことができ、後々ログからコミット内容を確認する際に役立ちます。
積極的に活用しましょう。

また、コミットメッセージを含めた変更履歴(ログ)は、以下のgit logコマンドを入力することで以下のように確認できます。

$ git log
commit 6a8e257...コミットハッシュ.....642e3 (HEAD -> master)
Author: ユーザ名 <メールアドレス>
Date:   Tue May 26 18:45:56 2020 +0900

    [Add] index

1-7. リモートリポジトリにプッシュする

最後にローカルリポジトリの変更をGitHub上のリモートリポジトリに反映するプッシュ(push)を行います。

まずはローカルリポジトリとリモートリポジトリを紐づけをするために、ローカルリポジトリ(rakus)配下で以下のコマンドを入力します。

git remote add origin https://github.com/ユーザ/rakus.git

これでリモートリポジトリの情報がローカルリポジトリに登録されました。

次にローカルリポジトリの変更内容をリモートリポジトリに反映させるため、以下のコマンドを入力してプッシュを行います。
GitHubのユーザ名とパスワードを求められますので、アカウント登録時に設定した内容を入力してください。

git push origin master

これでリモートリポジトリへ反映させることができました。
GitHubでも変更内容が反映されていることが確認できます。

f:id:itoken1013:20200526194614p:plain

GitHub上に公開鍵情報を登録することで、プッシュ時にユーザ名とパスワードを都度入力する手間を省くことができます。
詳細な手順は割愛しますが、興味のある方は調べてみてください。

2. GitとGitHubを使ったチーム開発の超入門

ここまでGitとGitHub基本的な使い方を紹介してきましたが、チームで他のメンバーと開発を行う際の使い方についても、基本的な操作を紹介していきたいと思います。
Gitにはブランチ(branch)という仕組みがあり、チーム開発を行う際にはブランチを使いこなす必要があります。

2-1. リポジトリをクローンする

あなたが新たに開発現場に参加することになった場合、すでに存在するリモートリポジトリからソースコードを取得することになります。こちらの作業を実施してみましょう。
先ほどの「rakus」とは別のディレクトリ(「rakuraku」とします)を作成し、以下のコマンドを実行してください。

git clone https://github.com/ユーザ名/rakus.git

「rakuraku」ディレクトリ上に先ほどプッシュした index.html が表示されたかと思います。
このようにリモートからリポジトリから取得する作業をクローン(clone)と呼びます。

2-2. ブランチを作成する

ソフトウェア開発では同時進行で複数のバージョンの開発が行われることは珍しいことではありません。
また突発的なバグ対応が発生することもあり、こちらも新たにリリースするバージョンとは別軸で対応する必要が出てきます。
これらを並行しつつ開発を実現するための仕組みとして、Gitにはブランチ(branch:枝、枝分かれ)という機能が提供されています。
以下の図に示すようにブランチを使い、変更履歴を分岐した開発を実現することができます。

f:id:itoken1013:20200529192641p:plain

ブランチを作成するには、git branchコマンドを使います。
例として、現在作業中のブランチ(デフォルトで存在するブランチを「master」と呼びます)から「feature1」というブランチを作成してみます。
以下のようにコマンドを入力してください。

git branch feature1

これでmaster からfeature1 ブランチが作成されました。
次にfeature1 ブランチ上で作業を行うために、checkoutコマンドを入力してブランチを移動します。

git checkout feature1

ここでgit branchコマンドを入力すると、現在ローカルリポジトリ上に存在する「master」と「feature1」というブランチが表示されます。
「*」は作業を行っているブランチを示しています。

$ git branch
* feature1
  master

2-3. ブランチでコミットする

feature1ブランチでの作業として、今度はlogin.htmlというファイルを作成してみます。
f:id:itoken1013:20200526195527p:plain

作成したlogin.htmlをfeature1ブランチにコミットします。
以下のコマンドを入力してください。

git add login.html
git commit -m "[Add] login"

2-4. リモートリポジトリにプッシュする

次に、リモートリポジトリ(GitHub)にもfeature1ブランチの内容を反映します。
1-7の手順と異なり、push先のブランチが feature1 になっている点に注意してください。

git push origin feature1

GitHubにアクセスすると、2つのブランチ(master と feature1)が存在することが確認できます。
f:id:itoken1013:20200529154843p:plain

またfeature1 ブランチには変更内容がプッシュされたことが確認できます。
f:id:itoken1013:20200529154850p:plain

逆にプッシュ先ではないmaster には変更内容が反映されていないことも確認できます。
f:id:itoken1013:20200529154859p:plain

2-5. コードレビュー・マージ

ブランチでの開発作業が完了しましたら、メインとなるブランチ(一般的には master)に変更内容を取り込み、開発内容を統合します。
このように特定のブランチの変更内容を別のブランチに取り込むことをマージと呼びます。

このマージを行う際、GitHub上ではプルリクエスと呼ばれる機能を使い、コードレビューを行うことができます。
指摘がある場合にはコメントを追加し、作業者に修正を促すことができます。
こちらの概要についても説明します。

  • レビューの依頼
    まずはGithub上でfeature1ブランチを開き、「New Pull Request」をクリックします。
    f:id:itoken1013:20200529155124p:plain

次にプルリクエストを作成します。
以下の点を確認・入力の上、「Create pull request」ボタンをクリックしてください。

  • ① マージ元・先のブランチ
  • ② レビュアー(レビューを行う人)
  • ③ レビュー内容
  • ④ レビュー・マージ対象のソースコード

f:id:itoken1013:20200529160541p:plain f:id:itoken1013:20200529160602p:plain

  • レビューの実施

プルリクエストを受取ったレビュアーは「Pull requests」タブを開き、「Files changed」からソースコードを確認します。
指摘がある場合には、ソースコードのビュー上にコメントを追加し、開発者へ修正を促します。

f:id:itoken1013:20200529161652p:plain

内容に問題がなければ、「Conversation」の「Merge pull request」をクリックしてレビューを完了します。
このタイミングでブランチのマージも実施され、feature1 の内容が master にも反映されます。

f:id:itoken1013:20200529163226p:plain

マージを行ったことで、login.html が master 上にも表示されることが確認できます。
f:id:itoken1013:20200529163906p:plain

実際のレビューでは、開発する機能やバグ修正の複数のソースコードをプルリクエストで確認することとなります。
また指摘が発生し、何度も開発者とレビュアーとの往復が発生することも珍しくはありません。
こちらの基本的な流れをベースに、実務でのコードレビューに臨んでいただければと思います。

2-6. リモートリポジトリからプルする

リモートリポジトリの master にはマージが行われましたが、あなた(および他の開発者)のローカルリポジトリ上の master にはまだマージ内容が反映されていません。
今後も開発作業を進めていくには、マージした内容(ここでは login.html )をローカルリポジトリの master に取得し、最新化する必要があります。
この場合、 プル(pull) という操作を行うことで、リモートリポジトリから変更内容を取得することができます。

まずはブランチをmaster に切り替えてみましょう。
この時点ではまだ先ほどマージしたlogin.html が確認できないはずです。

git checkout master

次に git pull コマンドを実行し、リモートリポジトリのmaster から最新の変更内容を取得します。

git pull
remote: ・・・・
・
・
・
From https://github.com/ユーザ名/rakus
   f5・・27 e4・・0f  master     -> origin/master
Updating f5・・27 e4・・0f
Fast-forward
 login.html | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 login.html

これでローカルリポジトリのmaster には、リモートリポジトリの最新の内容が反映されました。
ls コマンドを実行すると、login.html を確認することができます。
またgit log コマンドを入力することで、これまでの全作業の変更履歴を確認することもできます。

$ ls
index.html  login.html
$ git log
commit 99c9637・・・・5281c0e (HEAD -> master, origin/master, origin/HEAD)
Merge: f5・・27 e4・・0f
Author: ユーザ名
Date:   Fri May 29 19:28:48 2020 +0900

    Merge pull request #1 from リポジトリ名/feature1
    
    [Add] login

commit e4ccb0fa2・・・・・3e33b983c0 (origin/feature1, feature1)
Author: ユーザ名 <メールアドレス>
Date:   Fri May 29 19:26:08 2020 +0900

    [Add] login

commit f5dbc270a・・・・・735f93a53d90a1c1068
Author: ユーザ名 <メールアドレス>
Date:   Tue May 26 18:45:56 2020 +0900

    [Add] index

このようにして他の開発者が変更した内容も取得することで、チームでの開発を進めていくことができます。

まとめ

GitとGitHubの超入門として、概要を紹介しました。
GitもGitHubもここだけでは全てを紹介し切れない奥が深いツールになります。
今回紹介しました基本的な内容をベースに、より理解を深めていっていただければ嬉しいです。
ではでは。

Copyright © RAKUS Co., Ltd. All rights reserved.