torutkのブログ

ソフトウェア・エンジニアのブログ

第4回shinagawa.redmine勉強会に参加してきた

Issue Tracking Tool(ITS)のRedmineに関する勉強会です。毎回すぐに定員になってしまう人気の勉強会の1つです。公式ハッシュタグは従来通り#47redmineです。

実は今日は日本Javaユーザーグループ主催のクロスコミュニティカンファレンスが開かれていたのですが、先にRedmineを申し込んでおり、仕事での活用度が高いツールなのでRedmine勉強会に出ることにしました。

shinagawa.redmine勉強会は、セッション(講演)と、グループスタディの2本立てで構成されており、単に聞いておしまいという勉強会とは違う特色があります。

セッション

チケット駆動開発フレームワーク〜現場の経験知からパターン言語へ」(@akipiiさん)

@akipiiさんは、次の2つの書籍の著者の1人である小川さんです。

Redmineによるタスクマネジメント実践技法

Redmineによるタスクマネジメント実践技法

チケット駆動開発

チケット駆動開発

よくチケット粒度、チケットの終了条件をどうすればいいですかと聞かれるそうです。チケット駆動開発TiDD)を実施しているところでは、暗黙にチケット運用の基準があるので、これをパターン化していきたいというお話です。

TiDDの原則
1. 最初にチケットありき(Ticket First)
2. 成果物は構成管理に従う

2.は、チケットは状態を管理したいプロセスを表すものなので、成果物はチケットに書かず、バージョン管理(構成管理)に入れるとのことです。

ラクティスについて、チケット粒度、終了条件、複数チーム間のタスク管理という問いでのお話が続きました。チケット粒度ではアンチパターン(?)として肥満児チケットや、同一原因のバグが大量にチケット発生するといった問題、終了条件では、90%シンドロームを起こす停滞チケット、なんども解決→フィードバックを繰り返すモンスターチケット、複数チームではアンチパターンでは1つの巨大プロジェクト、工程単位プロジェクト、を挙げていました。なお、複数チーム間の課題管理は現時点ではよい解がなく、PMBOKのCCB(構成管理委員会)、スクラムの「スクラムオブスクラム」に言及していました。

なお、チケット粒度、終了条件は、グループスタディとして後で数人毎のチームで討論
することとなります。

Redmineのブランチ戦略」(@marutosijpさん)

RedmineコミッターでMercurialラブな丸山さん(本日はBitBucket Tシャツ着用)から、Redmineソースコードをどうバージョン管理しているかのお話です。Redmineは現在Subversionで管理されていますが、お話はMercurialとGitでそれぞれどうRedmineリポジトリを扱っているか的な分散バージョン管理におけるブランチ/マージ話です。

RedmineSubversionリポジトリ開発方針は、trunkにコードをコミットし、CI環境でtrunkのテストを実施し、よい塩梅の結果であればstableブランチへtrunkの内容をマージし、さらにstableブランチでCI環境のテストを実施するということでした。

Subversionリポジトリに対して、MercurialやGitを使うことができるので、そこでのブランチの扱いを相当濃くお話されていました。特にMercurialとGitでブランチを作ることの違いについてブランチツリーを比較しながら紹介しており、分散型バージョン管理ツールを使った構成管理の事例として、濃い話をたっぷりと聞きました。

あと、Redmineは現在1.4.xと2.1.xがメンテナンス対象となっています。1.4系が捨てられたわけではありません、とのことです。

Redmine + Git + スクラム = ALMinium(仮)」(@LightningXさん)

次の本の著者の1人、岡本さんです。

Gitポケットリファレンス

Gitポケットリファレンス

また、次の記事の執筆も*1

中央リポジトリRedmineでも、Git利用OKとのことです。Redmine 2.1ではGit認証統合が搭載され、Redmineのロールに基づきリポジトリのread権・write権の制御ができるそうです。この話は知りませんでした。gitoliteでssh鍵を使ってユーザー管理するの大変だなぁと思ってました。なお、設定は、Apacheの設定ファイルにいろいろ記載するようです。Gitリポジトリ名に制約があるようです。

次に、開発組織へのGitの導入について、いろいろな組織があるため、段階的導入をしている事例を紹介していました。まずは「ちょっと難しいSubversionツール」的なものとしてGitとして使う、それからブランチを使う、さらにリベースを使っていく、という流れでした(メモを曖昧に取ってたのでちょっと違うかも)。

