tdd boot camp福岡2日目

Post on 21-May-2015

3.213 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

TDD Boot Camp福岡の2日目の発表資料です。

TRANSCRIPT

TDD Boot Camp福岡2日目

bleis-tift

March 20, 2011

はじめに

そのまえに

この資料は LATEXを使って書かれています画像はスクリーンショットや写真以外 SVG

何が嬉しいのって?そりゃGitで管理できること、ですかね

そのまえに

この資料は LATEXを使って書かれています

画像はスクリーンショットや写真以外 SVG

何が嬉しいのって?そりゃGitで管理できること、ですかね

そのまえに

この資料は LATEXを使って書かれています画像はスクリーンショットや写真以外 SVG

何が嬉しいのって?そりゃGitで管理できること、ですかね

そのまえに

この資料は LATEXを使って書かれています画像はスクリーンショットや写真以外 SVG

何が嬉しいのって?そりゃGitで管理できること、ですかね

はじめに

なんでTDDBCでGit?

→Git(DVCS)とTDDの相性が非常に良いから

ちなみに、昨日バージョン管理システムを使っていたペアっていますか?

はじめに

なんでTDDBCでGit?→Git(DVCS)とTDDの相性が非常に良いから

ちなみに、昨日バージョン管理システムを使っていたペアっていますか?

はじめに

なんでTDDBCでGit?→Git(DVCS)とTDDの相性が非常に良いから

ちなみに、昨日バージョン管理システムを使っていたペアっていますか?

今日話すこと

TDDとの出会い、Gitとの出会いTDD Boot Camp歴DVCS/GitについてGitを使ったTDDの流れ

今日話すこと

TDDとの出会い、Gitとの出会いTDD Boot Camp歴DVCS/GitについてGitを使ったTDDの流れ

自分の中のTDDの基礎を固めてくれた本 3冊

高専3年

内容はすでに古い今風に書き直されないだろうか・・・

高専4年

今も色あせない素敵な本初版と第二版で表紙は変わったけど中身はほぼ同じ

社会人2年目

本家迷ったらとりあえず従っておく

共通点

メソッドベースのテストよりも、シナリオベースのテストに焦点を当てている

当時使っていたVCS

CVSや SVNやVSS

→ 1チケット 1コミット→コミットよりも小さい粒度はエディタの「元に戻す」機能でカバー→カバーできずに死ぬ

当時使っていたVCS

CVSや SVNやVSS→ 1チケット 1コミット

→コミットよりも小さい粒度はエディタの「元に戻す」機能でカバー→カバーできずに死ぬ

当時使っていたVCS

CVSや SVNやVSS→ 1チケット 1コミット→コミットよりも小さい粒度はエディタの「元に戻す」機能でカバー

→カバーできずに死ぬ

当時使っていたVCS

CVSや SVNやVSS→ 1チケット 1コミット→コミットよりも小さい粒度はエディタの「元に戻す」機能でカバー→カバーできずに死ぬ

不満と疑問

コミットによってTDDのリズムが崩されるコミットよりも小さい粒度の作業をやり直すのが面倒1チケット 1コミットは適切なのか?

Gitとの出会い

2009年9月

Gitとの出会い

PM「今回開発拠点が分散してるから分散バージョン管理システムとかいうの使うことにしたから」

Gitとの出会い

PM「選定しといて」

Gitとの出会い

俺「えっ」

Gitとの出会い

候補:svk、Git、Mercurial

Gitとの出会い

とりあえず本も 2冊出ているし、Git使ってみようえ、ちょっ、はええぇぇぇ!入門Gitと入門 git速攻購入BetterSVNとしてGitを使い始める1チケット 1トピックブランチがいいと思い始める

Gitとの出会い

とりあえず本も 2冊出ているし、Git使ってみよう

え、ちょっ、はええぇぇぇ!入門Gitと入門 git速攻購入BetterSVNとしてGitを使い始める1チケット 1トピックブランチがいいと思い始める

Gitとの出会い

とりあえず本も 2冊出ているし、Git使ってみようえ、ちょっ、はええぇぇぇ!

入門Gitと入門 git速攻購入BetterSVNとしてGitを使い始める1チケット 1トピックブランチがいいと思い始める

Gitとの出会い

とりあえず本も 2冊出ているし、Git使ってみようえ、ちょっ、はええぇぇぇ!入門Gitと入門 git速攻購入

