Build@Mercari Week 1 Git + Development flow

Build@Mercari Week 1 Git + Development flow

Week 1 slides of our Build@Mercari (Software Engineering training program)

92cdcff298e89e2fcd2fb705155c2d4b?s=128

mercari

June 19, 2020
Tweet

Transcript

  1. 1 Confidential - Do Not Share Build@Mercari Week 1 Git

    + Development flow Hunter Che
  2. 2 Confidential - Do Not Share Table of Contents •

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

    • iOS Engineer • Hobbies: ◦ 二郎系、カレー屋めぐり ◦ スノボ ◦ 学生時代はARアプリとかVRゲームとか作って ました!
  4. 4 Confidential - Do Not Share コマンドって? • コンピュータに指示するための命令 •

    ターミナルやコマンドプロンプトといったツールを用いて実行する • 別名: 「黒い画面」 • これ ->
  5. 5 Confidential - Do Not Share 何ができるの? • 今回の講座ではディレクトリ操作のためのコマンドのみ使用 •

    でも、他にもコマンドの方が効率が良いことがたくさんある! • 自動化もしやすい!
  6. 6 Confidential - Do Not Share ファイル操作のための基本コマンド • ls •

    pwd • cd • mkdir • touch
  7. 7 Confidential - Do Not Share ls • 現在いるディレクトリ内のファイル一覧を取得できる ◦

    ls -a で隠しファイル含めて全表示
  8. 8 Confidential - Do Not Share pwd • 現在のディレクトリ位置を表示

  9. 9 Confidential - Do Not Share cd • ディレクトリ間を移動する ◦

    cd ~でホームディレクトリに移動 ◦ cd .. で一個親の階層に上がる ◦ cd ディレクトリ名で特定の子の階層に移動 • ↑でExampleディレクトリに移動したいときは “cd Example”
  10. 10 Confidential - Do Not Share mkdir [ディレクトリ名] • ディレクトリを作成

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

  12. 12 Confidential - Do Not Share Git

  13. 13 Confidential - Do Not Share Git以外でバージョン管理する • 例: Excel

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

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

    ↓ 「レポート_東原秀亮_最終版_20200520」 ↓ 「レポート_東原秀亮_最終版_latest」
  16. 16 Confidential - Do Not Share 最終版 _latest? ??

  17. 17 Confidential - Do Not Share Gitとは • バージョン管理システム ◦

    履歴確認、バックアップ、複数人開発などに適している • 前に記録した部分からの差分を見て、また記録 -> サーバー側に保存 ◦ サーバーを提供してくれているのが Github • 昔の状態に戻す、参照するのが簡単 • 複数人で開発するときに、自分の変更差分が分かりやすい • -> 安全に開発できるので仕事での開発に向いている • -> ほとんどのIT企業で使われている!(はず)
  18. 18 Confidential - Do Not Share もうちょっと詳しく • プロジェクトのソースコードに今までの変更 履歴も含めたものをRepositoryといいま

    す • やることは大きく分けて2つ ◦ 1. 自分の変更をサーバー上にあげる ◦ 2. 誰かがあげた更新を自分の手元に取り込む ◦ -> 1,2を必要に応じて使用することで複数人で開 発を進めることができる リモート Repository(Github上にある) ローカルRepository A ローカルRepository B リモートを更新 反映されたリモートを手元に取 り込む
  19. 19 Confidential - Do Not Share Gitコマンド • git init

    • git status • git diff (--cached) • git add • git commit • git log • git remote add • git push
  20. 20 Confidential - Do Not Share git init • 現在いるディレクトリ以下をgitの管理下に置きます

    • .gitという隠しディレクトリができる • これでローカルリポジトリを作成したことになります • -> 後述するgit cloneかこのコマンドでgit管理を始めます
  21. 21 Confidential - Do Not Share git status • 現在のどのファイルに変更が起きているかを知ることができます

    • 変更差分がstagingにいるのか、working directory(後述)なのかなどもわかる
  22. 22 Confidential - Do Not Share git diff • git

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

  24. 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
  25. 25 Confidential - Do Not Share git add • 差分をstagingにあげるコマンドです

    • “git add .”で変更した全ての差分をstagingにあげます • “git add ファイル名”で特定のファイルの変更部分だけstagingにあげます • “git add -p”でどれをあげるか選ぶことができます
  26. 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”
  27. 27 Confidential - Do Not Share git log • コミットの変更履歴を見ることができます

    • commit 1823449e….となっているのが commit hashと呼ばれるものです • これを参照して、履歴を行き来することがで きます(git checkout [commit hash])
  28. 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
  29. 29 Confidential - Do Not Share git push • git

    push [リモート名] [ブランチ名] • git push -u origin masterみたいに、-uをつけると、次からgit pushのみでい けるのでおすすめです!
  30. 30 Confidential - Do Not Share Gitを用いた開発を始めてみよう! • ローカルで自分の名前ディレクトリ(e.g. HideakiTouhara)とREADME.mdファイルを

    作成 ◦ 自分のプロフィールを作成 • Github上に自分の名前のRepositoryを作成 ◦ https://github.com/mercari-build • 紐付け • push! • 確認できたらOK OSSのREADMEの例→
  31. 31 Confidential - Do Not Share 休憩 (10分)

  32. 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
  33. 33 Confidential - Do Not Share 全体の流れ リモート Repository ①git

    clone ③pushして、github上にPRを 作成 ②ブランチ切って、色々作業 ④他の人にReviewをもらって、 Merge ローカルRepository
  34. 34 Confidential - Do Not Share git clone • すでにgit管理されているプロジェクトを手元に持ってきたいときに使いま

    す • 簡単に言うとプロジェクトのコピー • git clone [URL]
  35. 35 Confidential - Do Not Share ブランチとは? • 並列に作業できるようにするためのもの •

    枝葉のように独立して履歴を記録することができる ブランチAでは機能1を開発して! ブランチBでは機能2を開発して! 最後に合わせる ことが可能!
  36. 36 Confidential - Do Not Share git branch • git

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

    checkout [ブランチ名] • git checkout [commit hash] • 例: `git checkout HideakiTouhara/work1`
  38. 38 Confidential - Do Not Share メルカリのブランチマネジメント • 基本的にgit-flowに沿っている ◦

    https://nvie.com/posts/a-successful-git-branching-model/ • プロジェクトごとに異なるので、初めて働くチー ムでは、オンボーディング資料などからどういう フローで開発しているのか確認しよう!
  39. 39 Confidential - Do Not Share Create a PR •

    Github上で特定のbranchとの差分 を表示することができる • ここでCode reviewしてもらう
  40. 40 Confidential - Do Not Share Code review • 1.

    コードが何をしているか把握する ◦ わからない部分はコメントして聞く • 2. 現状の実装方法に対して、なにか意見があればコメントする • 仕事でのコードレビューとしてはかなりアバウトですが、今回はCode reviewの質の話はスキップします • Reviewの一例 ◦ https://github.com/HideakiTouhara/Poi/pull/10
  41. 41 Confidential - Do Not Share Merge • 枝分かれしていたブランチを合体させるときなどに使う •

    git merge [branchの名前] ◦ この場合は今いるブランチに [branchの名前]を取り込む形になります ブランチAでは機能1を開発して! ブランチBでは機能2を開発して! 最後に合わせる ことが可能!
  42. 42 Confidential - Do Not Share Conflictが起きた場合 • Merge時にはconflict(変更の衝突が 起きる可能性があります)

    • 例えば、同じファイルの同じ行をAさん、 Bさんが別々のブランチで作業していた 場合、2人がmergeするときに起こりま す。 • それぞれのブランチの差分が表示され ます • この場合は<<<<や>>>>を手動で消す などする必要があります
  43. 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にマージ
  44. 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にマージ
  45. 45 Confidential - Do Not Share 困ったときはこうしよう • git reset

    • git revert
  46. 46 Confidential - Do Not Share 宿題の提出方法について • HomeWork RepositoryのそれぞれのWeekディレクトリー配下に自分の

    名前ディレクトリーを作成 ◦ https://github.com/mercari-build/HomeWork • e.g Week0/HideakiTouhara/xxxx
  47. 47 Confidential - Do Not Share 宿題1 • git clone

    • 自分の名前/func1という名前でブランチ作成&移動 • homework.txtを作成
  48. 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 ・ファイル名 ・ファイル内容 ・コミットメッ セージ ・ブランチ名
  49. 49 Confidential - Do Not Share 宿題2 • 以下のようなコミットログになるようにしてください ◦

    “自分の名前/func2” というブランチをmasterブランチから作成し、作業して ください • Week0/自分の名前ディレクトリー以下で list2 homework.txt Add list 2 自分の名前/func2 list2 homework.txt master masterに func2を merge ・ファイル名 ・ファイル内容 ・コミットメッ セージ ・ブランチ名
  50. 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 ・ファイル名 ・ファイル内容 ・コミットメッ セージ ・ブランチ名
  51. 51 Confidential - Do Not Share もっと練習したい人へ • http://k.swd.cc/learnGitBranching-ja/