Slide 1

Slide 1 text

1 Confidential - Do Not Share Build@Mercari Week 1 Git + Development flow Hunter Che

Slide 2

Slide 2 text

2 Confidential - Do Not Share Table of Contents ● Introduction ● ターミナルの使い方 ● Gitとは ● Gitコマンド 基礎編 ● Gitを用いた開発を始めてみよう! ● Githubを用いた複数人開発の解説 ● チーム開発 実践編 ● 宿題の説明

Slide 3

Slide 3 text

3 Confidential - Do Not Share Introduction ● Hideaki Touhara ● iOS Engineer ● Hobbies: ○ 二郎系、カレー屋めぐり ○ スノボ ○ 学生時代はARアプリとかVRゲームとか作って ました!

Slide 4

Slide 4 text

4 Confidential - Do Not Share コマンドって? ● コンピュータに指示するための命令 ● ターミナルやコマンドプロンプトといったツールを用いて実行する ● 別名: 「黒い画面」 ● これ ->

Slide 5

Slide 5 text

5 Confidential - Do Not Share 何ができるの? ● 今回の講座ではディレクトリ操作のためのコマンドのみ使用 ● でも、他にもコマンドの方が効率が良いことがたくさんある! ● 自動化もしやすい!

Slide 6

Slide 6 text

6 Confidential - Do Not Share ファイル操作のための基本コマンド ● ls ● pwd ● cd ● mkdir ● touch

Slide 7

Slide 7 text

7 Confidential - Do Not Share ls ● 現在いるディレクトリ内のファイル一覧を取得できる ○ ls -a で隠しファイル含めて全表示

Slide 8

Slide 8 text

8 Confidential - Do Not Share pwd ● 現在のディレクトリ位置を表示

Slide 9

Slide 9 text

9 Confidential - Do Not Share cd ● ディレクトリ間を移動する ○ cd ~でホームディレクトリに移動 ○ cd .. で一個親の階層に上がる ○ cd ディレクトリ名で特定の子の階層に移動 ● ↑でExampleディレクトリに移動したいときは “cd Example”

Slide 10

Slide 10 text

10 Confidential - Do Not Share mkdir [ディレクトリ名] ● ディレクトリを作成

Slide 11

Slide 11 text

11 Confidential - Do Not Share touch [ファイル名] ● ファイルを作成

Slide 12

Slide 12 text

12 Confidential - Do Not Share Git

Slide 13

Slide 13 text

13 Confidential - Do Not Share Git以外でバージョン管理する ● 例: Excel 「レポート_東原秀亮」 ↓ 「レポート_東原秀亮_20200403」 ↓ 「レポート_東原秀亮_20200501」

Slide 14

Slide 14 text

14 Confidential - Do Not Share Git以外でバージョン管理する ● 例: Excel ↓ 「レポート_東原秀亮_最終版」 ↓ 「レポート_東原秀亮_最終版_修正版」

Slide 15

Slide 15 text

15 Confidential - Do Not Share Git以外でバージョン管理する ● 例: Excel ↓ 「レポート_東原秀亮_最終版_20200520」 ↓ 「レポート_東原秀亮_最終版_latest」

Slide 16

Slide 16 text

16 Confidential - Do Not Share 最終版 _latest? ??

Slide 17

Slide 17 text

17 Confidential - Do Not Share Gitとは ● バージョン管理システム ○ 履歴確認、バックアップ、複数人開発などに適している ● 前に記録した部分からの差分を見て、また記録 -> サーバー側に保存 ○ サーバーを提供してくれているのが Github ● 昔の状態に戻す、参照するのが簡単 ● 複数人で開発するときに、自分の変更差分が分かりやすい ● -> 安全に開発できるので仕事での開発に向いている ● -> ほとんどのIT企業で使われている!(はず)

Slide 18

Slide 18 text

18 Confidential - Do Not Share もうちょっと詳しく ● プロジェクトのソースコードに今までの変更 履歴も含めたものをRepositoryといいま す ● やることは大きく分けて2つ ○ 1. 自分の変更をサーバー上にあげる ○ 2. 誰かがあげた更新を自分の手元に取り込む ○ -> 1,2を必要に応じて使用することで複数人で開 発を進めることができる リモート Repository(Github上にある) ローカルRepository A ローカルRepository B リモートを更新 反映されたリモートを手元に取 り込む

Slide 19

Slide 19 text

19 Confidential - Do Not Share Gitコマンド ● git init ● git status ● git diff (--cached) ● git add ● git commit ● git log ● git remote add ● git push

Slide 20

Slide 20 text

20 Confidential - Do Not Share git init ● 現在いるディレクトリ以下をgitの管理下に置きます ● .gitという隠しディレクトリができる ● これでローカルリポジトリを作成したことになります ● -> 後述するgit cloneかこのコマンドでgit管理を始めます