BetterSVNとしてGitを使い始める1チケット 1トピックブランチがいいと思い始める

Gitとの出会い

とりあえず本も 2冊出ているし、Git使ってみようえ、ちょっ、はええぇぇぇ!入門Gitと入門 git速攻購入BetterSVNとしてGitを使い始める

1チケット 1トピックブランチがいいと思い始める

Gitとの出会い

とりあえず本も 2冊出ているし、Git使ってみようえ、ちょっ、はええぇぇぇ!入門Gitと入門 git速攻購入BetterSVNとしてGitを使い始める1チケット 1トピックブランチがいいと思い始める

ターニングポイント

2009/10/11名古屋Ruby会議01

名古屋Ruby会議01

和田さんと初めて会う色々問い詰める(ぉ

1チケット 1コミットってどうなんですか?1チケット 1トピックブランチでいいんでしょうか?などなど

その時見せてもらったコミットグラフに衝撃を受ける

名古屋Ruby会議01

和田さんと初めて会う

色々問い詰める(ぉ

1チケット 1コミットってどうなんですか?1チケット 1トピックブランチでいいんでしょうか?などなど

その時見せてもらったコミットグラフに衝撃を受ける

名古屋Ruby会議01

和田さんと初めて会う色々問い詰める(ぉ

1チケット 1コミットってどうなんですか?1チケット 1トピックブランチでいいんでしょうか?などなど

その時見せてもらったコミットグラフに衝撃を受ける

名古屋Ruby会議01

和田さんと初めて会う色々問い詰める(ぉ

1チケット 1コミットってどうなんですか?

1チケット 1トピックブランチでいいんでしょうか?などなど

その時見せてもらったコミットグラフに衝撃を受ける

名古屋Ruby会議01

和田さんと初めて会う色々問い詰める(ぉ

1チケット 1コミットってどうなんですか?1チケット 1トピックブランチでいいんでしょうか?

などなど

その時見せてもらったコミットグラフに衝撃を受ける

名古屋Ruby会議01

和田さんと初めて会う色々問い詰める(ぉ

1チケット 1コミットってどうなんですか?1チケット 1トピックブランチでいいんでしょうか?などなど

その時見せてもらったコミットグラフに衝撃を受ける

名古屋Ruby会議01

和田さんと初めて会う色々問い詰める(ぉ

1チケット 1コミットってどうなんですか?1チケット 1トピックブランチでいいんでしょうか?などなど

その時見せてもらったコミットグラフに衝撃を受ける

名古屋Ruby会議01

名古屋Ruby会議01

和田さんと初めて会う色々問い詰める(ぉ

1チケット 1コミットってどうなんですか?1チケット 1トピックブランチでいいんでしょうか?などなど

その時見せてもらったコミットグラフに衝撃を受ける

もうGitしか!

Gitにはまる

Gitのソースコードを読み始めるGitのソースコードをいじり始める

→色々と理解が深まり今に至る

Gitにはまる

Gitのソースコードを読み始める

Gitのソースコードをいじり始める

→色々と理解が深まり今に至る

Gitにはまる

Gitのソースコードを読み始めるGitのソースコードをいじり始める

→色々と理解が深まり今に至る

Gitにはまる

Gitのソースコードを読み始めるGitのソースコードをいじり始める

→色々と理解が深まり今に至る

今日話すこと

TDDとの出会い、Gitとの出会いTDD Boot Camp歴DVCS/GitについてGitを使ったTDDの流れ

TDD Boot Camp(2009/12/19)

納品日と重なり行けなかった・・・参加した a-hisameさんに話を聞く楽しそう!次あるなら何が何でも行ってやる!!

TDD Boot Camp(2009/12/19)

納品日と重なり行けなかった・・・

参加した a-hisameさんに話を聞く楽しそう!次あるなら何が何でも行ってやる!!

TDD Boot Camp(2009/12/19)

納品日と重なり行けなかった・・・参加した a-hisameさんに話を聞く

楽しそう!次あるなら何が何でも行ってやる!!

TDD Boot Camp(2009/12/19)

納品日と重なり行けなかった・・・参加した a-hisameさんに話を聞く楽しそう!次あるなら何が何でも行ってやる!!

TDD Boot Camp北陸(2010/3/13-14)

参加!GitとTDDとペアプロの組み合わせを初めてやった今のスタイルはこの時からのものです名古屋でも是非やりたい!

TDD Boot Camp北陸(2010/3/13-14)

参加!

GitとTDDとペアプロの組み合わせを初めてやった今のスタイルはこの時からのものです名古屋でも是非やりたい!

TDD Boot Camp北陸(2010/3/13-14)

参加!GitとTDDとペアプロの組み合わせを初めてやった

今のスタイルはこの時からのものです名古屋でも是非やりたい!

TDD Boot Camp北陸(2010/3/13-14)

参加!GitとTDDとペアプロの組み合わせを初めてやった今のスタイルはこの時からのものです

名古屋でも是非やりたい!

TDD Boot Camp北陸(2010/3/13-14)

参加!GitとTDDとペアプロの組み合わせを初めてやった今のスタイルはこの時からのものです名古屋でも是非やりたい!

TDD Boot Camp名古屋(2010/7/10-11)

開催!色々なペア、色々な言語のやり方を見ることができたGitやMercurial使ってたペアもちらほら

TDD Boot Camp名古屋(2010/7/10-11)

開催!

色々なペア、色々な言語のやり方を見ることができたGitやMercurial使ってたペアもちらほら

TDD Boot Camp名古屋(2010/7/10-11)

開催!色々なペア、色々な言語のやり方を見ることができた

GitやMercurial使ってたペアもちらほら

TDD Boot Camp名古屋(2010/7/10-11)

開催!色々なペア、色々な言語のやり方を見ることができたGitやMercurial使ってたペアもちらほら

TDD Boot Camp福岡

開催中!仕様変更通達するの楽しいです色々あってここでしゃべっています

TDD Boot Camp福岡

開催中!

仕様変更通達するの楽しいです色々あってここでしゃべっています

TDD Boot Camp福岡

開催中!仕様変更通達するの楽しいです

色々あってここでしゃべっています

TDD Boot Camp福岡

開催中!仕様変更通達するの楽しいです色々あってここでしゃべっています

今日話すこと

TDDとの出会い、Gitとの出会いTDD Boot Camp歴DVCS/GitについてGitを使ったTDDの流れ

問題

マージで競合が起こらなかった場合、マージは成功したと言えますか?

デモ

マージによるコードの破壊

このように、競合が起こらなかったにも関わらずコードが壊れる場合がある

バージョン管理テスティング自動化

三本柱!

マージによるコードの破壊

このように、競合が起こらなかったにも関わらずコードが壊れる場合がある

バージョン管理

テスティング自動化

三本柱!

マージによるコードの破壊

このように、競合が起こらなかったにも関わらずコードが壊れる場合がある

バージョン管理テスティング

自動化

三本柱!

マージによるコードの破壊

このように、競合が起こらなかったにも関わらずコードが壊れる場合がある

バージョン管理テスティング自動化

三本柱!

マージによるコードの破壊

このように、競合が起こらなかったにも関わらずコードが壊れる場合がある

バージョン管理テスティング自動化

三本柱!

DVCSを使う利点

エディタのヒストリ機能ではだめなの?

エディタのヒストリ機能は操作に対する履歴バージョン管理システムは意味を持ったまとまりに対する履歴

集中管理型ではだめなの?

コミットをあまり細かくできないビルドを壊すようなコミットはもってのほか開発者ごとにブランチを切る?

DVCSを使う利点

エディタのヒストリ機能ではだめなの?

エディタのヒストリ機能は操作に対する履歴バージョン管理システムは意味を持ったまとまりに対する履歴

集中管理型ではだめなの?

コミットをあまり細かくできないビルドを壊すようなコミットはもってのほか開発者ごとにブランチを切る?

DVCSを使う利点

エディタのヒストリ機能ではだめなの?エディタのヒストリ機能は操作に対する履歴

バージョン管理システムは意味を持ったまとまりに対する履歴

集中管理型ではだめなの?

コミットをあまり細かくできないビルドを壊すようなコミットはもってのほか開発者ごとにブランチを切る?

DVCSを使う利点

エディタのヒストリ機能ではだめなの?エディタのヒストリ機能は操作に対する履歴バージョン管理システムは意味を持ったまとまりに対する履歴

集中管理型ではだめなの?

コミットをあまり細かくできないビルドを壊すようなコミットはもってのほか開発者ごとにブランチを切る?

DVCSを使う利点

エディタのヒストリ機能ではだめなの?エディタのヒストリ機能は操作に対する履歴バージョン管理システムは意味を持ったまとまりに対する履歴

集中管理型ではだめなの?

コミットをあまり細かくできないビルドを壊すようなコミットはもってのほか開発者ごとにブランチを切る?

DVCSを使う利点

エディタのヒストリ機能ではだめなの?エディタのヒストリ機能は操作に対する履歴バージョン管理システムは意味を持ったまとまりに対する履歴

集中管理型ではだめなの?コミットをあまり細かくできない

ビルドを壊すようなコミットはもってのほか開発者ごとにブランチを切る?

DVCSを使う利点

エディタのヒストリ機能ではだめなの?エディタのヒストリ機能は操作に対する履歴バージョン管理システムは意味を持ったまとまりに対する履歴

集中管理型ではだめなの?コミットをあまり細かくできないビルドを壊すようなコミットはもってのほか

開発者ごとにブランチを切る?

DVCSを使う利点

エディタのヒストリ機能ではだめなの?エディタのヒストリ機能は操作に対する履歴バージョン管理システムは意味を持ったまとまりに対する履歴

集中管理型ではだめなの?コミットをあまり細かくできないビルドを壊すようなコミットはもってのほか開発者ごとにブランチを切る?

Gitとは

分散バージョン管理システムのひとつLinuxのカーネル用として開発開始高機能かつ高速

Gitとは

分散バージョン管理システムのひとつ

Linuxのカーネル用として開発開始高機能かつ高速

Gitとは

分散バージョン管理システムのひとつLinuxのカーネル用として開発開始

高機能かつ高速

Gitとは

分散バージョン管理システムのひとつLinuxのカーネル用として開発開始高機能かつ高速

今からやること

Better SVNとしてのGit

ひとり or ペアプロ(もちろんTDD)で必要な最小限のコマンドリモートリポジトリは扱いません

最低限必要なコマンド

git init

git status

git add

git commit

gitk

git checkout

git merge

git now(非標準)

最低限必要なコマンド

git init

git status

git add

git commit

gitk

git checkout

git merge

git now(非標準)

git init

Gitのリポジトリを作るコマンド。

.

カレントディレクトリにリポジトリを作成

.

.

.

git init

.

指定ディレクトリにリポジトリを作成

.

.

.

git init hoge

最低限必要なコマンド

git init

git status

git add

git commit

gitk

git checkout

git merge

git now(非標準)

git status

リポジトリの状態を表示するコマンド。

.

状態確認

.

.

.

git status

最低限必要なコマンド

git init

git status

git add

git commit

gitk

git checkout

git merge

git now(非標準)

git add

未登録のファイルをGitに登録するコマンド。

.

新規ファイル hogeを登録

.

.

.

touch hogegit add .

最低限必要なコマンド

git init

git status

git add

git commit

gitk

git checkout

git merge

git now(非標準)

git commit

コミットするコマンド。

.

変更のあったものをすべてコミット

.

.

.

git commit -a

最低限必要なコマンド

git init

git status

git add

git commit

gitk

git checkout

git merge

git now(非標準)

gitk

コミットグラフの確認用ウィンドウ。

.

gitk

.

.

.

gitk --all &

何はなくともとりあえず立ち上げておく。

gitk

コミットグラフの確認用ウィンドウ。

.

gitk

.

.

.

gitk --all &

何はなくともとりあえず立ち上げておく。

最低限必要なコマンド

git init

git status

git add

git commit

gitk

git checkout

git merge

git now(非標準)

git checkout

ブランチを切り替えるコマンド。

.

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

.

.

.

git checkout -b id/553

.

普通の切り替え

.

.

.

git checkout master

最低限必要なコマンド

git init

git status

git add

git commit

gitk

git checkout

git merge

git now(非標準)

git merge

ブランチをマージするコマンド。

.

id/553をmasterにマージ

.

.

.

git checkout mastergit merge id/553

最低限必要なコマンド

git init

git status

git add

git commit

gitk

git checkout

git merge

git now(非標準)

git now

「とりあえず」コミットしておくコマンド。神速さん発案、川西さん実装の非標準コマンド。

.

なう!

.

.

.

git now

.

きちんとしたコミットを作る

.

.

.

git now --rebase

今日話すこと

TDDとの出会い、Gitとの出会いTDD Boot Camp歴DVCS/GitについてGitを使ったTDDの流れ

Gitを使ったTDDの流れ

.

..

1 作業用にブランチを切る

.

.

.

2 保存したいと思ったら git now

.

.

.

3 戻りたくなったら gitkで「ブランチをここにリセットする」

git resetというコマンドが裏で動く.

.

.

4 作業が終わったらmasterにmerge

Gitを使ったTDDの流れ

.

..

1 作業用にブランチを切る

.

.

.

2 保存したいと思ったら git now

.

.

.

3 戻りたくなったら gitkで「ブランチをここにリセットする」

git resetというコマンドが裏で動く.

.

.

4 作業が終わったらmasterにmerge

Gitを使ったTDDの流れ

.

..

1 作業用にブランチを切る

.

.

.

2 保存したいと思ったら git now

.

.

.

3 戻りたくなったら gitkで「ブランチをここにリセットする」

git resetというコマンドが裏で動く.

.

.

4 作業が終わったらmasterにmerge

Gitを使ったTDDの流れ

.

..

1 作業用にブランチを切る

.

.

.

2 保存したいと思ったら git now

.

.

.

3 戻りたくなったら gitkで「ブランチをここにリセットする」

git resetというコマンドが裏で動く

.

.

.

4 作業が終わったらmasterにmerge

Gitを使ったTDDの流れ

.

..

1 作業用にブランチを切る

.

.

.

2 保存したいと思ったら git now

.

.

.

3 戻りたくなったら gitkで「ブランチをここにリセットする」

git resetというコマンドが裏で動く

.

.

.

4 作業が終わったらmasterにmerge

Gitを使ったTDDの流れ

.

..

1 作業用にブランチを切る

.

.

.

2 保存したいと思ったら git now

.

.

.

3 戻りたくなったら gitkで「ブランチをここにリセットする」

git resetというコマンドが裏で動く

.

.

.

4 作業が終わったらmasterにmerge

後からブランチを作る

今やっている作業をいったん中断して、ほかの作業をやりたい。

.

コマンド

.

.

.

git nowgit checkout -b ブランチ名 master作業git checkout mastergit merge ブランチ名

後からブランチを作る

今やっている作業をいったん中断して、ほかの作業をやりたい。

.

コマンド

.

.

.

git nowgit checkout -b ブランチ名 master作業git checkout mastergit merge ブランチ名

その先へ

Gitをある程度使っている方向け

gitkではなく、コマンドを使うブランチのマージに rebaseを使うITS/BTSと連携させる

その先へ

Gitをある程度使っている方向けgitkではなく、コマンドを使う

ブランチのマージに rebaseを使うITS/BTSと連携させる

その先へ

Gitをある程度使っている方向けgitkではなく、コマンドを使うブランチのマージに rebaseを使う

ITS/BTSと連携させる

その先へ

Gitをある程度使っている方向けgitkではなく、コマンドを使うブランチのマージに rebaseを使うITS/BTSと連携させる

おまけ事例紹介

弊社開発環境

コードはGitで管理更新用のリポジトリと取得用のリポジトリが別HudsonでCI(まだ Jenkinsにしていない)ビルドが通らない変更は rejectされるfast forward mergeができなければ rejectされる

弊社開発環境

コードはGitで管理

更新用のリポジトリと取得用のリポジトリが別HudsonでCI(まだ Jenkinsにしていない)ビルドが通らない変更は rejectされるfast forward mergeができなければ rejectされる

弊社開発環境

コードはGitで管理更新用のリポジトリと取得用のリポジトリが別

HudsonでCI(まだ Jenkinsにしていない)ビルドが通らない変更は rejectされるfast forward mergeができなければ rejectされる

弊社開発環境

コードはGitで管理更新用のリポジトリと取得用のリポジトリが別HudsonでCI(まだ Jenkinsにしていない)

ビルドが通らない変更は rejectされるfast forward mergeができなければ rejectされる

弊社開発環境

コードはGitで管理更新用のリポジトリと取得用のリポジトリが別HudsonでCI(まだ Jenkinsにしていない)ビルドが通らない変更は rejectされる

fast forward mergeができなければ rejectされる

弊社開発環境

コードはGitで管理更新用のリポジトリと取得用のリポジトリが別HudsonでCI(まだ Jenkinsにしていない)ビルドが通らない変更は rejectされるfast forward mergeができなければ rejectされる

メリット

ビルドを壊してしまってもほかの開発者に迷惑をかけないリポジトリから取得したものは最低限の動作確認がされている

デメリット

構築が大変変更が大変

ただまぁ、一度構築してしまえばかなり快適

top related