CIサーバを制圧せよ!
プロジェクトメトリクスと自動化技術の活用よる
混乱の収拾と「最強」の組織の育成
Apr/16/2015
Hiroyuki Ito, Kazuhisa Naoi
Rakuten, Inc.
http://www.rakuten.co.jp/
2
伊藤 宏幸 (The Hiro)
@hageyahhoo
 アジャイルコーチ
 TDDグループ(当時)
自己紹介 (1)
3
Agile2014で登壇してきました
是非発表スライドと論文をご確認下さい 
4
自己紹介 (2)
直井 和久
楽天株式会社
トラベルサービス開発・運用部
トラベルサービス開発課
Travel Extranetグループ
マネージャー
5
この物語は、ここでの改善に挑んだ、実践者達の記録である。
6
2. 戦略策定の重要性
3. Infrastructure as Codeの有益性
お伝えしたいこと
1. プロジェクトメトリクス
4. Technology-Driven Development
7
特にお伝えしたいこと!!
1. プロジェクトメトリクス
8
アジェンダ
2. 何を持って成果とすべきか?
3. どうやってCIサーバの負荷を減らすか?
4. どうメンバー・チームを育成していくか?
5. 結論
1. 課題の整理
9
アジェンダ
2. 何を持って成果とすべきか?
3. どうやってCIサーバの負荷を減らすか?
4. どうメンバー・チームを育成していくか?
5. 結論
1. 課題の整理
戦略策定の重要性
Infrastructure as Codeの有益性
Technology-Driven Development
プロジェクトメトリクス
プロジェクトメトリクス
プロジェクトメトリクス
プロジェクトメトリクス
10
2. 何を持って成果とすべきか?
3. どうやってCIサーバの負荷を減らすか?
4. どうメンバー・チームを育成していくか?
5. 結論
1. 課題の整理
11
2014年6月末
Agile2014へ提出する論文と
まさに格闘中の時期…
12
これ以上CIサーバの
ジョブを増やしたら、
サービスを提供できなくなる!
CIサーバの負荷が高すぎて、
期限通りにプロダクトを
リリースできない!
トラブル、襲来
13
当時の我々の状況
お互い、CIサーバの設定・監視・運用には
責務を持っていなかった。
とあるQAプロジェクトの自動化を主導中
• ビルドパイプラインの構築
• リリース自動化の実現
• スモークテストの構築
メインシステムの多言語化対応を
マネージャとして主導中
14
立ち上がった。
生き残るために。
15
原因分析結果
400以上のジョブ
(さらに増加の傾向)
スタンドアローン構成
実行待ちキューが
10前後なのもザラ
Load averageが
10を超えるのはザラ
そもそも画面すら開けないことが多かった。
• 「Script Console」を試すこと自体がバクチ
誰も監視・メンテ
していない!
重い…
16
元々、ボランティアで構築・運用されていた。
真因分析結果
組織横断的に、CIサーバ専任
で動けるチームがない!
つくるぞ~!やるぞ~!
有志の
エンジニア
たち
17
• 問題が起きても放置されるようになってきた。
• サーバを常時監視する仕組みがなかった。
真因分析結果
組織横断的に、CIサーバ専任
で動けるチームがない!
誰かがきっと
何とかしてくれる…!
仕事多い (><)
有志の
エンジニア
たち
ぐぬぬ
18
正常稼動しないことが業務損失になる現状、
常設・専任チームによる解決が必須と判断。
常設
チーム
最初に実施した施策
CIサーバ専任の組織横断的
チームの設置を提案した
中長期ビジョンの
策定・実現にも
責任を持つ
負荷増大に対して、
長期的・根本的に
対応できるようにする
19
※イメージです
Jenkins Consolidation Team、結成。
20
2. 何を持って成果とすべきか?
3. どうやってCIサーバの負荷を減らすか?
4. どうメンバー・チームを育成していくか?
5. 結論
1. 課題の整理
21
何を成果として見せれば良いのか?
自分たちは正しい方向に進んでいると
言えるのだろうか?
自分たちはどこに向かえば良いのか?
新たな課題
22
でも、そもそもCIサーバの成果って、
何をどう見せれば良いのだろう???
施策初期の悩み
試してみないと分からない仕事のため、
常に振り返りながら新しい施策を打ち立て
実施していく必要があった
仕事である以上、成果をマネージャ層・
ステークホルダーに「みせて」「喜んでもらう」
必要がある
23
変化の見える数値を探す
定期的に数値をトラックし、
特に施策実施前後の変化に注目する
数値自体の有効性を常にチェックし、
数値の変化の内容次第では、施策を見直す
解決策としてのプロジェクトメトリクス
成果としてマネージャ層・ステークホルダーに
「みせ易く」「うれしい」数値を見つける
24
どうやってCIサーバの負荷を減らすか?
どうやってCIサーバをスケールするか?
どうやってCIサーバを監視するか?
どうやってメンバーを教育していくか?
一方でやらなければいけないことが多い!
25
プロジェクトメトリクスの前提として
基本戦略・ロードマップを
まず最初に明確化した。
26
プロダクトに関わる(極力)全ての人が
合意できる目標になっているか?
(例)インフラ担当者もOKできる内容か?
エンジニア視点だけで満足した目標に
なっていないか?
• ビジネス価値の観点も含むべき
持続可能な施策となっているか?
• ハネムーンナンバーは高くないか?
• 施策をリードできる人材は十分か?
特に注意した点
27
ジョブ増加に耐えられる、CIサーバの
インフラ・仕組み・手順を整備すること
※インフラ担当者らを巻き込んだゴールとする
方策は問わず、リリース遅延を再発させずに
予定通りプロダクトをリリースすること
※ビジネス価値からゴールを設定する
1. ミッション
専任チームで課題解決に当たりつつ、
後進も併せて育成すること
※持続可能性をゴールの1つとする
28
2. CIサーバのボトルネックを解消する
• CIサーバ群をマスタースレーブ構成に改め、負荷分散を容易化する。
• 既知の技術負債等を1つ1つ解決し、CIサーバ群を「クリーン」にしていく。
3. CIサーバの使い方を教育していく
利用者(エンジニア)にCIサーバの「正しい」使い方を教えることで、
技術負債・トラブルの芽を摘むと同時に、利用者の育成も図る。
2. 基本戦略
1. 取り急ぎCIサーバの負荷を減らす
• 高負荷ジョブを一時停止するなどして、一時しのぎと改善の時間稼ぎをする。
• 負荷分散用サーバを調達・整備し、ジョブを各サーバに「一時疎開」させる。
4. 専任チームを後進に引き継ぐ
• 伊藤・直井がリードする体制から、育成も兼ねて後進にタスクを引き継ぐ。
• 結果として、CIサーバの「正しい」使い方をさらに広めることも図る。
29
3. ロードマップ
30
プロジェクトメトリクスの候補 (1)
業務への支障の
減少度合い
「リリース待ち」・「リリース遅延」の
発生頻度と増減の推移
インフラの
整備状況
サーバ準備タスクの予定・実績の差異
• 待ち時間・作業割込時間も併せて計測する
全ジョブをスレーブで実行できるようにするまでの
総タスク数と、その予定・実績の差異
サーバの設定変更およびプロビジョニングにかかる
時間とその推移
マスタースレーブ
構成に改めた成果
各ジョブのスレーブへの移行率と推移
各ジョブのスレーブでの稼働率・成功率と推移
トラブルに関する
問合せとその対応
問合せ件数・解決件数と推移
各問合せの解決までにかかった平均時間と推移
31
プロジェクトメトリクスの候補 (2)
負荷
アラートメール数の推移 (※後述)
各サーバの負荷の推移
• Load average
• CPU %
• IO wait %
• ディスク使用量
各ジョブの平均実行時間・平均待ち時間の推移
実行待ちジョブ数の推移
(特に負荷の高い)ジョブの実行頻度とその推移
利用者が「CIサーバが重い」と感じることが
どれぐらい減ったか?
(Gut feel)
32
苦悩と歓喜の始まり
33
2. 何を持って成果とすべきか?
3. どうやってCIサーバの負荷を減らすか?
4. どうメンバー・チームを育成していくか?
5. 結論
1. 課題の整理
34
ご覧の有様
400以上のジョブ
(さらに増加の傾向)
スタンドアローン構成
実行待ちキューが
10前後なのもザラ
Load averageが
10を超えるのはザラ
まずはこれを解決する!
誰も監視・メンテ
していない!
重い…
35
段階的なアプローチを採用
その時点で計測可能なプロジェクトメトリクスに
絞って見せることとした
36
この時点で計測したプロジェクトメトリクス (1)
業務への支障の
減少度合い
「リリース待ち」・「リリース遅延」の
発生頻度と増減の推移
インフラの
整備状況
サーバ準備タスクの予定・実績の差異
• 待ち時間・作業割込時間も併せて計測
全ジョブをスレーブで実行できるようにするまでの
総タスク数と、その予定・実績の差異
サーバの設定変更およびプロビジョニングに
かかる時間とその推移
マスタースレーブ
構成に改めた成果
各ジョブのスレーブへの移行率と推移
各ジョブのスレーブでの稼働率・成功率と推移
トラブルに関する
問合せとその対応
問合せ件数・解決件数と推移
各問合せの解決までにかかった平均時間と推移
37
この時点で計測したプロジェクトメトリクス (2)
負荷
アラートメール数の推移
各サーバの負荷の推移
• Load average
• CPU %
• IO wait %
• ディスク使用量
各ジョブの平均実行時間・平均待ち時間の推移
実行待ちジョブ数の推移
(特に負荷の高い)ジョブの実行頻度とその推移
利用者が「CIサーバが重い」と感じることが
どれぐらい減ったか?
(Gut feel)
38
施策
39
(1) 単純にCIサーバ数を増やす
4台増強
メイン機
弐号機 参号機 量産機 量産機
負荷の高いジョブを
一時疎開する
次のステップのための
時間稼ぎをする
まずメイン機の
負荷を減らす
40
(2) マスタースレーブ構成を適用する
マスター
スレーブ1 スレーブ2 スレーブ3 スレーブ4
ジョブを
分散実行
監視の仕組みも
導入・強化(後述)
マスターサーバに
改造
41
(3) Infrastructure as Codeを適用する
マスター
スレーブ1 スレーブ2 スレーブ3 スレーブ4
マスターを正とし、
設定をスレーブと同期
設定がコードなので
分かりやすい
Immutableなので
壊されても復元可能
42
成果
43
インフラの整備状況の予実
実施した施策 予定 実績
単純にCIサーバ数を増やす 1ヶ月 1週間
マスタースレーブ構成を適用する 1~2ヶ月 1週間
Infrastructure as Codeを適用する 2ヶ月 1ヶ月
[要因]
• 直井さん主導による、インフラ担当者との迅速な折衝
• 若者の人間離れ(≒メンバーの予想以上のがんばり)
44
直井さんによる交渉・施策のポイント
• インフラとの交渉は、
施策実現のために
必要なことをやったに過ぎない。
• この時点で、次への布石を
着実に打っておいた!
45
0
5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
105
110
115
120
125
130
アラートメール数 (2014/08/01 - 2014/09/30)
アラートメール数の推移にみる負荷減少
8月
241通
9月
108通
55.2%の
削減!
ジョブ増加で一時的に
負荷が高まったが、
リリースできないという
最悪の事態は再発せず。
サーバのload averageが
10を越えたらこれを通知する
仕組みが元々あったため、
これを活用した。
46
採用前 採用後
1週間 30分
[要因]
• コミュニケーションミスによる依頼の往復を、
ほぼ無くすことができた
• エンジニアが動作確認したものをインフラ担当者が実施する
だけなので、作業自体が容易になった
• 万が一トラブルが起きても、
Immutable Infrastructureなので簡単に復旧できる
Infrastructure as Codeの有益性 (1)
47
Infrastructure as Codeの有益性 (2)
startup.shの権限を、
774から777に変更してほしい
以前のインフラ運用体制
エンジニア インフラ担当
madokaグループの
homuraユーザで、
Tomcatを起動・停止
できるようにしたい
shutdown.shが実行できない!
homuraユーザがmadokaグループに入っていない!
startup.shの権限を、
777に変更しました
48
Infrastructure as Codeの有益性 (3)
個々のサーバで
構成が異なることが多いため、
事前確認で漏れを無くすことが困難
実際に動作確認するまでは
安心できない
大概、依頼内容および設定結果に
誤りがある
以前のインフラ運用体制
エンジニア インフラ担当
指示された通りの設定は
(大体)できる
なぜその作業を依頼されたのか、
その意図・目的までは伝わりづらい
大概多忙なので、
作業が後手にまわりがち
コミュニケーションミスが
多発しがち
やり取りが多くなりがちで
時間がかかる
49
実際に面倒な目に遭いました…
Infrastructure as Codeを使って、
このやり取り自体を
無くしてしまいましょう!
50
Infrastructure as Codeの有益性 (4)
新しいインフラ運用体制
Recipeとテストコードを
実行すれば良い
ダメだったら設定を戻せばよいので、
作業上のリスクが少ない
必要な全ての設定は、
Recipeとテストコードとして残せる
Recipeとテストコードの
Pull Requestで、
手戻りの少ない作業依頼が出来る
依頼前に各自のPCで
構築・動作確認が出来る
エンジニア インフラ担当
51
(再掲) インフラの整備状況の予実
実施した施策 予定 実績
単純にCIサーバ数を増やす 1ヶ月 1週間
マスタースレーブ構成を適用する 1~2ヶ月 1週間
Infrastructure as Codeを適用する 2ヶ月 1ヶ月
52
マスターサーバが軽くなったので、もう一工夫を。
53
マスターサーバの負荷軽減の副次的効果
マスター
スレーブ
下記のような詳細な情報を
スクリプトで機械的に
取得できるようになった
• ジョブ一覧
• 実行時間の推移
• スレーブの情報
アラートメールが
激減した
“Script Console”が
使えるようになった!
アラートメールを
改良する余裕が生まれた
負荷の高いジョブの
実行頻度の調査が容易に
より詳細なプロジェクトメトリクスの計測と
改善が可能に!
54
新たに計測し始めたプロジェクトメトリクス (1)
業務への支障の
減少度合い
「リリース待ち」・「リリース遅延」の
発生頻度と増減の推移
インフラの
整備状況
サーバ準備タスクの予定・実績の差異
• 待ち時間・作業割込時間も併せて計測する
全ジョブをスレーブで実行できるようにするまでの
総タスク数と、その予定・実績の差異
サーバの設定変更およびプロビジョニングにかかる
時間とその推移
マスタースレーブ
構成に改めた成果
各ジョブのスレーブへの移行率と推移
各ジョブのスレーブでの稼働率・成功率と推移
トラブルに関する
問合せとその対応
問合せ件数・解決件数と推移
各問合せの解決までにかかった平均時間と推移
55
新たに計測し始めたプロジェクトメトリクス (2)
負荷
アラートメール数の推移
各サーバの負荷の推移
• Load average
• CPU %
• IO wait %
• ディスク使用量
各ジョブの平均実行時間・平均待ち時間の推移
実行待ちジョブ数の推移
(特に負荷の高い)ジョブの実行頻度とその推移
利用者が「CIサーバが重い」と感じることが
どれぐらい減ったか?
(Gut feel)
56
「もうひと工夫」の重要性
メール1つ取っても、
1つ1つ着実に改善を続けたことの
積み重ねが、成果を出せる組織の
土台になっていく。
57
09:40:04 up 154 days, 19:14, 2 users, load average: 11.59,
11.32, 7.16
[Heavy Process Top 10] CPU(%), Proccess
165 xxxxx
アラートメール (1) :改善前
• uptimeコマンドを使っているが、情報が冗長
• CPU使用率の高いプロセスは特定できるが…
• プロセスのユーザは特定できない
• 何が問題でどう解決すれば良いのかの情報が少ない
• メモリ使用率の高いプロセスは分からない
• どのジョブが原因なのかを特定できない
そもそもスペルが
間違っているぞ!
58
• uptimeコマンドの実行結果を、load averageのみに絞った
• CPU使用率に加え、メモリ使用率の高いプロセスも
特定・出力するようにした
• 当該プロセスのユーザを特定・出力するようにした
• 原因となるジョブ名を特定・出力するようにした
但し、一番下に出力しているため、
都度メールを一番下まで見なければならない
アラートメール (2) :改善開始
Load average: (1.03, 1.05, 1.23)
--- Top 10 Heavy CPU consumers ---
tomcat xxxxx
--- Top 10 Heavy Memory consumers ---
ito xxxxx
--- Jobs currently running ---
- Sayaka
59
原因となるジョブ名を、メールの最初に出力するようにした
• ジョブの特定が非常に容易になった
(メールを開けば一目で分かる)
• 問題のあるジョブの特定と原因調査が、非常に容易になった
• と言うよりも、この時点で初めてこれができるようになった
アラートメール (3) :更なる改善
Load average: 10.0, 5.2, 2.4
--- Jobs currently running ---
- Sayaka
--- Top 10 Heavy CPU consumers ---
tomcat xxxxx
--- Top 10 Heavy Memory consumers ---
ito xxxxx
60
(特に負荷の高い)ジョブの実行頻度とその推移
ジョブ名 アラートの頻度
Madoka 32
Homura 17
Sayaka 15
Anko 13
Mami 13
Charlotte 4
QB 3
Hitomi 2
Uro-Buchi 2
負荷の高いものから
(スレーブへの移行などの)
対応を優先的に行なう
これを週次で関係者へ
メール通知することで、
自発的な活動を促す
61
失敗から学ぶアジャイル
最初から全情報を計測するのではなく、
出来るところから徐々に集めていけば良い
プロジェクトメトリクスを定期的に振り返り、
適宜見直しを行なう必要がある
想定外の状況が生じることもままある
→積極的に活用することをまず考えよう
全部が全部役に立つ情報ではない
→役に立つ情報だけを計測すれば良い
62
プロジェクトメトリクスの振り返り (1)
業務への支障の
減少度合い
「リリース待ち」・「リリース遅延」の
発生頻度と増減の推移
インフラの
整備状況
サーバ準備タスクの予定・実績の差異
• 待ち時間・作業割込時間も併せて計測する
全ジョブをスレーブで実行できるようにするまでの
総タスク数と、その予定・実績の差異
サーバの設定変更およびプロビジョニングにかかる
時間とその推移
マスタースレーブ
構成に改めた成果
各ジョブのスレーブへの移行率と推移
各ジョブのスレーブでの稼働率・成功率と推移
トラブルに関する
問合せとその対応
問合せ件数・解決件数と推移
各問合せの解決までにかかった平均時間と推移
63
プロジェクトメトリクスの振り返り (1)
業務への支障の
減少度合い
「リリース待ち」・「リリース遅延」の
発生頻度と増減の推移
インフラの
整備状況
サーバ準備タスクの予定・実績の差異
• 待ち時間・作業割込時間も併せて計測する
全ジョブをスレーブで実行できるようにするまでの
総タスク数と、その予定・実績の差異
サーバの設定変更およびプロビジョニングにかかる
時間とその推移
マスタースレーブ
構成に改めた成果
各ジョブのスレーブへの移行率と推移
各ジョブのスレーブでの稼働率・成功率と推移
トラブルに関する
問合せとその対応
問合せ件数・解決件数と推移
各問合せの解決までにかかった平均時間と推移
予想以上に早く片付く
• 見せる成果としては十分
• 要因は分析済で、知見は今後に活かせる
• 作業終了につき、計測終了
• マスターの高負荷発見時、
ジョブの対応要否を判断する材料として活躍
• 必要な時だけ閲覧できれば十分で、
常時監視は不要
64
プロジェクトメトリクスの振り返り (2)
負荷
アラートメール数の推移
各サーバの負荷の推移
• Load average
• CPU %
• IO wait %
• ディスク使用量
各ジョブの平均実行時間・平均待ち時間の推移
実行待ちジョブ数の推移
(特に負荷の高い)ジョブの実行頻度とその推移
利用者が「CIサーバが重い」と感じることが
どれぐらい減ったか?
(Gut feel)
65
プロジェクトメトリクスの振り返り (2)
負荷
アラートメール数の推移
各サーバの負荷の推移
• Load average
• CPU %
• IO wait %
• ディスク使用量
各ジョブの平均実行時間・平均待ち時間の推移
実行待ちジョブ数の推移
(特に負荷の高い)ジョブの実行頻度とその推移
利用者が「CIサーバが重い」と感じることが
どれぐらい減ったか?
(Gut feel)
• 報告および改善要否の判断については、
次の2つの情報だけで十分だと分かった
• アラートメール数
• (特に負荷の高い)ジョブの実行頻度と
その推移
• 他の情報は、詳細分析が必要な時だけ
見れば十分
66
※イメージです
電撃的勝利!
67
2. 何を持って成果とすべきか?
3. どうやってCIサーバの負荷を減らすか?
4. どうメンバー・チームを育成していくか?
5. 結論
1. 課題の整理
68
2014年9月下旬
楽天テクノロジーカンファレンス
絶賛準備中の時期ですよ。
69
CIサーバの負荷軽減・改善が
想定以上に速く進んだため、
この目標もスコープに含めることとした
成果の報酬としての新たなタスク
部の2014年度(~12月)の目標として、
全プロダクトのUTのラインカバレッジを
65%以上にすることが設定されていた
70
UTカバレッジを目標に設定した狙い
• UT自体を、組織・エンジニアに
習慣付けること。
• 達成度を活用して、
メンバーのモチベーションを
高めること。
71
ツールの乱立
• Cobertura
• Emma(JaCoCo)
• djUnit…
UTカバレッジの
計測手段と
メトリクスの不足
UTカバレッジに関する当時の課題
12.3%
05101520253035404550556065707580859095100105110115120125130
施策をリードする
メンバーの不足
72
(一方で)マスターサーバの更なる負荷軽減の効果
マスター
スレーブ
ツールを統合し、
CoberturaとJaCoCoの
2つに絞ることとした
Viewを
使えるようになった! CIサーバを自発的に
色々と試すメンバーが
増えてきた
次のステージに移れる!
73
(1) Viewを作成し、カバレッジを常に誰でも確認可能にした
Cobertura JaCoCo
74
計測対象ジョブ数 74
うちカバレッジを
取得している数
67
目標達成済
ジョブ数
35
達成率
47.3%
(+18.9% WoW)
(2) カバレッジの推移を、週次で記録・報告するようにした
先週比を追加し、
成長の共有と
成果の強調を図った
75
(3) 各グループからメンバーを徴発し「65%チーム」を組織した
対象グループ:約10
CIサーバを自発的に
色々と試すメンバーを
優先的にアサインした
このチームを介して、
UTカバレッジ向上の
効率化を目指した
76
(3) 各グループからメンバーを徴発し「65%チーム」を組織した
対象グループ:約10
CIサーバを自発的に
色々と試すメンバーを
優先的にアサインした
このチームを介して、
UTカバレッジ向上の
効率化を目指した
真実を語らねばなるまい…!
77
当初は、不足気味の「作業者」の補充として
徴収・組織したが…
「65%チーム」の真の姿
本当の目的は、Jenkins Consolidation Teamと
そのタスクを引き継ぐこと!
• 伊藤らの支援期間が年末で切れるため
「65%チーム」のメンバーは、
引継ぎ対象と同時に育成対象でもあった。
78
プロジェクトメトリクスと自動通知とを活用した、
目標・課題・進捗の共有による
コラボレーションの促進
自動化技術による業務効率化
• Infrastructure as Code
• CIサーバ自体の適用範囲の拡大
自動化技術とプロジェクトメトリクスを活用した、
「検査と適応」による学習の促進
育成指針としてのTechnology-Driven Development
79
作業を進める上での課題を、
正直に言い合えるようにした
週次定例ミーティングを開催し、
課題と知見をface to faceで共有した
「65%チーム」の初期の運営
より迅速に動いてもらうために、
メトリクス情報を優先的かつ詳細に伝えた
先に共有した課題・知見・メトリクス情報とを、
各自の担当グループ内に周知してもらった
80
プロジェクトメトリクス情報を元に、
次の行動を考え実践する癖をつけてもらった
Infrastructure as CodeとOJTとで、
我々の実務を少しずつやってもらうようにした
課題を報告してもらうだけではなく、
どうすれば解決できるかに意識を移してもらった
メンバーに徐々にチーム運営を任せていった
• メンバーの自主性を刺激してみた
「65%チーム」の後期の運営 (作業引継対象としての育成)
81
2014年11月のある日
計画通り…!
こういう仕組みを作ったので
試してみませんか?
これも対応した方が
良くないですか?
あのグループのタスクを
手伝おうと思うのですが…
82
Infrastructure as CodeとOJTとで、
実際に実務を代行できるようになってきた
• 12月時点で、約10件の業務を代行
UTカバレッジが目に見えて向上してきた
• UTカバレッジの向上が更なるモチベーション
を生む、プラスのサイクルが生まれた
問題を起こしているチームを見つけたら、
自発的に解決を手伝うようになった
「65%チーム」の成長
83
プロジェクトメトリクスにみる「65%チーム」の成長
0.0%
10.0%
20.0%
30.0%
40.0%
50.0%
60.0%
70.0%
80.0%
90.0%
目標達成率の推移
84.1%
計測対象ジョブの
絞り込みを実施
16.7%
週次計測・報告
による確実な前進
正直、年末に30%超えが現実的な目標と考えていた
84
実際に成果を出してみて
数値をキチンと計測する
ということから始めないと、
そもそも改善なんて
生まれませんよ!
85
※イメージです
完全勝利!!
86
2. 何を持って成果とすべきか?
3. どうやってCIサーバの負荷を減らすか?
4. どうメンバー・チームを育成していくか?
5. 結論
1. 課題の整理
87
最終的な成果
リリース遅延を解決し、
再発しないようにした
CIサーバのスケールアウトを実現
・550前後のジョブが現在稼働中
後進を育成し、
専任チームそのものを引き継いだ
88
ロードマップ(予定)
89
ロードマップ(実績)
90
残課題
IT/STレベルのテストの自動化が
まだまだ不足している
テスト環境でデータ競合が生じる
• Immutable Infrastructureで…
リリース自動化がまだ不十分
• Blue-green deploymentを…
91
新たな課題
• UTカバレッジを上げさえすれば
品質も上がるだろうという
安易な幻想を、
一部マネージャに持たせて
しまいそうになった。
• 改善が劇的だったがゆえに、
簡単に改善ができるものと
勘違いされがち。
92
戦略と(特に自動化)技術との融合による
高速なPDCAサイクルの実現
PDCAサイクルの有効性を高めるための
プロジェクトメトリクスの発見・計測・見直し
上記の組み合わせによる
人材・組織育成とコラボレーションの拡大
成功につなげるアジャイル
93
プロジェクトメトリクスのポイント
考えることのプラスになる情報を見つけよう
• 現状の問題はどこにあるのか?
• 改善施策の効果はあったか?
メトリクスを定期的に振り返り改善していこう
• 役に立たなければ、潔く捨てる覚悟も必要
• 足りなければ創ろう
数値の変化に意味を見いだそう
• 数値の変化にこそ、真の知識が詰まっている
• 変化が見える情報を見つけることが勝利の鍵
コミュニケーションの手段として活用しよう
• 今まで分からなかった情報を元に話をしてみると、
更なる発見が得られる
94
0.0%
10.0%
20.0%
30.0%
40.0%
50.0%
60.0%
70.0%
80.0%
90.0%
84.1%
計測対象ジョブの
絞り込みを実施
16.7%
週次計測・報告
による確実な前進
全ては計測から
滾らせろ!
96
参考資料
『Useful Metrics in a Complex World』(Agile2014)
http://www.agilealliance.org/files/9814/0509/9343/Experienc
eReport.2014.Power.pdf
『Moneyball for Software Projects』 (Agile2014)
http://schd.ws/hosted_files/agile2014/f0/1272_Agile_2014_-
_Software_Moneyball_%28Troy_Magennis%29.pdf
『Technology-Driven Development』 (Agile2014)
http://www.agilealliance.org/files/5014/0509/9284/Experienc
eReport.2014.Ito.pdf
『メトリクスによる「見える化」のススメ:
エッセンシャル・リーン』
http://www.slideshare.net/ssuser968fab/xp-matsuri-
2014ltthehiro

CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成