Slide 21

Slide 21 text

21 Confidential - Do Not Share git status ● 現在のどのファイルに変更が起きているかを知ることができます ● 変更差分がstagingにいるのか、working directory(後述)なのかなどもわかる

Slide 22

Slide 22 text

22 Confidential - Do Not Share git diff ● git diffだけだとworking directoryの差分が見れる ● git diff --cachedとすると、stagingの差分が見れる ● 赤の部分が削除、緑が追加を表します

Slide 23

Slide 23 text

23 Confidential - Do Not Share

Slide 24

Slide 24 text

24 Confidential - Do Not Share Staging? Working directory? ● 変更したものは一旦 Working directory上に はいる ● commitしたい変更だけ stagingに移動させる ● その後commitすることで Local repositoryに記録さ れる ● commitしたものしか remote側には反映されな い Local repository add commit push Staging/ index Working directory

Slide 25

Slide 25 text

25 Confidential - Do Not Share git add ● 差分をstagingにあげるコマンドです ● “git add .”で変更した全ての差分をstagingにあげます ● “git add ファイル名”で特定のファイルの変更部分だけstagingにあげます ● “git add -p”でどれをあげるか選ぶことができます

Slide 26

Slide 26 text

26 Confidential - Do Not Share git commit ● Stagingにあがっている変更をlocal repositoryに記録します ● git commit -m “メッセージ” ○ ひとつひとつのコミットにはコメントをつけることができます ○ 何をやったか具体的に書けるレベルで commitするのが良いです ○ 悪い例: git commit -m “Implement funcA, funcB and funC” ○ 良い例: git commit -m “Add text label to xxxView”

Slide 27

Slide 27 text

27 Confidential - Do Not Share git log ● コミットの変更履歴を見ることができます ● commit 1823449e….となっているのが commit hashと呼ばれるものです ● これを参照して、履歴を行き来することがで きます(git checkout [commit hash])

Slide 28

Slide 28 text

28 Confidential - Do Not Share git remote add ● pushする前にリモートRepositoryとローカルRepositoryが紐付いている必要が あります ● git remote add [リモート名] [URL]でできます ○ 例: git remote add origin https://github.com/HideakiTouhara/sample1.git

Slide 29

Slide 29 text

29 Confidential - Do Not Share git push ● git push [リモート名] [ブランチ名] ● git push -u origin masterみたいに、-uをつけると、次からgit pushのみでい けるのでおすすめです!

Slide 30

Slide 30 text

30 Confidential - Do Not Share Gitを用いた開発を始めてみよう! ● ローカルで自分の名前ディレクトリ(e.g. HideakiTouhara)とREADME.mdファイルを 作成 ○ 自分のプロフィールを作成 ● Github上に自分の名前のRepositoryを作成 ○ https://github.com/mercari-build ● 紐付け ● push! ● 確認できたらOK OSSのREADMEの例→

Slide 31

Slide 31 text

31 Confidential - Do Not Share 休憩 (10分)

Slide 32

Slide 32 text

32 Confidential - Do Not Share Githubを用いた複数人開発 ● git init or clone ● git pull ● git branch ● git checkout ● git commit ~ push ● “Create a PR on Github” ● “Review” ● “Merge” ● git pull

Slide 33

Slide 33 text

33 Confidential - Do Not Share 全体の流れ リモート Repository ①git clone ③pushして、github上にPRを 作成 ②ブランチ切って、色々作業 ④他の人にReviewをもらって、 Merge ローカルRepository

Slide 34

Slide 34 text

34 Confidential - Do Not Share git clone ● すでにgit管理されているプロジェクトを手元に持ってきたいときに使いま す ● 簡単に言うとプロジェクトのコピー ● git clone [URL]

Slide 35

Slide 35 text

35 Confidential - Do Not Share ブランチとは? ● 並列に作業できるようにするためのもの ● 枝葉のように独立して履歴を記録することができる ブランチAでは機能1を開発して! ブランチBでは機能2を開発して! 最後に合わせる ことが可能!

Slide 36

Slide 36 text

36 Confidential - Do Not Share git branch ● git branch [ブランチ名] ● git branchでブランチ一覧取得 ● 例: `git branch HideakiTouhara/work1`

Slide 37

Slide 37 text

37 Confidential - Do Not Share git checkout ● git checkout [ブランチ名] ● git checkout [commit hash] ● 例: `git checkout HideakiTouhara/work1`

Slide 38

Slide 38 text

