Redmineを使ったTiDD(チケット駆動開発)と バージョン管理システムのGitを組み合わせて、どうやって開発していくのが上手い流れを作れるのかということを考えてみました。

まずはTiDDとは何か

気になるところを取り出すと

  • コードに触る前にチケットを切る
    • Ticket First
  • タスクチケットは細分化して、放置されるようなタスクのサイズにしない
    • チケットで親子関係を作ってまとめるといい
    • 親チケット = ストーリーカード
    • 子チケット = タスクカード
  • コードとチケットを関係付ける(コミットコメントにチケット番号の付加など)
    • No Ticket, No Commit

katsumic.info – WorkNote » TiDD(チケット駆動開発)でいこう と大体同じです。

次はGitとチケットについて

元々、RedmineのチケットとGitをどう連携させるのがいいのだろう? というところからTiDDを知ったため、
チケットとコミットをどう関係付けるかと言う所に焦点がありました。

そこで、調べた所RedmineとGitを連携させるスクリプトなどはいくつかあって

などがあって、この辺のものを実際に試していてどうやるのがいいのかと大まかな流れを考えると以下のようになった。
(コミットの所にテストやレビューなどが入ると思いますが)

チケットワークフローA

(id/チケット番号 という用にid/と付けるのは、そうしないと認識しない拡張コマンドがあるため)

  1. チケット番号でGitのブランチを切る
    $ git branch id/TICKET_ID
  2. ブランチ内でチケットのタスク(コミット)をする
    Git-Redmineを使えば、Redmine上のステータスもcommitと一緒に変更できる
    $ git redmine commit TICKET_ID
  3. タスクが完了したら、メインのブランチ(ここではmasterとする)にマージする
    $ git checkout master && git merge –no-ff id/TICKET_ID && git branch -D id/TICKET_ID

細かい単位(チケット)でブランチを切って、コミットして、
終わったらmasterにマージするという流れはA successful Git branching modelとよく似ていることがわかると思います。

A successful Git branching modelがどういうものかは以下の記事がとても良くできているので、説明は省きます。

簡単に説明するならば

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

ものすごくブランチを切りまくるワークフローなわけですが、GitはSVNとは違い、
ブランチを作成するときにコピーではなくラベルを付けるだけなので、ブランチの作成やマージが高速です。
この辺の話についてはモデルから知るGitを読むと各コマンドの動きがわかりやすいです。

そのため、先ほどのワークフローとGitは相性がよいのと、A successful Git branching modelを補助するためのgit-flowという拡張コマンドが存在するためこの流れを取り入れやすいです。

git-flowはHomebrewなどで簡単にインストールすることができます

$ brew install git-flow

インストールするとgit flowというコマンドが使えるようになりますが、補完がないとちょっと面倒なのでgit-flow-completionを使えば、bash, zshでコマンドの補完ができるようになります。
oh-my-zshの場合は元からgit-flow-completionプラグインが含まれているので、

plugins=(git brew gem git-flow)

という感じで、git-flow-completionをインストールしなくてもプラグイン指定するだけで動作します。(git flowコマンド自体は必要)

git-flowの使い方やコマンドの意味はGetting Started – Git-Flow « Some thoughts, ideas and fun!!!がとてもわかりやすいですが、
開発するときにstartして、開発し終わったらfinishするという感じで、動作自体はそこまで複雑ではないと思います。

実際に先ほどのチケットワークフローAにgit-flowを適応してみる。
(途中からgit-flowを導入しています。またgit:(master)の括弧内が今いるブランチを示しています。)

という感じで、git-flowを適応できました。

最初はnode.jsでこのワークフローを作るようなCLIツールを書こうとしていましたが、既存のツールを組み合わせて十分使える感じになりました。

あくまで、TiDDとGitでの開発を組み合わせた一つの例ですが、これからも模索していく必要がありそうです。

Post Navigation