1 of 56

はじめてのGit & GitHubハンズオン #5

アジアクエスト株式会社 デジタルインテグレーション部 

五十嵐 翔吾

1

2 of 56

今日の予定

2

19:15~19:20 オープニング、進め方の説明�19:20~19:50 座学 バージョン管理の概要�          Git概要�          GitHub概要�          実際の運用について�19:50~20:20 ハンズオン�20:20~20:30 アンケート回答や雑談など予備時間�20:30     完全閉場

3 of 56

本日のハンズオンの概要

GitやGitHubに慣れていない方を対象とし、それぞれの概要を理解し

チーム開発が行える様になることを目指します。

3

Git

GitHub

4 of 56

本日の進め方

4

座学

ハンズオン

また質問用にSlackのワークスペースを用意しています。�上記のリンクを押下することでワークスペースに参加することが可能です。�ご不明点がございましたら #質問 チャンネルでご質問ください。

19:20~19:50

19:50~20:20

5 of 56

バージョン管理の概要

5

  1. バージョン管理システムとは
  2. バージョン管理システムの特徴
  3. バージョン管理システムの変遷

6 of 56

バージョン管理システムとは

ファイルをいつ、誰が、どのように変更したのかをバージョンとして記録するシステムです。VCS(Version Control System)と略されます。

​

6

集中型

分散型

主なバージョン管理システム

7 of 56

バージョン管理システムの特徴

■バージョニング� (履歴機能)

■ブランチング� (履歴を分岐して記録)

7

ver1

ver2

ver3

ver4

新規作成

A機能追加

​

バグFIX

B機能追加

ver3’

ver1

ver2

ver3

ver4

master / main

ver4’

ver5

ver6

機能追加

ver3’’

バグ修正

ver7

8 of 56

バージョン管理システムの変遷

8

集中型

分散型

ローカル・バージョン管理

9 of 56

Git概要

9

  1. Gitとは
  2. Gitの特徴
  3. Git(VCS)で使用する用語

10 of 56

Gitとは

Gitは分散型のバージョンコントロールシステム(VCS)です。

2005年にLinuxのカーネルのバージョンを管理するために開発されました。�元々Linuxのカーネル開発には別のVCSが使われておりましたが、有料化に伴いGitが開発されることとなりました。

Linuxのカーネルを扱うために開発されたので、大容量のファイルを高速に処理できるという特徴があります。

10

11 of 56

Gitの特徴

・分散されたリポジトリ

・他のVCSより処理が早い

・ステージングエリアが存在する��詳細は次ページ以降で説明します

11

12 of 56

Git(VCS)で使用する用語

・リポジトリ� ファイルや変更履歴を保存する領域� (1つのディレクトリ)��・ローカルリポジトリ� 利用者の手元のPCに� 作成・複製されたリポジトリ

・リモートリポジトリ� ネットワーク上のサーバーで� 運用されるリポジトリ

・コミット� 保存された変更(履歴)��・ブランチ� 開発における経路の一つ��・メインブランチ� ブランチの中で、安定した� バージョンのブランチ

・チェックアウト� ブランチを切り替えること

・マージ� ブランチを統合すること��・コンフリクト� ブランチをマージする際に� 変更が競合すること

12

13 of 56

リポジトリについて

・ローカルリポジトリ� 利用者の手元のPCに� 作成・複製されたリポジトリ

・リモートリポジトリ� ネットワーク上のサーバーで� 運用されるリポジトリ

リポジトリとはファイルやディレクトリを保存する領域を指します。�リポジトリはローカルリポジトリとリモートリポジトリの2種類に分けられます。�このようにリポジトリを分散して持つことで障害に対して強いという特徴があります。

13

ローカルリポジトリ

リモートリポジトリ

AさんのPC

ローカルリポジトリ

BさんのPC

※複数人と共有

ローカルもリモートも

全て同一の内容を持っている

14 of 56

ブランチについて

ブランチは開発における経路の一つです。�ブランチには安定したバージョンのメインブランチとそれ以外のサブブランチが存在します。�メインブランチには通常、mainもしくはmasterブランチという名称をつけます。�本ハンズオンではmasterという名称で進めます。