ブランチ/タグはGitでは自由に消せるようですが、それを消させないポリシーを設定する方法、GitHubのpull request相当機能が欲しくて作成したRedmine Git Branch Hookプラグインで、ブランチ作る時点でチケットに紐付けし、以後ブランチへのコミットはすべてチケットに関連付く(#refs NNN とコミットログに書かなくても)、Backlogsプラグインスクラム開発、といった活用の紹介がありました。

最後に、「Gitポケットリファレンス」贈呈じゃんけん大会を実施、勝ったのは前のセッション講演者の小川さんという落ちがありました。

なお、岡本さんはMercurialオープンソース開発のバージョン管理ツールとして使っていますが、マルチOSで日本語ファイル名を扱えるのがGitということでGitを使う理由に挙げておりました。

それに対して、Q&A時に丸山さんから、MercurialでもマルチOS日本語対応を今作業中との情報が出されました。来年2月ごろかも、ということです。

Redmineカスタマイズの事例紹介(@yusuke_kokuboさん)

名古屋より関数型を込めてセッションを開始しました。
本題は、Backlogsプラグインのいろいろカスタマイズ話です。見やすさ、扱いやすさの改善だけでなく、「システム的に縛れないものをルールでは縛らない」というポリシーで、入力されてなければ警告で教えてくれる、といったきめ細かいカスタマイズをしていました。
また、1万件チケットでメモリ不足で落ちないように100件ずつ処理するとかいった工夫もしていました(each_sliceというのがあるようです)。

最後におすすめプラグイン3つ、logs、code review、knowledgebaseを紹介していました。logsは、RedmineのログをRedmine上で参照しダウンロードできるもの、code reviewは有名なので略、knowledgebaseは、階層化/タグ付け/wikiライクなもの。

knowledgebaseはちょっと興味あるので紹介記事を調べてみました。

オープンスペーステクノロジ(グループディスカッションと発表)

さて、1チーム8人弱で課題テーマ(チケット粒度/完了条件)のどちらかについて議論し、うまくいったこと、あるいは失敗したことをまとめようというもの。

僕のグループでは「粒度」をテーマに議論をして発表。

チームディスカッションでは、チケットを誰が管理するのか? どんな用途に使うのか? の答えは必ずしも1つではないから、数Hの粒度から週単位の粒度まで、どれが正解というものでもないし、多分すべてが必要となるのではということになりました。

LT. fulmoプラグイン(@jun66j5さん)

大前さんのLTです。Tracな人(スライド自己紹介ページ参照)。

WebブラウザChromeまたはFirefox)のプラグインで、画面キャプチャを採って図や文字を加え、Redmineチケットとして作成できます。

LT. PJ管理ツールの取り組み(@yohwadaさん)

IPAではRedmine他と連携する「定量的プロジェクト管理ツール」を開発・公開してますが、IPAだけで今後も保守することが難しいので、社団法人を作りました、というお話です。

懇親会(11-11追記あり

会場の敷地にあるお蕎麦屋「そじ坊」で開催。最初に会場到着したので、席は一番奥の隅っこでした。

Redmineを使っていると、開発チームのコミュニケーションが促進されて思いもよらない効果がでますよね、という話題と、メーリングリストは活性化しないですね、という話題になったあたりで紹介された開発者向け強力チャットツールAsakusaSatellite。

Rubyは1.4、2.0、2.1とプラグインの互換が難しいバージョンアップが続いているけど、あるプラグインが2.1で動くか、起動時にエラーになれば分かるけど、一見問題なく立ち上がるものは判別がむずかしいですよね、との振りだしから、よく使われるプラグインならプラグイン本家で対応されてなくても、GitHubでフォークされているからそっちを見るとよいとか、カバレッジ100%なテストをしないとダメだよね、といった話が周囲でありました。

今日の勉強会はRedmineというより分散バージョン管理ツール使い方勉強会みたいでしたね、Subversionで開発している現場では意外と分散バージョン管理への移行に抵抗があるんです、という話から、Subversionのマージ地獄(うまくいくことは稀有)、Mercurialの日本語(マルチOS、というかマルチ文字コード)対応は、既存リポジトリの互換を目指して苦労しているけど、Gitはリポジトリを(単に)UTF-8にしたのでリポジトリの互換は失われるよ、といった話に展開していました。

最近、Redmineのマクロ(プラグイン)開発をやってみようと、Redmineの開発環境を整えようとしたが、rubyが初めての人間には情報なくちょっと厳しいなということで、周りにいる人にどんな環境で開発しているか聞いてみました。

という3点でした。
品川Redmine勉強会は今回2回目の参加でしたが、前回もグループ討議のときに同じテーブル(4人だったかな)にプラグイン開発している人がおりました。
プラグイン開発しているという人がふつうにいるんですね。

懇親会途中に、小川さんに「Redmineによるタスクマネジメント実践技法」にサインをもらいました。「チケット駆動開発」も購入していたのですが、職場に置いていたままだったので持参できず、「Gitポケットリファレンス」は岡本さんがセッションに登壇するのを事前チェックせず持参できずに、残念。

最後に、redmine.jpでおなじみのファーエンドテクノロジー社前田さんよりご提供(丸山さんが松江のRuby会議より直送)のMyRedmineグッズ(定規、ポストイット、クリアファイル)が「ほぼ」全員に配られました。僕は前回定規をもらっていたので、クリアファイルを頂きました。

*1:この記事、会社で読もうとしたとき、後ろがすごい気になって全然おちついて読めませんでした。