pre-commit-hookとpost-commit-hook #tidd
Subversionには、pre-commitとpost-commitの機能が元々付いている。
復習のためにメモ。
【元ネタ】
TortoiseSVN の設定
[Think IT] 第4回:チケットとソースコードを連携せよ! (1/3)
ソフト/Bug Tracking/trac/TortoiseSVNやSubclipseとチケットを連動 - discypus
TortoiseSVNとITS・BTSの連携 S.S.S. blog/ウェブリブログ
redMine で trac の trac-post-commit-hook のような事をやる
TortoiseSVNのようなSVNクライアントには、pre-commitとpost-commitの機能が元々付いている。
pre-commitは、コミット前にコミットログの中身を精査してコーディング規約に合致しているかどうかチェックする。もしエラーならコミットできない。
post-commitは、コミット後に付与された内容を実現する。よくある例は、コミットログにチケットNoが書かれていれば、BTSのチケット画面にSVNリビジョンとコミットログを表示する。
pre-commitの使い道は、コミットログにチケットNoが書かれていなければ、コミット不可にすること。
この運用ルールは「No Ticket, No Commit」と呼ばれる。
このルールによって、SVNリビジョンとチケットの相互リンクが実現されるので、最終的にはビルドモジュールからチケットに書かれた修正理由へ追跡できるし、逆に過去のチケットから修正されたソース一覧を洗い出せるので仕様変更の影響範囲や同類バグ調査に使える。
つまり、チケットと成果物を紐づけることによって、トレーサビリティを実現できる。
このトレーサビリティは従来の開発プロセスやAgile開発には現れなかった性質であり、とても重要なポイントだ。
post-commitの応用としては、コミットログにチケットNoだけでなく特定のキーワードによってチケットの状態を更新出来ること。
Redmineの場合、「refs #1」ならチケット#1とリンクするだけだが、「fixes #2」ならチケット#2の進捗率=100%にして更に解決済みステータスへ更新してくれる。
複数回のコミットはrefs、最終コミットはfixesと使い分ければ、開発者はチケットを逐一更新しなくてもコミット時に勝手にチケットの担当が終了したことになる。
この運用ルールに開発者が一度慣れると、コミットするのが楽しくなってくる。
SVNもCVSでも、pre-commit-hookやpost-commit-hookのスクリプトを書けば、ユーザはコミット時に意識する必要はない。
この手法はおそらくTracで普及し、RedmineではWeb画面から設定できるので便利になった。
今では、MercurialやGitでも、RedmineやTrac上で同様の操作が可能だ。
ITSが構成管理ツールと連携している利点は、単にITSの画面からSCMリポジトリを見れるだけでなく、pre-commit-hookとpost-commit-hookによって、チケットとSCMリビジョンがリンクされて、チケットに成果物の履歴が残り、トレースしやすくなることだ。
この特徴こそが従来のバグ管理システムには無かったものであり、チケット駆動開発へ発展していったきっかけになったのだと思う。
実際、チケット駆動開発では、ITSバージョンとリリース予定バージョンとイテレーションが対応づけられることによって、自然に小規模リリースを実現できる。
又、ITSプロジェクトとSCMコードラインとビルドモジュールが対応付けられることによって、メインラインモデルのタスク管理が楽になるので、派生開発や製品ファミリー開発を強力にサポートできる。
ITSと構成管理ツールとの連携については更に考察してみたい。
| 固定リンク
「プロジェクトマネジメント」カテゴリの記事
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart2~プロセスのレイヤと達成目標のレイヤが異なる(2023.02.18)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える(2023.02.14)
- PM理論では課業志向の方が関係志向よりも生産性が高いことを主張しているのではないか(2023.01.22)
- 現代日本人の弱点はリーダーシップ不足と生産性が著しく低いこと、そしてリスク許容度が著しく低いことだ(2022.12.23)
「Redmine」カテゴリの記事
- Redmineのバージョン設定でプロジェクトの設定方法が違う(2024.06.23)
- ウクライナのRedmine開発者が作ったRedmineテーマやプラグイン(2024.06.18)
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- Redmineで持ち株管理する事例(2024.04.21)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
「ソフトウェア工学」カテゴリの記事
- アーキテクチャ設計はベストプラクティスを参照するプロセスに過ぎないのか?~Software Processes are Software, Too(ソフトウェアプロセスもまたソフトウェアである)(2024.09.22)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「システムアーキテクチャ構築の原理」の感想(2024.05.06)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- マイクロサービス設計は従来のアーキテクチャ設計と何が違うのか(2024.01.02)
「廃止Mercurial」カテゴリの記事
- GitHubはオープンソースのプロセスを標準化した(2015.06.11)
- 「反復型ソフトウェア開発」はソフトウェア工学の良書(2013.02.09)
- Mercurialに取り込まれたコミュニティ由来の機能一覧(2013.01.12)
- WordやExcelから直接Mercurialへコミットできるアドオンmsofficehg(2012.12.07)
- RedmineでSubversion リポジトリ表示を高速化する方法(2012.11.23)
「構成管理・Git」カテゴリの記事
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- パッケージ設計の原則の意義は変化しているのか(2023.09.30)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 【資料公開】チケット駆動開発の解説~タスク管理からプロセス改善へ #redmine(2022.01.14)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
「チケット駆動開発」カテゴリの記事
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 知識は経験よりも大切か、経験は知識よりも勝るのか、SECIモデルは相互作用を語る(2022.04.26)
- プロジェクト管理の基本はテーラリング、Redmineはプロセスをテーラリングするツール(2022.04.21)
「Agile」カテゴリの記事
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- 概念モデリングや設計原則は進化しているのか(2023.10.21)
コメント