14

ver3’

ver2

ver3

ver4

メインブランチ

ver4’

ver5

ver6

サブブランチ

ver1

ブランチは最終的に元のブランチに統合します

ブランチを統合する作業をマージと呼びます

ブランチを切り替えることをブランチをチェックアウトするといいます

15 of 56

コミットについて

コミットは変更を履歴に残したものを指します。�コミットにはファイルの追加/更新の情報、日時、コミットメッセージ、作業者などが記載されています。�

15

ver4’

ver2

ver3

ver4

メインブランチ

ver5’

ver5

ver6

サブブランチ

ver1

・hoge/memo1.txt 新規追加

・hoge/memo2.txt 新規追加� 2022/12/1 19:15:00

 コミットメッセージ

コミット

管理対象ファイル

・hoge/memo1.txt

・hoge/memo2.txt

・hoge/images/img1.jpg

・hoge/images/img2.jpg

・hoge/images/img1.jpg 新規追加

・hoge/images/img2.jpg 新規追加� 2022/12/3 20:10:00

 コミットメッセージ

コミット

16 of 56

コミットの流れについて

Gitには履歴、ステージングエリア、作業エリアの3種類が存在します。�ステージングエリアが存在することで、任意の変更をコミットすることが可能になります。�

16

履歴

ステージングエリア

(インデックス)

作業エリア

ver2

ver3

ver4

ver1

ver5

差分を比較

差分を比較

コミットしたいファイルや

ファイルの一部分を指定してステージングに追加

ステージングの内容を

コミット

17 of 56

コンフリクトについて

コンフリクトはマージを行う際にファイルの変更の競合によって発生します。�マージの際はGitが自動でマージを行いますが、Gitが判断できない場合はコンフリクトが発生します。��

17

ver4’

ver2

ver3

ver4

メインブランチ

ver5

ver6

サブブランチA

ver1

​

・hoge/memo1.txt 1行目を編集

 例)タイトル

コミット

ver4’’

サブブランチB

​

・hoge/memo1.txt 1行目を編集

 例)title

コミット

18 of 56

一連の流れについて

これまでの流れを図にまとめると以下のような形になります。�ローカルの変更をリモートに反映することをpush、リモートの変更をローカルに反映することをpullといいます。

18

ローカルリポジトリ

リモートリポジトリ

AさんのPC

ローカルリポジトリ

BさんのPC

push

リポジトリの中には

ブランチの情報が含まれています

push

pull

masterブランチ(メインブランチ)

hogeブランチ(サブブランチ)

hugaブランチ(サブブランチ)

pull

ブランチの中にはコミット情報が

含まれています

ステージングエリアの内容を履歴に反映したものがコミットです

作業ブランチの切り替えをcheckout

ブランチ同士の統合をmergeと呼ぶ

add

comimt

19 of 56

GitHub概要

19

  1. GitHubの概要
  2. Gitを利用したサービス

20 of 56

GitHubの概要

GitHubはGitを利用した開発プラットフォームです。�主な利点は以下の3点です。��・リモートリポジトリとしての利用�・チーム開発に役立つ機能が豊富で、差分の比較やマージを画面上で行える� → プルリクエスト�・リポジトリを公開することができる

20

21 of 56

プルリクエスト

GitHub上で差分をGUIで確認しながら�マージ作業を行うことが可能です。

21

22 of 56

リポジトリを公開することができる

laravelで検索すると44万リポジトリ存在

他者が作成したソースコードを利用可能

Star(いいねのようなもの)の数によって�信頼性などを判断可能

22

23 of 56

Gitを利用したサービス

23

24 of 56

実際の運用について

24

  1. 実際のブランチ運用について
  2. 実際のマージの流れについて
  3. Git-flowとGitHub flowについて

25 of 56

実際のブランチ運用について

実際の運用は以下のようにmasterからdevelopを作成し、developから作業用ブランチを作成します。�機能の開発がひと段落したタイミングで作業用ブランチ→develop→masterの順でマージを行い、リリースを行います。

