RedmineとGitを巡る疑問点~Gitとの連携機能の強化がRedmineの課題
RedmineとGitを巡る疑問点をメモ。
詳細は後で書き足す。
【参考】
チケット駆動開発に分散バージョン管理を組み合わせるアイデア: プログラマの思索
分散バージョン管理ツールにおけるブランチ戦略: プログラマの思索
A successful git branching model とgithub flowの比較: プログラマの思索
第9回RxTstudy勉強会の感想~Redmineとチケット駆動開発の今後の課題 #RxTStudy: プログラマの思索
GitHubのプルリクエスト駆動におけるチケット駆動開発の問題点: プログラマの思索
【1】Redmineは日本のSIでかなり普及しているらしい。
その状況と並行して、オープンソース界隈では、GitHubでチケット管理する運用も多い。
すると、最近の状況としては、RedmineとGitを連携して、うまく運用したいという要望があるように思える。
しかし、RedmineとGitの連携とその運用は、まだまだ試行錯誤の部分が多いと思う。
RedmineとGitを巡る疑問点をリストアップしてみる。
【Q1】RedmineとGitリポジトリブラウザのツールと連携する方法はあるか?
具体的には、Gitlab、GitHub、GitBucketなど。
Redmineのリポジトリ管理機能には、GitをSVNと同様に設定できる機能はある。
しかし、Git単体で入れるよりも、Gitlab、GitHub、GitBucketのようなGit用のリポジトリブラウザを入れる方がGitのブランチ管理がやりやすい。
Gitlab、GitHub、GitBucketのいずれともRedmineと連携する方法については、既にネット上にたくさん書かれている。
だが、問題は、Redmineのチケット管理とGit用リポジトリブラウザのツール上のチケット管理をどのように使い分けるか、だ。
Gitlab、GitHub、GitBucketともに、Redmineのチケット管理よりも機能は貧弱。
でも、Redmineのリポジトリ画面よりも、Gitlab、GitHub、GitBucketの方が、Gitのブランチ管理やマージ管理はすごくやりやすい。
その問題の解決方法はまだ僕には分からない。
redmineとgithubの連携 - katashiyo515's diary
GitBucketとRedmineを連携する | 眠るシーラカンスと水底のプログラマー
GitLabとRedmineを連携してみるの巻 - アルパカDiary
【Q2】Gitのブランチ管理をRedmineへどのように対応づけるか?
Gitの利点の一つは、ブランチの生成と消滅に至るまでのライフサイクル管理がすごくやりやすいことだ。
ちょっとした機能追加、障害修正があれば、トピックブランチをすぐに作って、実験すればいい。
その場合、Gitブランチは、Redmineのどの機能と対応付けられるか?
ブランチをRedmineへ対応する方法は2つある。
一つは、プロジェクト。
もう一つは、チケット。
Redmineプロジェクトをブランチに対応付けた場合、ブランチからビルドされるモジュールは製品とみなされ、その製品のタスク・障害・課題管理にチケット管理が対応付けられる。
そのような運用がおそらく理想だと思う。
僕が6年前にRedmine+Subversionを運用した時も、リリースブランチを作るたびにRedmineのサブプロジェクトに対応付けて、リリースブランチの生成と消滅のライフサイクルと、Redmineのサブプロジェクトを対応付けていた。
SCMCreatorのようなプラグインでは、Redmineプロジェクト名とSVNリポジトリ名を合わせて新規作成する機能を持っていた。
Redmine+SVN/Gitの環境構築 (3)|ソフトウエア開発(android・iphone・windows・java等)の事なら株式会社パークにお任せください_パク太郎のソフトウエア開発者ブログ
概要 - SCM Creator (+Github) - Andriy Lesyuk site
だが、Gitのようにブランチがたくさん作られる運用では、このような運用は非常に面倒になる。
Redmineプロジェクトの生存期間がすごく短くなるし、Redmineプロジェクトが乱発されて、チケットが散在してしまい、見通しも悪くなる。
後者の運用では、トピックブランチの生成のタイミングでチケットを作成し、マージのタイミングでチケットをCloseする。
Gitでブランチを作る時、チケットを先に作成し、ブランチの名前をチケットNoにしてブランチを作る。
そのようなコマンドもネット上にはある。
mikoto20000/redmine_git_branch_hook
この運用の利点は、チケットにトピックブランチの修正履歴が残ることだ。
つまり、トレーサビリティを実現することができる。
この運用は、「No Ticket, No Fork」という運用ルールに発展する。
【Q3】Gitのマージ or PushをRedmineチケットのステータスとどのように対応づけるか?
Redmineチケットにトピックブランチを対応付けた場合、Pushするタイミングで、チケットも同時にCloseできるようにしたい。
そうすれば、「fixes #123」のコミットログを書いてコミットしたらチケットの進捗率が100%になってCloseされる運用と同じように運用できるから。
そのようなコマンドもネット上で公開されている。
mikoto20000/redmine_git_branch_hook
Git-Redmine: GitのコミットとRedmineを連携する。チケット駆動開発にも。 (ゆめ技:ゆめみスタッフブログ)
この運用は、「No Ticket, No Merge」という運用ルールに発展する。
しかし、この運用ルールには幾つかの問題もある。
一つ目は、トピックブランチをマージする時に、特定のリビジョンを選択してマージしたり(cherry-pick)、複数のリビジョンをまとめて一括でマージする(squash)する時、現状のトピックブランチから別のブランチ上にパッチを一旦作成する必要があるために、チケットとマージ用ブランチが対応しなくなる。
つまり、トピックブランチの全ての修正履歴がチケットに記録されなくなる。
もう一つは、トピックブランチをPushするのは普通はありえないので、masterへrebaseが許せるのか?
本来は、rebaseのマージが一番美しい。
トピックブランチの修正履歴がそのままmasterに引き継がれるので、修正履歴が残るから。
しかし、トピックブランチの修正履歴を全てmasterに反映する必要は、普通はそもそもない。
コミッタやライブラリアンの立場では、masterには完成されたパッチだけマージすれば良いのであり、パッチの作成に至るまでの試行錯誤の修正履歴は必要ない。
パッチのコードレビューは、マージするタイミングの完成したパッチだけで十分。
この辺りの運用ルールの判断は、品質保証部やPMOと開発チームの力関係に依存する。
【Q4】プルリクエストをRedmineにどのように実現できるか?
GitHubが優れている利点の一つは、パッチのマージをプルリクエストという手法で実現することで、Web上でそのやり取りが見える化され、コミッタがコードレビューして判断するプロセスを自然に実現できたこと。
コミッタは、プルリクエストされたパッチが気に入らなければ、Rejectすればいいだけ。
コミッタとコントリビュータの間のやり取りは、プルリクエストのコメント履歴に残り、その後の運用保守で非常に役立つ。
しかし、RedmineではプルリクエストをGitHubのように自動化できていない。
プルリクエストするためにチケットを作り、そのチケットにパッチを添付するような運用しか無い。
本来は、プルリクエストを依頼する時に、チケットが自動作成されて、そのパッチのリビジョンが自動で添付されるような仕組みが作られるべきだ。
わざわざチケットを作って、依頼するための文章を書くのは面倒な手続きだからだ。
この点は、今後のRedmineの課題になるだろう。
【Q5】git-flowやGitHub-flowをRedmineにどのように実現して運用したらよいか?
Gitのブランチ管理を体系づけたgit-flowや、それをGitHub用に簡略化したGitHub-flowは、Gitを使う人なら当たり前の運用方法だ。
しかし、Redmineではそれをどのように運用すればいいのか?
GitHub Flow (Japanese translation)
git-flow によるブランチの管理 - O'Reilly Japan Community Blog
Gitブランチを使いこなすgit-flow/GitHub Flow入門(終):プルリクエスト/レビューを取り込んだ、よりシンプルなGitHub Flowの運用を図解する (1/2) - @IT
ブランチ管理やマージ方法やプルリクエストを、Redmineのチケット管理とどのように対応付けるとよいのか?
Gitのブランチ管理やマージ方法やプルリクエストなどの一連の作業を、Redmine上で自動化して、もっとアジャイルに開発できる仕組みを実現できないのか?
現状のRedmineは、Subversionに特化しすぎていて、Gitとの連携方法の研究は未完成だ。
幾つかの手法は試されているが、それだけでは不十分だ。
Gitとの連携機能の強化は、Redmineの今後の課題になるだろう。
| 固定リンク
「Redmine」カテゴリの記事
- 「RedmineのUbuntu+Docker構築への移行」の感想 #redmineT(2024.11.24)
- 第27回redmine.tokyo勉強会の感想 #redmineT(2024.11.10)
- Redmineのバージョン設定でプロジェクトの設定方法が違う(2024.06.23)
- ウクライナのRedmine開発者が作ったRedmineテーマやプラグイン(2024.06.18)
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
「ソフトウェア工学」カテゴリの記事
- アーキテクチャ設計はベストプラクティスを参照するプロセスに過ぎないのか?~Software Processes are Software, Too(ソフトウェアプロセスもまたソフトウェアである)(2024.09.22)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「システムアーキテクチャ構築の原理」の感想(2024.05.06)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- マイクロサービス設計は従来のアーキテクチャ設計と何が違うのか(2024.01.02)
「構成管理・Git」カテゴリの記事
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- パッケージ設計の原則の意義は変化しているのか(2023.09.30)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 【資料公開】チケット駆動開発の解説~タスク管理からプロセス改善へ #redmine(2022.01.14)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
「Agile」カテゴリの記事
- 「世界一流エンジニアの思考法」の感想(2024.12.08)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
コメント