日々常々

ふつうのプログラマがあたりまえにしたいこと。

TDDBC 福岡 2日目 午前のメモ

午前はbleis(id:bleis-tift,@)さん と 秋猫(id:Akineko,@)さんの発表がありました。

なぜTDDBCでGitを扱うか

まずbleisさんのTDDBC福岡の軸となる、TDDとバージョン管理の連携のお話。
TDDとDVCS(分散バージョン管理システム)の相性が非常に良いから。
TDDは小さなサイクルで行われるので、サイクル毎に意味のあるまとまり*1がある。その単位でのコミットが非常にやりやすい。
集中型でも可能ではあるけれど、コミット単位を細かくしづらくなる。集中ゆえにコミットを細かくしてしまうと、コミットの意味が薄れてくる。2人以上の開発者のコミットが入り混じると、その範囲といった指定もし辛くなるわけで。開発者毎にブランチを切っても実現は出来るけれど、リポジトリサイズの問題とかまぁ面倒になりそう。また、ビルドを壊すようなチャレンジ的なリファクタリングがもってのほかとなり、開発を支援するはずのVCSに開発を制限されるというジレンマに陥る。チャレンジはコミットせずにする、だと大きなチャレンジはし辛くなるわけで。

TDDで使うコマンド

  • git init
  • git status
    • リポジトリの今の状態を表示する。
    • コミット前とか作業前に「とりあえず叩く」コマンド。
  • git add
    • 未登録ファイルをGitに登録する。
    • …程度の理解で良い。
  • git commit
    • 変更のあったものを全てコミットするときは -a を使う。
  • gitk
    • コミットグラフ確認用。GUIで確認できる。
    • gitk --all &
  • git checkout
    • ブランチに切り替えるコマンド。
    • ローカルに作られるブランチなので非常に軽い。
    • 新たに作成してそれに切り替えることも出来る。
    • git checkout -b id/553
  • git merge
    • ブランチをマージするコマンド。
    • git checkout master
    • git merge id/553
  • git now
    • なう!
    • 神速さん発案、川西さん実装の非標準コマンド。
    • git now
      • 「とりあえずコミット」するコマンド。
    • git now --rebase
      • git nowしたのを一つのコミットにする。

Gitを使ったTDDの流れ

  1. 作業単位でブランチを切る。
    • 自分がわかれば何でも。
    • ITS/BTSを使ってるならチケット名にしちゃう*2
  2. 保存したいタイミングでgit now
    • 保存時に自動的にさせるくらいでもいい
  3. 戻りたくなったらgitkで「ブランチをここにリセットする」
  4. 作業が終わったらmasterにマージする

この繰り返し。ブランチを使うことで、今やってる作業を中断して他の作業を入れることも出来る*3。ふと思いついたほかの作業をするとかもありです。

  1. git now
  2. git checkout -b 新規ブランチ名 master
  3. 作業する。
  4. git checkout master
  5. git merge 新規ブランチ名

この流れでTDDをやると、試してみたいけどどうなるか判らないとかを安心して出来る。大きなリファクタリングでもチャレンジできる。

その先へ

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

ATDD…で覚えてはいけない

次に秋猫さんの自動テスト駆動開発のお話。
ATDDは「Acceptance Test Driven Development」で受け入れテストらしいので、そう略しちゃいけないみたい。こういう略語は早い者勝ちな所もありますからねー。……えーと、自動テスト駆動開発ということで、OMakeの紹介。

OMakeの紹介

Makeの強化版、なんか色々出来るみたい。Makeというとコンパイルしたりアレしたりアレするアレですねーと、Makeに馴染みが無い*4私ですので、いまいち理解していないんですが、build.xmlみたいなもんだと思ってます(適当)。で、Makeの機能を網羅しつつ独自の便利な機能がたくさんあって便利なのがOMakeです。
omake -P ってやっておくと変更を感知して自動でビルドするので、保存のタイミングでテストさせて、成功/失敗を通知させる、コミットさせる、とかも出来るでしょうって感じです。ビルドに時間のかかるものとかだと有効なのかなーと。
そんなMakeの強化版なOMakeなのに、色々できるってことは…とオカシナ使い方し始める人もいる訳で。その辺を紹介されてました。


感想

Git自体はGitHubを使ってみたり、とりあえず入れてみたりはしてある程度コマンドを覚える程度はしていたのですが、実際活用できていたかと言うと疑問なところ。正直BetterSubversionと言っていいのか悩む程度、ツールのサポートや使い慣れの部分でまだSubversionのほうが有利と思えるくらいでした。ですけどたった1日で考えが改められることになりました。参加前はGitでブランチを作ったことが無かったのですが、今は使わないとかありえないなんて思ってますし、特に git-now の破壊力が凄かったです。
OMakeは使う機会が来たら考えてみる方向で、言葉と出来ることの情報を得られたのを収穫にしておくのが精一杯。出来るからと言ってOMakeでFizzBuzzを書くなんて考えもしませんし…。

*1:さらにRed,Green,Refactoringの1サイクルで3契機に分けることも出来る。DVCSではRedでのコミットもありに出来る。

*2:そのブランチに対するコミットをフックするとか夢が広がる

*3:良いか悪いかは別にして、実業務でも割り込みはザラです。

*4:馴染みが無いどころかコマンド叩いたこと無い気がする