Git+Redmine+チケット駆動開発のワークフロー

Presenter Notes

Git

Presenter Notes

Presenter Notes

コミットメッセージ

変更の短いサマリ

2行目は空改行にして、3行目か詳細について書く
この書き方は世界共通
詳細部分はサマリだけで十分なら必要はない

Presenter Notes

小さくコミット

c.f. コミットメッセージのサマリで変更内容が説明できる粒度

メリット

Presenter Notes

小さくコミット - ミス修正

コミットし忘れる/間違える

やろうと思えば修正できる、やり過ぎは体に毒

コマンドで分かりにくい時はSourceTreeを使ってGUIで操作するのも手

  • ググれば現実的に不可能な事以外はやり方が出てくる

Presenter Notes

チケット駆動開発

Presenter Notes

チケット駆動とは?

  • Redmine/JIRA/Trac等のチケット管理するツールが必須
  • 今回はRedmineをベースに進める
  • コードを書く前にチケットを切る
    • Ticket First
    • チケットがないコミットはしない(例外はありそうだけど)
  • チケットは閉じられる事が前提とする
  • やることが全部チケット化されてるのが理想
  • コードとチケットを関係付ける
    • コミットメッセージ Fixed #123

Presenter Notes

注意点

Presenter Notes

チケットの簡略化

  • チケットステータスの簡易化
    • 新規
    • 進行中
    • 解決
    • フィードバック
    • 終了
    • 却下
  • 進行中がずっと続くほどチケットは大きくしない(やるなら自動化)
  • 解決したら直ぐチケットを閉じる
    • レビューをするなら、レビューのチケットを新規で作る
  • 却下はあってもいいけど、あんまり使う機会無い気もする(管理する人向けなのかも)
  • チケットの進行度は0%か100%でいい
    • "新規"/"終了"と被るので操作しなくてもいい

Presenter Notes

メリット

Presenter Notes

チケットの粒度

  • チケットを処理をするリズムを生む粒度にするのが大事
  • チケットを見て、チケットの終了条件(ゴール)が分かる大きさ
    • チケットを見てゴールが複雑だと思ったらそのチケットは分割
    • 複数のゴールがあるなら、できるだけ一つのゴールにする
  • チケットは細分化して、放置されるようなタスクのサイズにしない
    • 一日で終わらないようなチケットは作らない
  • 大きなチケットがある場合は分割する
    • 大きなチケット(親チケット)の下に子チケットを作って分割する
    • 子チケットを全部処理すれば親チケットも終わる
    • 子、孫とネストが深くなりすぎるなら、親チケット自体を分割した方がいい
  • 感覚的には数コミットの範囲で終わるチケットになる気がする
  • TiDD初心者によく聞かれる質問part2~チケットの粒度はどれくらいが妥当ですか?: プログラマの思索

Presenter Notes

チケット例

typo

  • 動作に影響がない程度の小さなものならそのままコミット
    • チケットは作らないでそのままdevlopブランチにコミット
  • 必要なら、git commit --amendgit rebase -i などでコミットをまとめる
  • バグにつながってるものなら、チケットを立てる

bugfix

  • バグについてはできるだけチケットを作っておく
  • バグの再現手順などをチケットに書いておくといい
  • バグの原因/解決はコミットメッセージにも書く

機能別

  • 画面は結構大きな単位
    • その画面のゴールが見えてないなら"画面"単位のチケットは避ける
    • 客観的に終わりという線が敷きにくい

Presenter Notes

チケット例-2

コード

  • プログラマ以外も利用するなら、コードに深く入りすぎたチケット名は避ける
  • あまりプログラムによりすぎないチケットにした方がいい
    • 若干利用者視点
  • プログラムについてはコミットメッセージ等に書く

  • 他の人が見ても何を書いてあるのか分かるようにする
  • ゴールが分かるような説明にする

Presenter Notes

開発ツール

Presenter Notes

git-flow

Presenter Notes

nvie/gitflow

image

Presenter Notes

Gitブランチモデルとは

A successful Git branching model

 successful Git branching model

Gitのブランチ機能を使った開発モデルの事

  • TiDDととても相性がいい
  • iOSアプリ開発とも相性がいい

Presenter Notes

Gitブランチモデル

簡単にまとめると

  • 常にリリース可能なブランチを持っておく(master)
    • git-flow release
  • 代わりに開発の主体になるブランチを持つ(devlop)
  • 機能開発やホットフィックス(チケット的)などは、それぞれブランチを切って開発する
    • トピックブランチと言われるもの
  • ブランチのマージは–no-ffフラグを使い、どのブランチで開発してたのかを履歴に残す

Presenter Notes

1トピックブランチ = 1チケット

git-flowで切るブランチをチケット毎とすると分かりやすい

  1. チケット番号でGitのブランチを切る = チケットオープン

    git-flow feature start id/TICKET_ID

  2. チケットの内容に関するコミットする
  3. コミットが終わったブランチをマージしてブランチを閉じる = チケットクローズ

    git-flow feature finish id/TICKET_ID

後はこれをチケット毎に繰り返していけばいい

Presenter Notes

iOSアプリ開発とgit-flowの場合

example-xcode-project

Presenter Notes

Githubプルリクエストモデル

Githubのような、Pull Requestを中心とした開発モデル

  1. ブランチを切る git-flow feature start id/TICKET_ID
  2. ブランチをpushする git-flow feature publish id/TICKET_ID
  3. Pull Requestを送る
  4. 開発/コミット
  5. push(Pull Request/ブランチ上にコミットは溜まっていく)
  6. Pull Requestを閉じる(リモートのブランチは自動で閉じる)
    • Acceptの場合はローカルもマージして閉じる git-flow feature finish id/TICKET_ID
    • Denyの場合は、ブランチを捨てる

git-flowを使った場合でもPull Requestを使った開発自体はできる.(まあ目的が若干違う)

Presenter Notes

git-issue

git-issue

Github/redmineのチケットをコマンドラインから処理するツール

  • チケットの詳細を見る
  • プロジェクトのチケット一覧を見る
  • チケットのアップデート(編集/ステータス更新/閉じる)
  • チケットを元にブランチを切る/コミットする

チケット操作周りは一通りできる便利なCLIツール

Presenter Notes

チケット番号入力の自動化

percol + git-issue

Presenter Notes

まとめ

  • TiDDはツールありきな部分がある
  • => ツール等環境を良くすればそれだけ便利になる
  • => より効率のいい方法やツールなどを探す/作るべき
  • git-flow と TiDD は相性がいい
    • ブランチ = チケット
  • 粒度 : チケット = ブランチ >= コミット
  • TiDDとgit-flowを合わせたワークフローによりコミットの癖が付く
  • チケットとコミットメッセージの2方向から説明ができる

Presenter Notes