25

ver1

master

ver2

ver3

develop

ver1

ver2

機能Aの開発

ver2

機能Bの開発

ver3

ver4

ver3

ver

4

ver5

ver6

ver8

ver

7

ver2

ver3

ver4

ver5

ver6

ver8

ver

7

26 of 56

実際のマージの流れについて

実際の開発ではGitHubのようにGUI上で差分を確認できるツールを使う場合が多いです。�個人が勝手にマージを行うとバグが出やすいため、必ずレビュワーがレビューをしてからマージを行います。

26

ローカルリポジトリ

リモートリポジトリ

AさんのPC

merge�&push

ローカルリポジトリ

リモートリポジトリ

AさんのPC

push&

プルリクエスト

バグが起こり

やすい

レビュワー

レビュー

マージ

バグが起こり

にくい

27 of 56

Git-flowとGitHub Flowについて

Gitのワークフローの一つ。

→チームでGitを利用するときのルールのようなもの�

27

【図解】Git-flow、GitHub Flowを開発現場で使い始めるためにこれだけは覚えておこう

https://atmarkit.itmedia.co.jp/ait/articles/1708/01/news015.html

28 of 56

ハンズオン

28

29 of 56

ハンズオンの進め方

以降、Gitコマンドの実行はコマンドライン上で行い、GitHubの操作はgithub.comで行います。�GitHubへのログインやコマンドラインツール(windowsはgit bash macはterminalなど)の起動をお願いします。

GitやGitHubの準備がまだの人は以下の資料を参考に設定を進めてください。

設定資料

また、ハンズオンではグレー枠内に実行してほしいコマンドが記載されています。�グレー枠内のコマンドをコピーして実行して下さい。

​

29

// ディレクトリの作成

$ mkdir git_handson

​

ハンズオンへの質問大歓迎です!slackでお待ちしております。

30 of 56

ハンズオンで触れる主なGitコマンド

・init�・clone�・add�・status�・diff�・commit�・branch�・checkout�・log�・push����������

gitの初期化、実行したディレクトリ配下をgitのリポジトリにする�リモートのリポジトリを参照し、ローカルリポジトリを作成する�ステージングへファイルを追加�現在のgitのステータスを確認、ステージングや作業エリアの差分一覧を表示�ステージングや作業エリアの差分をファイルの中身の比較など詳細に表示�ステージングエリアの内容を履歴に追加�ブランチの作成や一覧の表示などブランチの対する操作を行う�ブランチの切り替えを行う�履歴の一覧を表示する�ローカルの変更をリモートに対して反映する

30

※コマンドの一覧は日本語版リファレンスを参照

31 of 56

ハンズオンの目次

・ローカルにリポジトリを作成する�・新規ファイルの作成~コミットを行う�・GitHub上にリポジトリを作成しpushを行う�・新規でブランチを作成してGitHub上でPRを出してみる�・GitHub上でPRをマージする�・git cloneを利用してみる

31

32 of 56

ローカルにリポジトリを作成する

ディレクトリを作成し、作成したディレクトリ配下でコマンドを実行しましょう。�そのディレクトリ配下がgitの管理対象となります。

32

// ディレクトリの作成

$ mkdir git_handson

​

// ディレクトリの移動

$ cd git_handson

​

// Gitで管理対象のリポジトリ作成

$ git init

​

作成したディレクトリ配下に.gitディレクトリが作成されます。�このディレクトリにはGitのconfigファイルなどが配置されており、このファイルが存在するディレクトリがGitの管理対象と認識されます。

​

またリポジトリの作成方法は2種類存在します。

・git initでリポジトリをローカルに作成しリモートにpushする方法

・リモートに存在するリポジトリをcloneでローカルにコピーする方法

33 of 56

ハンズオンの目次

・ローカルにリポジトリを作成する�・新規ファイルの作成~コミット~ログの確認を行う�・GitHub上にリポジトリを作成しpushを行う�・新規でブランチを作成してGitHub上でPRを出してみる�・GitHub上でPRをマージする�・git cloneを利用してみる

33

