Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Build@Mercari Week 1 Git + Development flow
Search
mercari
PRO
June 19, 2020
Programming
0
3.8k
Build@Mercari Week 1 Git + Development flow
Week 1 slides of our Build@Mercari (Software Engineering training program)
mercari
PRO
June 19, 2020
Tweet
Share
More Decks by mercari
See All by mercari
[DevDojo] Problem Solving - 2024
mercari
PRO
1
350
[DevDojo] Ship Code Faster - 2024
mercari
PRO
1
210
[DevDojo] Mercari Design Doc - 2024
mercari
PRO
0
270
[DevDojo] Mercari Quality Assurance - 2024
mercari
PRO
1
220
[DevDojo] Merpay Quality Assurance - 2024 (日本語)
mercari
PRO
1
210
[DevDojo] Merpay Quality Assurance - 2024
mercari
PRO
1
130
[DevDojo] Basic Machine Learning - 2024
mercari
PRO
1
310
[DevDojo] Mercari Mobile Development - 2024
mercari
PRO
0
170
[DevDojo] Mercari Incident Management - 2024
mercari
PRO
0
230
Other Decks in Programming
See All in Programming
[JAWS-UG横浜 #80] うわっ…今年のServerless アップデート、少なすぎ…?
maroon1st
1
170
Conform を推す - Advocating for Conform
mizoguchicoji
3
680
技術を根付かせる / How to make technology take root
kubode
1
240
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
110
ファインディの テックブログ爆誕までの軌跡
starfish719
2
1.1k
AHC041解説
terryu16
0
590
Software Architecture
hschwentner
6
2.1k
SpringBoot3.4の構造化ログ #kanjava
irof
2
970
ペアーズでの、Langfuseを中心とした評価ドリブンなリリースサイクルのご紹介
fukubaka0825
2
300
iOSエンジニアから始める visionOS アプリ開発
nao_randd
3
120
WebDriver BiDiとは何なのか
yotahada3
1
140
Pythonでもちょっとリッチな見た目のアプリを設計してみる
ueponx
1
480
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
29
4.6k
RailsConf 2023
tenderlove
29
1k
Speed Design
sergeychernyshev
25
780
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
630
Fireside Chat
paigeccino
34
3.2k
Optimizing for Happiness
mojombo
376
70k
Navigating Team Friction
lara
183
15k
Building Adaptive Systems
keathley
40
2.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Transcript
1 Confidential - Do Not Share Build@Mercari Week 1 Git
+ Development flow Hunter Che
2 Confidential - Do Not Share Table of Contents •
Introduction • ターミナルの使い方 • Gitとは • Gitコマンド 基礎編 • Gitを用いた開発を始めてみよう! • Githubを用いた複数人開発の解説 • チーム開発 実践編 • 宿題の説明
3 Confidential - Do Not Share Introduction • Hideaki Touhara
• iOS Engineer • Hobbies: ◦ 二郎系、カレー屋めぐり ◦ スノボ ◦ 学生時代はARアプリとかVRゲームとか作って ました!
4 Confidential - Do Not Share コマンドって? • コンピュータに指示するための命令 •
ターミナルやコマンドプロンプトといったツールを用いて実行する • 別名: 「黒い画面」 • これ ->
5 Confidential - Do Not Share 何ができるの? • 今回の講座ではディレクトリ操作のためのコマンドのみ使用 •
でも、他にもコマンドの方が効率が良いことがたくさんある! • 自動化もしやすい!
6 Confidential - Do Not Share ファイル操作のための基本コマンド • ls •
pwd • cd • mkdir • touch
7 Confidential - Do Not Share ls • 現在いるディレクトリ内のファイル一覧を取得できる ◦
ls -a で隠しファイル含めて全表示
8 Confidential - Do Not Share pwd • 現在のディレクトリ位置を表示
9 Confidential - Do Not Share cd • ディレクトリ間を移動する ◦
cd ~でホームディレクトリに移動 ◦ cd .. で一個親の階層に上がる ◦ cd ディレクトリ名で特定の子の階層に移動 • ↑でExampleディレクトリに移動したいときは “cd Example”
10 Confidential - Do Not Share mkdir [ディレクトリ名] • ディレクトリを作成
11 Confidential - Do Not Share touch [ファイル名] • ファイルを作成
12 Confidential - Do Not Share Git
13 Confidential - Do Not Share Git以外でバージョン管理する • 例: Excel
「レポート_東原秀亮」 ↓ 「レポート_東原秀亮_20200403」 ↓ 「レポート_東原秀亮_20200501」
14 Confidential - Do Not Share Git以外でバージョン管理する • 例: Excel
↓ 「レポート_東原秀亮_最終版」 ↓ 「レポート_東原秀亮_最終版_修正版」
15 Confidential - Do Not Share Git以外でバージョン管理する • 例: Excel
↓ 「レポート_東原秀亮_最終版_20200520」 ↓ 「レポート_東原秀亮_最終版_latest」
16 Confidential - Do Not Share 最終版 _latest? ??
17 Confidential - Do Not Share Gitとは • バージョン管理システム ◦
履歴確認、バックアップ、複数人開発などに適している • 前に記録した部分からの差分を見て、また記録 -> サーバー側に保存 ◦ サーバーを提供してくれているのが Github • 昔の状態に戻す、参照するのが簡単 • 複数人で開発するときに、自分の変更差分が分かりやすい • -> 安全に開発できるので仕事での開発に向いている • -> ほとんどのIT企業で使われている!(はず)
18 Confidential - Do Not Share もうちょっと詳しく • プロジェクトのソースコードに今までの変更 履歴も含めたものをRepositoryといいま
す • やることは大きく分けて2つ ◦ 1. 自分の変更をサーバー上にあげる ◦ 2. 誰かがあげた更新を自分の手元に取り込む ◦ -> 1,2を必要に応じて使用することで複数人で開 発を進めることができる リモート Repository(Github上にある) ローカルRepository A ローカルRepository B リモートを更新 反映されたリモートを手元に取 り込む
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 Confidential - Do Not Share git init • 現在いるディレクトリ以下をgitの管理下に置きます
• .gitという隠しディレクトリができる • これでローカルリポジトリを作成したことになります • -> 後述するgit cloneかこのコマンドでgit管理を始めます
21 Confidential - Do Not Share git status • 現在のどのファイルに変更が起きているかを知ることができます
• 変更差分がstagingにいるのか、working directory(後述)なのかなどもわかる
22 Confidential - Do Not Share git diff • git
diffだけだとworking directoryの差分が見れる • git diff --cachedとすると、stagingの差分が見れる • 赤の部分が削除、緑が追加を表します
23 Confidential - Do Not Share
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 Confidential - Do Not Share git add • 差分をstagingにあげるコマンドです
• “git add .”で変更した全ての差分をstagingにあげます • “git add ファイル名”で特定のファイルの変更部分だけstagingにあげます • “git add -p”でどれをあげるか選ぶことができます
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 Confidential - Do Not Share git log • コミットの変更履歴を見ることができます
• commit 1823449e….となっているのが commit hashと呼ばれるものです • これを参照して、履歴を行き来することがで きます(git checkout [commit hash])
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 Confidential - Do Not Share git push • git
push [リモート名] [ブランチ名] • git push -u origin masterみたいに、-uをつけると、次からgit pushのみでい けるのでおすすめです!
30 Confidential - Do Not Share Gitを用いた開発を始めてみよう! • ローカルで自分の名前ディレクトリ(e.g. HideakiTouhara)とREADME.mdファイルを
作成 ◦ 自分のプロフィールを作成 • Github上に自分の名前のRepositoryを作成 ◦ https://github.com/mercari-build • 紐付け • push! • 確認できたらOK OSSのREADMEの例→
31 Confidential - Do Not Share 休憩 (10分)
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 Confidential - Do Not Share 全体の流れ リモート Repository ①git
clone ③pushして、github上にPRを 作成 ②ブランチ切って、色々作業 ④他の人にReviewをもらって、 Merge ローカルRepository
34 Confidential - Do Not Share git clone • すでにgit管理されているプロジェクトを手元に持ってきたいときに使いま
す • 簡単に言うとプロジェクトのコピー • git clone [URL]
35 Confidential - Do Not Share ブランチとは? • 並列に作業できるようにするためのもの •
枝葉のように独立して履歴を記録することができる ブランチAでは機能1を開発して! ブランチBでは機能2を開発して! 最後に合わせる ことが可能!
36 Confidential - Do Not Share git branch • git
branch [ブランチ名] • git branchでブランチ一覧取得 • 例: `git branch HideakiTouhara/work1`
37 Confidential - Do Not Share git checkout • git
checkout [ブランチ名] • git checkout [commit hash] • 例: `git checkout HideakiTouhara/work1`
38 Confidential - Do Not Share メルカリのブランチマネジメント • 基本的にgit-flowに沿っている ◦
https://nvie.com/posts/a-successful-git-branching-model/ • プロジェクトごとに異なるので、初めて働くチー ムでは、オンボーディング資料などからどういう フローで開発しているのか確認しよう!
39 Confidential - Do Not Share Create a PR •
Github上で特定のbranchとの差分 を表示することができる • ここでCode reviewしてもらう
40 Confidential - Do Not Share Code review • 1.
コードが何をしているか把握する ◦ わからない部分はコメントして聞く • 2. 現状の実装方法に対して、なにか意見があればコメントする • 仕事でのコードレビューとしてはかなりアバウトですが、今回はCode reviewの質の話はスキップします • Reviewの一例 ◦ https://github.com/HideakiTouhara/Poi/pull/10
41 Confidential - Do Not Share Merge • 枝分かれしていたブランチを合体させるときなどに使う •
git merge [branchの名前] ◦ この場合は今いるブランチに [branchの名前]を取り込む形になります ブランチAでは機能1を開発して! ブランチBでは機能2を開発して! 最後に合わせる ことが可能!
42 Confidential - Do Not Share Conflictが起きた場合 • Merge時にはconflict(変更の衝突が 起きる可能性があります)
• 例えば、同じファイルの同じ行をAさん、 Bさんが別々のブランチで作業していた 場合、2人がmergeするときに起こりま す。 • それぞれのブランチの差分が表示され ます • この場合は<<<<や>>>>を手動で消す などする必要があります
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 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 Confidential - Do Not Share 困ったときはこうしよう • git reset
• git revert
46 Confidential - Do Not Share 宿題の提出方法について • HomeWork RepositoryのそれぞれのWeekディレクトリー配下に自分の
名前ディレクトリーを作成 ◦ https://github.com/mercari-build/HomeWork • e.g Week0/HideakiTouhara/xxxx
47 Confidential - Do Not Share 宿題1 • git clone
• 自分の名前/func1という名前でブランチ作成&移動 • homework.txtを作成
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 Confidential - Do Not Share 宿題2 • 以下のようなコミットログになるようにしてください ◦
“自分の名前/func2” というブランチをmasterブランチから作成し、作業して ください • Week0/自分の名前ディレクトリー以下で list2 homework.txt Add list 2 自分の名前/func2 list2 homework.txt master masterに func2を merge ・ファイル名 ・ファイル内容 ・コミットメッ セージ ・ブランチ名
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 Confidential - Do Not Share もっと練習したい人へ • http://k.swd.cc/learnGitBranching-ja/