38 Confidential - Do Not Share メルカリのブランチマネジメント ● 基本的にgit-flowに沿っている ○ https://nvie.com/posts/a-successful-git-branching-model/ ● プロジェクトごとに異なるので、初めて働くチー ムでは、オンボーディング資料などからどういう フローで開発しているのか確認しよう!

Slide 39

Slide 39 text

39 Confidential - Do Not Share Create a PR ● Github上で特定のbranchとの差分 を表示することができる ● ここでCode reviewしてもらう

Slide 40

Slide 40 text

40 Confidential - Do Not Share Code review ● 1. コードが何をしているか把握する ○ わからない部分はコメントして聞く ● 2. 現状の実装方法に対して、なにか意見があればコメントする ● 仕事でのコードレビューとしてはかなりアバウトですが、今回はCode reviewの質の話はスキップします ● Reviewの一例 ○ https://github.com/HideakiTouhara/Poi/pull/10

Slide 41

Slide 41 text

41 Confidential - Do Not Share Merge ● 枝分かれしていたブランチを合体させるときなどに使う ● git merge [branchの名前] ○ この場合は今いるブランチに [branchの名前]を取り込む形になります ブランチAでは機能1を開発して! ブランチBでは機能2を開発して! 最後に合わせる ことが可能!

Slide 42

Slide 42 text

42 Confidential - Do Not Share Conflictが起きた場合 ● Merge時にはconflict(変更の衝突が 起きる可能性があります) ● 例えば、同じファイルの同じ行をAさん、 Bさんが別々のブランチで作業していた 場合、2人がmergeするときに起こりま す。 ● それぞれのブランチの差分が表示され ます ● この場合は<<<<や>>>>を手動で消す などする必要があります

Slide 43

Slide 43 text

43 Confidential - Do Not Share チーム開発 実践 ● HackerRankの問題をみんなで完成させよう ○ https://docs.google.com/document/d/1258tUQQWMLWeSDk5d9t_q2dSot8a_ IaqlY04LENMaI8/edit#heading=h.anu7stay1vi2 ルール ● 1~3までの問題を修正 ● 該当Repository cloneする ● ブランチ作成後、チームメンバーの誰かのApproveを もらってからmasterにマージ

Slide 44

Slide 44 text

44 Confidential - Do Not Share チーム開発 実践2 ● HackerRankの問題をみんなで完成させよう ○ https://docs.google.com/document/d/1258tUQQWMLWeSDk5d9t_q2dSot8a_ IaqlY04LENMaI8/edit#heading=h.anu7stay1vi2 ルール ● 4~6を自力で解く ● 言語は問題ごとに違ってOK! ● ブランチ作成後、チームメンバーの誰かのApproveを もらってからmasterにマージ

Slide 45

Slide 45 text

45 Confidential - Do Not Share 困ったときはこうしよう ● git reset ● git revert

Slide 46

Slide 46 text

46 Confidential - Do Not Share 宿題の提出方法について ● HomeWork RepositoryのそれぞれのWeekディレクトリー配下に自分の 名前ディレクトリーを作成 ○ https://github.com/mercari-build/HomeWork ● e.g Week0/HideakiTouhara/xxxx

Slide 47

Slide 47 text

47 Confidential - Do Not Share 宿題1 ● git clone ● 自分の名前/func1という名前でブランチ作成&移動 ● homework.txtを作成

Slide 48

Slide 48 text

48 Confidential - Do Not Share 宿題1 ● 以下のようなコミットログになるようにしてください ○ (3番目はgit revertを使ってください) ● 自分の名前ディレクトリー以下で list1 homework.txt Add list 1 list1 list2 homework.txt Add list 2 list1 homework.txt func1 ・ファイル名 ・ファイル内容 ・コミットメッ セージ ・ブランチ名

Slide 49

Slide 49 text

49 Confidential - Do Not Share 宿題2 ● 以下のようなコミットログになるようにしてください ○ “自分の名前/func2” というブランチをmasterブランチから作成し、作業して ください ● Week0/自分の名前ディレクトリー以下で list2 homework.txt Add list 2 自分の名前/func2 list2 homework.txt master masterに func2を merge ・ファイル名 ・ファイル内容 ・コミットメッ セージ ・ブランチ名

Slide 50

Slide 50 text

50 Confidential - Do Not Share 宿題2 ● func2ブランチをmasterにマージ後、func1ブランチをmaster にマージし、以下の状態を作ってください。 ○ conflictが起きたらその対応もお願いします (不要な文字列を消すなど ) list2 homework.txt Add list 2 master list1 list2 homework.txt master Masterに func1を merge ・ファイル名 ・ファイル内容 ・コミットメッ セージ ・ブランチ名

Slide 51

Slide 51 text

51 Confidential - Do Not Share もっと練習したい人へ ● http://k.swd.cc/learnGitBranching-ja/