34 of 56

Gitの状態を確認する

コマンドを実行し、Gitの状態を確認してみましょう

ファイル追加前

ファイル追加後

34

// gitの状態の確認

$ git status

​

// ファイルの作成

$ echo "# test" >> README.md

​

// 再度gitの状態の確認

$ git status

​

​

​

​

​

​

​

Git管理されていないファイルがUntracked filesとして表示されます。

35 of 56

ファイルをコミットする

コマンドを実行し、ファイルをコミットしてみましょう

ステージングエリアへの追加後

コミット後

コミット後のメッセージ

35

// ステージングエリアへの追加

$ git add README.md

​

// gitの状態の確認

$ git status

​

// ファイルのコミット

$ git commit -m "first commit"

​

// 再度gitの状態の確認

$ git status

​

​

​

​

​

commitするとステージングと履歴

との差分がなくなります。

36 of 56

コミットログを確認する

コマンドを実行し、コミットログを確認してみましょう

コミットログの内容

36

// コミットログの確認

$ git log

​

​

​

​

​

​

commitの後に続く文字列は一意なコミットのIDです。

Authorにはコミットしたユーザー名とメールアドレスが記載されています。

Dateにはコミットした日時が記載されています。

その下にはコミットメッセージが記載されています。

37 of 56

ハンズオンの目次

・ローカルにリポジトリを作成する�・新規ファイルの作成~コミット~ログの確認を行う�・GitHub上にリポジトリを作成しpushを行う�・新規でブランチを作成してGitHub上でPRを出してみる�・GitHub上でPRをマージする�・git cloneを利用してみる

37

38 of 56

GitHub上でリポジトリを作成する

GitHubにアクセスし、Create repositoryボタンを押してリポジトリを作成しましょう。�リポジトリ名はtest、公開範囲はPrivateでCreate repositoryを押下してください。

38

39 of 56

GitHub上でリポジトリを作成する

​

39

リポジトリが表示されれば成功です。

​

ちなみに今回はプライベートの設定でリポジトリを作成しました。

​

公開設定には2種類が存在します

・プライベートリポジトリ

・パブリックリポジトリ

​

パブリックリポジトリは世界中のすべてのユーザーに公開されてしまいます。

​

基本的に業務で作成する場合や個人でも公開を想定していない場合などは、情報漏洩が起きないようにプライベートにしましょう。

​

OSS等の世界中のユーザーが利用することを想定しているプロジェクトなどはパブリックで作成されています。

40 of 56

リモートリポジトリを設定する

以下のコマンドを実行しリモートリポジトリを設定しましょう。

40

// リモートリポジトリの設定

$ git remote add origin 先ほど作成したリポジトリのURL

​

// リモートリポジトリの確認

$ git remote -v

​

41 of 56

ブランチをPushする

以下のコマンドを実行しブランチをPushしましょう。

​

README.mdが反映されていたら完了です。

41

// 現在のブランチの確認

$ git branch

​

​

​

// pushするリモートの確認

$ git remote -v

​

​

​

// ブランチのPush

$ git push origin master

42 of 56

エラーが出た場合

以下のコマンドを実行しブランチをPushしましょう。

​

42

「Personal access tokens」へアクセス

→ 右上の「Generate new token」をクリックし「Generate new token(classic)」を選択し、Select scopesで「repo」にチェックをつけてアクセストークンを作成する。

トークンをコピーし、パスワードに使用してください。

参照:https://style.potepan.com/articles/34189.html#GitHubAccess_token

43 of 56

ハンズオンの目次

・ローカルにリポジトリを作成する�・新規ファイルの作成~コミット~ログの確認を行う�・GitHub上にリポジトリを作成しpushを行う�・新規でブランチを作成してGitHub上でPRを出してみる�・GitHub上でPRをマージする�・git cloneを利用してみる

43

44 of 56

ブランチを作成し、切り替える

以下のコマンドを実行してブランチの作成と切り替えを行いましょう。

44

// ブランチの作成

$ git branch test1

​

$ git branch

​

​

​

// ブランチの切り替え

$ git checkout test1

