第4回shinagawa.redmine勉強会 RedmineとGitとスクラム おかもとたかし
アジェンダ  RedmineでGitを運用するコツ  ALMiniumによるスクラムの運用
Gitの特徴  分散型  やり直せるマージ、コミット  オフラインでもok  Subversionを共有リポジトリとして利用可能  リベースによるブランチの更新  高速  GitHub
やり直せるマージ・コミット $ svn update  コンフリクトが発生するとコードがぐちゃぐち ゃに  もう一度update前に戻したいけど時すでに遅 し updateの前にはフォルダのバックアップを取る 運用orz
Gitなら pull/mergeなどでぐちゃぐちゃになっても $ git reset --hard HEAD で元に戻せる!!pullの場合は、 $ git merge FETCH_HEAD でマージをやり直すことができる
オフラインでもコミット可能  出張先で  ちょっとカフェで休憩しながら  通勤電車の中で  回線状態が悪い海外との開発  トイレでもok(ex. 下痢気味のときなど)
Google Trends  Subversion/Mercurialに比べるとGitが頭一 つユーザが多い  ドキュメント・情報も多い
RedmineのGit対応  リポジトリビューの対応  コミットキーワードとチケットの対応付け  ブランチのグラフィカルな表示  Redmineとの認証の統合 (2.1~。2.0まではpatchが必要#4905)
HTTPの利用によるGitアクセス  HTTP(S)が通れば何処でもアクセス可能  Redmineのアカウントと統合可能  プロジェクトの設定でリポジトリの Read/Writeの設定が可能 ロール Read Write(push) 管理者 ○ ○ 開発者 ○ ○ ロールを作成する場合: Read: リポジトリの閲覧 報告者 ○ × Write: コミットの閲覧 匿名ユーザ ○(公開プロ × ジェクトのみ)
RedmineのGitの設定 SetEnv GIT_PROJECT_ROOT /var/opt/alminium/git SetEnv GIT_HTTP_EXPORT_ALL httpd.conf ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ <LocationMatch /git/> PerlAccessHandler Apache::Authn::Redmine::access_handler PerlAuthenHandler Apache::Authn::Redmine::authen_handler AuthType Basic AuthName Git # for Redmine Authentication RedmineDSN "DBI:mysql:database=alminium;host=localhost" RedmineDbUser "alminium" RedmineDbPass "alminium" RedmineGitSmartHttp yes Require valid-user </LocationMatch>
リポジトリの名前規約  プロジェクト名: hoge  リポジトリのフォルダ名:  hoge  hoge.server  hoge.client  hoge.doc
REDMINE+GIT運用のコツ
共有リポジトリの作成 $ git init –-bare --share ■HTTPを利用する場合 $ git update-server-info $ mv .git/hooks/post-update.sample .git/hooks/post-update ※ロックを行うためのファイル管理 $ chown apache.apache –R . (RHEL系OSの倍)
段階的に導入する  ちょっと使い難いSubversion  ブランチを活用せずに導入  設定やプッシュ、プル、マージに慣れる  中央リポジトリはSubversionでもok  ちょっと便利なSubversion  git resetで間違えたコミットを編集(プッシュ前)  フェッチ・リベース・マージで綺麗な履歴  ブランチを活用  単なるブランチとして活用(マージのみ利用)  リベースを利用した高度な運用
Redmine+Git運用のコツ リベースで綺麗な履歴を作る
リベースなしの場合 pull/fetch push pull/fetch push pullからpushの間に他のコミットが挟まれるとブランチのマージになる
リベースなしの場合 pullからpushの間に他のコミットが挟まれるとブランチのマージになる
pull/pushを繰り返すと… マージだらけに…
リベースで綺麗な履歴 push
リベースで綺麗な履歴
このままpushすると push pullからpushの間に他のコミットが挟まれるとブランチのマージになる
リベースする
リベースした $ git fetch $ git rebase FETCH_HEAD master fetch/rebase
プッシュ push
履歴が直線!! 綺麗なコミット履歴ができる
Redmine+Git運用のコツ その他雑多なコツ
git push –fはやってはダメ git push –f は使用すべからず コミットの消失やリポジトリの不整合が発生 ×4 ここから先は パラレルワールド
削除したコミットを共有リポジトリ へ反映させない(push –fの禁止) サーバ上のリポジトリディレクトリで実行 $ git config –-bool receive.denyNonFastforwards true (git init時に—shareオプションをつけても設定される)
ブランチ・タグの削除禁止 サーバ上のリポジトリディレクトリで実行 $ git config –-bool receive.denyDeletes true
Web画面からのリポジトリ作成 SCM Creatorプラグイン リポジトリ名
ブランチとチケットの関連付け  Redmine Git Branch Hook #xxxが含まれるブランチを関連するチケットに関連付け ブランチを #23 チケットに対応付け 生徒会は投 稿に返信で きる 1‘ 2’ 3’ story/#23 指定したブランチへ のマージで自動的に クローズ 1 2 3 4 5 master
Redmine Git Branch Hook  ブランチにコミットすると、自動的にコミットメ ッセージをチケットに追加  Gitクライアントへのインストールは不要 (Redmine側で関連付けを実行)  指定したブランチ(ex.master, releaseなど) へマージすると自動的にチケットをクローズ (GitHubのプルリクエスト相当の機能を実現)
トラブルシューティング  GitのURLにアクセスして何も表示されなく てもうろたえない http://redminehost/git/xxxx  リポジトリビューワにアクセスしてエラーが 出たら何かコミットしろ
pull/fetchでおかしくなったら リセットでマージ前に戻して再マージ $ git reset –-hard $ git merge FETCH_HEAD
ALMINIUMの紹介
ALMiniumの紹介  ALM+Redmineの合金=ALMinium  Git/Backlogsなど含め簡単インストール  Selenium/Titaniumに続くツールという意味  RedmineをGitHubライクに (Redcarpet Wiki Formatter/ブランチのマージ操 作によるチケットクローズによる疑似プルリク エスト)  Backlogsプラグインによるスクラムのサポ ート
Webサイトと画面
ALMiniumの概要 Gerrit Jenkins Redmine+Plugins Marcurial Git HTTPS(HTTP) Subversion Ruby/Passenger MySQL Apache CentOS/Ubuntu Page 38 アイコンは次のサイトで配布されているものですhttp://www.visualpharm.com/
ALMiniumのGit関連機能  Apacheへの設定の自動化とRedmineとのユーザ 連携  HTTPSによる便利でセキュアなアクセス  Webからのリポジトリの作成  Redmine Git Branch Hookによるブランチとチケ ットの対応付け  コミットの上書き禁止、タグ・ブランチの削除禁 止など、安全に使える設定
Gitポケットリファレンス  環境設定・Git入門  Windowsユーザーにも 優しく  コマンドリファレンスで 中級者もためになる  フック・ALMinium/Gitolite でリポジトリ管理者も納得  GitHub
チーとシート 見本
スクラム対応
無駄をなくす 使わない機能 ほとんど使わない 機能 よく使う たまに使う
スクラムのおさらい 要件(バックログ)整理 スプリント計画 悩みを投稿できる 悩みを投稿できる 投稿に返信できる 投稿に返信できる Webサイトを公開する Webサイトを公開する 非公開にできる メールで通知する タスク レビュー・ スプリント実施 振り返り 悩みを投稿できる 投稿に返信できる Webサイトを公開する
Redmine Backlogsでの対応 要件(バックログ)整理 スプリント計画 悩みを投稿できる 悩みを投稿できる 投稿に返信できる 投稿に返信できる Webサイトを公開する Webサイトを公開する 非公開にできる メールで通知する タスク レビュー・ スプリント実施 振り返り 悩みを投稿できる 投稿に返信できる Webサイトを公開する
バックログの管理 チケットの粒度 チケット=バックログをストーリーポイントで管理
タスクボード
バーンダウンチャート
集計とか
アジャイルのレベル  レベル4. 自己組織化  レベル3. フィードバック  スプリント毎のバックログの見直し  ベロシティの計測  CI  レベル2. 計測  ブランチ・マージ ALMinium  チケット化  タスクボード・バーンダウンチャート  スプリント計画ミーティング  レベル1. 共有  ソースコード  ストーリー/タスク  問題・課題  朝会・振り返り
ご清聴ありがとうございました!!

RedmineとGitとスクラム