​

$ git branch

git checkout -b test1 を実行すると、test1ブランチの作成とtest1

ブランチのチェックアウトを同時に行うこともできます。

�今回はmasterからブランチを作成したので、masterへのコミット内容がtest1にも反映されています。

git logコマンドでコミット内容を確認することができます。

​

ver1’

メインブランチ

(master)

サブブランチ

(test1)

ver1

45 of 56

ファイルを修正しコミット~プッシュまで行う

既存のファイルを書き換えてコミット~プッシュまで行ってみましょう。

45

// ファイルを編集します

// vimがわからない場合はテキストエディタなどで編集してください

// 「test」を「はじめてのGit & GitHubハンズオン」に変えてみましょう

$ vim README.md

​

$ コミットまでの流れは前までのページに載っています

探して実行してみてください

​

// プッシュは以下のコマンドで実行します

$ git push origin test1

方法がわからない場合は

「ファイルをコミットする」

のページを見てみてください

46 of 56

GitHub上でPR(プルリクエスト)を出してみる

46

GitHubにアクセスし�PRを作成してください��Pull requestsタブの

New pull requestからでも

PRの作成が可能です。

47 of 56

ハンズオンの目次

・ローカルにリポジトリを作成する�・新規ファイルの作成~コミット~ログの確認を行う�・GitHub上にリポジトリを作成しpushを行う�・新規でブランチを作成してGitHub上でPRを出してみる�・GitHub上でPRをマージする�・git cloneを利用してみる

47

48 of 56

GitHub上でPRをマージしてみる

Pull requestsタブから、README.mdの修正というコミットを表示し、Merge pull request、�Confirm mergeの順に進めてもらえればマージ完了です。

48

49 of 56

マージした内容をローカルにも反映させる

現時点ではリモートリポジトリに変更を反映させただけです。

git pullを実行し、リモートリポジトリの内容をローカルリポジトリに反映します。

49

// masterブランチにチェックアウト

$ git checkout master

​

// この時点ではmasterブランチに反映されていない�$ git log master

$ cat README.md

​

// git pullを実行

$ git pull origin master

50 of 56

ハンズオンの目次

・ローカルにリポジトリを作成する�・新規ファイルの作成~コミット~ログの確認を行う�・GitHub上にリポジトリを作成しpushを行う�・新規でブランチを作成してGitHub上でPRを出してみる�・GitHub上でPRをマージする�・git cloneを利用してみる

50

51 of 56

git cloneを実行してみる

​

git cloneとは、既存のリポジトリを複製(コピー)することです。

下記リポジトリをcloneしてみましょう。

51

git clone リポジトリのURL

52 of 56

git cloneを実行してみる

​

以下のコマンドを実行してリポジトリをcloneしてみましょう。

52

// 適当なディレクトリを作成

$ cd ../

$ mkdir git_handson_clone

$ cd git_handson_clone

​

// git cloneを行いリポジトリをcloneする

$ git clone https://github.com/shogo-igarashi/git-clone-practice.git

​

// ディレクトリを確認し移動する

$ ls -al

$ cd git-clone-practice

​

// cloneできているか確認する

// 正常にcloneできていればgit statusが使用できるはず

$ git status

​

// ディレクトリの中を確認

$ ls -al

​

// ファイルをブラウザで展開

// Mac OS

$ open index.html

// Windows

$ start index.html

53 of 56

これでハンズオン内容は終了です

​

お疲れさまでした。

Gitは奥が深く、本ハンズオンで紹介したコマンドは一部に過ぎません。

今後も実際に手を動かしながら、Gitを使いこなせるようにしましょう!

�他のコマンドについてはリファレンスを参照してみてください。

​

53

54 of 56

アンケートにご協力ください

よろしければアンケートにご回答ください。�アンケートの結果などがよいと次回の開催の励みになります。

​

また本資料の内容に間違いなどあれば、connpass等でぜひメッセージをください。�今後の参考になります。よろしくお願いいたします。

54

55 of 56

宣伝

アジアクエストはconnpassイベントをやってます!

55

56 of 56

END

56