月別アーカイブ: 2012年4月

MacにHomebrewでTomcatをインストール

 

基本的には下記コマンドで一発OKなはず。

brew install tomcat

 

なんですが、

インストール時に下記エラーが出たら

curl: (22) The requested URL returned error: 404

Error: Download failed: http://www.apache.org/dyn/closer.cgi?path=tomcat/tomcat-7/v7.0.23/bin/apache-tomcat-7.0.23.tar.gz

(tomcatのバージョンは違うかもしれません)

対象のバージョンが既に提供されていないかもしれないので、

ブラウザで下記のURLに遷移して

http://www.apache.org/dyn/closer.cgi?path=tomcat

提供されているバージョンで取得したいバージョンを確認して、ターミナルから下記コマンドでFormulaを書き換える

brew edit tomcat

(viが起動する。他のエディタで修正する場合は、ファイルの実態はここ /usr/local/Library/Formula/tomcat.rb)

 

書き換える場所は、url のバージョン部分。

でもう一回

brew install tomcat

 

でインストールできるはず。

 

それで、もし下記のエラーが出たら

Error: MD5 mismatch

 

もう一度Formulaを開いて

md5の部分をエラー時に指摘されたExpectedの値にかえたらinstallできました(多分これで良いはず)。

AgileJapan 岸良さんのWorkを試して

岸良さんがAgile Japan 2012で行ったWorkshopを社内で行ってみました。

 

普段一緒に開発しているチームに岸良さんのプレゼン資料を元に

全体最適と部分最適の話、マルチタスクとシングルタスクの話を行いました。

 

全体最適と部分最適

全体最適と部分最適の話については、一同納得といった感じでした。

常駐派遣でのソフトウェア開発の場合、Command&Controlになりがちで、各人がリスクを背負いたくないというのもあって、プロジェクトマネジメントをしているリーダーに許可や確認を行い後は、各自が自分のベストを尽くすというスタイルが多いように思う(実際それを求められていた)。

 

プロジェクトがうまく進んでいるときはそれでも問題ないが、プロジェクトがうまく行かなくなったとたんになぜ遅れているのかをマネジメントを行っている人たちが考え、その結果を現場の人に説明して改善するという一方通行的な改善が行われる場合が多い気がする。

 

その場合、人に着目せずにやり方やプロセスが間違っているという改善案が多く(そういう時もあるんだけれど)、アプローチにしても全体の速度を一気にあげるような改善案を試している。

管理社:「改善案を考えました!これできましょう!」

開発者:「・・・」

 

実際は、開発者同士がコミュニケーションをとることで現場が考える問題点を洗い出してマネージャーは開発者が考えた改善案を実施するために必要な権限を与えたり環境を整えるだけで開発速度は増すのではないかと思う。

 

その手段として、チームで協力し開発速度が遅くなりがちな人や工程を皆でカバーすることで改善を行う。

こうすることで、チームがどんどん改善を行うためのコミュニケーションをとり始め、自分たちで開発しているというやる気が起こり、開発が面白くなっていくと思う。

遅れている原因がなんであれ、マネジメント層だけで考えるのは避けたい。

 

 

マルチタスクとシングルタスク

次にマルチタスクとシングルタスクについての話

ワークショップ

「1〜の数字」、「A〜 のアルファベット」と「○、△、◇の記号」を30ぐらい?縦に記載して行きマルチタスクとシングルタスクを実践するというワークを行いました。

 

最初に自分がどれくらいで終わるかの見積もりを行ってもらいました。

1回目は、数字→アルファベット→記号→数字・・・と記載する。

2回目は、数字30個→アルファベット30個→記号30個と記載する。

 

結果

1回目は、全員見積もりをかなりオーバー(終わらなさすぎて途中で打ち切った)しました。
そして2回目。全員ほぼ見積もりに近い時間で終わった。

考察

見積もりした時は、前提条件として一つのタスクに”集中”出来た場合これくらいで終わりますという見積もりに成っているということ。

実際の開発ではそんなことはあり得なくて、何らかのコミュニケーションを取ったり、確認作業が発生するためタイプしていた時間は見積もりに近い値かもしれないが、作業開始から完了までの時間は見積もり時間をオーバーする。

結果

マルチタスクとシングルタスクをお手軽に認識するためにはとてもよいワークショップだと思う。
これを気に見積もりについて皆で話し合うときのコンテキストの一つをチームで揃えられました。

XP祭り2012~技術指向で行こう!~ に参加

 

#xpfes12

TDDとスクラムの事例がお目当てでXP祭り関西に参加してきました。

 

アジャイル開発における計画と管理〜アジャイルのプロジェクトマネジメント〜

システムインテグレーター 梅田弘之氏

概要は、アジャイルでもプロジェクトマネジメントは必要だという話。
ご自身が取締役社長ということで経営者からみてアジャイル開発がどう見えているのかという内容でした。

ウォーターフォールを敵視するな

基幹業務などでは、ステークホルダも多く色々な調整を行ったりしていれば、要件定義に3ヶ月かかってしまうこともあるわけで、その辺りを理解する必要がある

たしかに、基幹業務などでは億単位の金額が扱われたり関係する部署がとても多かったりでヒヤリングするのにも結構時間がかかると思う。実際、中には色々な人がいて(そもそも利用者が物理的に遠かったり)すんなりヒヤリングできるわけでもなかったりするし。

ただ、要求を決めるためにかかった3ヶ月がどういった内容かにもよるかなとも思いました。

一度に要求を決めようとすると要求を決める関係者それぞれが少しずつ返信が遅くなるだけで結構な待ち時間ができて、それが積もるとそれなりの時間になり結果的に要求の決定が遅れるという事態の原因の一つになるのかなと。

ウォーターフォールの場合、フェーズ毎に作業が進んでいくため後工程になればなるほど手戻りの発生する箇所が増える。
それを意識するあまり、仕様の決定が遅れかつ、納期がまだまだ先なため決めきれないというのがあると思う。
そこに、タイムボックスを適用することで要求を決める人も全ての要求を要求定義のフェーズで決めきらないと駄目だと思っていたのが、この機能についてだけ決めてくださいに変わるので、要求分析やヒヤリング対象が絞られて要求が決めやすいのではないかと思う。

 

ただ、適用が難しいかなと感じるのは、実際のリリースはずいぶん先なのに1イテレーション(スプリント)の終わりを本当のリリースと同じように扱えるかというところ。
要求を決める人が今回はスクラムを行うと同意している場合は協力的になってもらえる(もらえないと困る)と思うが、要求を決める人が加えられずにスクラムを行う際のリスクはこのタイムボックス内に要求を確定してもらえないというところかなと思う(アンチパターンだけど)。

ウォーターフォールは、売れる物を作るのが苦手

梅田さんのところでは、パッケージ製品の開発が主な開発でその際パッケージ作成とそのパッケージをお客さんに導入する開発は別と仰っていた。

パッケージ作成は、内部の開発だからハンドリングがすべて会社でできるためアジャイル開発向き
ウォーターフォールは売れる物を作るのが苦手

たしかに自社製品を作るのに、ウォーターフォールでは作れない。

お客さん向けの仕事にどうアジャイルを取り入れるかが最大の課題でありチャレンジ
アジャイルでやっても作るものによって犠牲にすることが異なる。
プロダクト開発は、スコープを犠牲にできる。
請負開発は、コストを犠牲にするしかない

請負開発とプロダクト開発で犠牲にするものの違いは全くその通りだと思う。

この違いは、

プロダクト開発はスコープを犠牲に出来るけれど、犠牲にしたスコープによって製品が売れるかどうかのリスクを自社で追う必要がある。

逆に請負開発はコストを犠牲にするけれど製品が売れるかどうかへのリスクは自社で追う必要はない(発注側で仕様を決めてしまうから。作った物は売れてほしいけれど)。

どのリスクをどちらが負うかによって、犠牲に出来る物と出来ない物が変わってくる。

 

請負の際にいつも確認するのは
「納期は最大どこまでのばせますか?」

ここを聞いておかないと仕様変更・追加に対してコストをかけたとしても残業や休出、過剰なメンバ追加しかコストをかける時間がとれなくなってしまうため、プロジェクトが遅れ始めるとひどい生活が始まってしまう。
請負開発では、コストを犠牲にするしかないけど生活は犠牲にしたくないというのを、死守できるかどうかは納期が最大どこまで延ばせるかにかかっていると思う。ここで見積もりも合わず、納期も絶対延ばせない案件だと受けないか最悪工数ベースの契約に持って行く場合が多い。

TDDサイクルを加速する技術たち

@irof氏

irofさんのセッションに参加するのは初めてで今回一番楽しみにしていた。
最初にしっかり「京都アジャイル勉強会」の告知もして頂いた。ありがとうございます。

以前アジャイルサムライ読書会in京都の懇親会で、テスト版97のこと(あのときはこっちが本編だったな)を教えて頂いてそれ以来自分の中でのTDDへの最初の壁が取り払われた。それから、テストと並走してプログラミングする毎日を送ってます。

前後のテーブルと会話する形式だったので、メモしきれなかったのだけれど残ったポイントは

変化しつづけるものは変化に強い

テストと合わせてjenkinsを使っているとこの言葉は自分的には納得。実際救われたことは何度もある。

思った通りにうごくコードをかく技術がTDD

通常は、書いた通りに動く。だけど、思った通りにうごくを実現するためには、テストが必要。

リファクタリングの終わりどころは次のRedが一つになったら終わり

仮に一つ修正加えたらRedになる箇所が、複数ある場合はまだリファクタリングできるとのこと。

どれも禅問答のような言葉だけど、話を聞いているとストンときます。

きっと自分で気づかないと意味がないから自分で気づきやすいように考えてもらって結果を共有して、自分の意見を述べるというセッションにしたのかなと思った。

例え悪いかもしれないけれど、倒幕するときにも草の根運動のようにこのような議論の場が持たれて最後は大きな仕事に結びついたように感じた。

なので、チームへの啓蒙の第一歩は、自分がテストを書き続けて周りにその良さを広めることでしか実現できない(もしくはirofさんのセッションを受ける!?)と思うので、やっぱり自分が書き続けて周りにTDDの良さを感染させるしかないのかなと思いました。

大規模なゲーム開発をスクラムで

田口 昌宏氏

大規模なゲーム開発で実際にスクラムを取り入た際の事例紹介でした。

面白さを見積もり時に組み込むことは難しい

スクラムに取り組んだ際の動機だったと思う。

午前の梅田さんのお話ともリンクするのだけれど、試行錯誤する開発についてはスクラムはとても適用しやすい。

1スプリント2週間で隔週水曜日にスプリントプランニング
火曜日にレビュー、お菓子付きショーケース

懇親会に参加できなかったので、聞けなかったのだけど水曜日にスプリントプランニングを設定したのはなぜか聞きたかった。

田口さんのお話を聞いていて一貫して思ったのが、まずやってみる。
それで問題が出たら、その問題を解決するために対処する。それがスクラムのツールでカバーできるところはツールを導入し、その導入もただ入れてみるのではなく実際にチームに適用するように随所に工夫が施されていた。
(コミュニケーションに問題出たので朝会導入。ただし2チームで朝会の開始時間をずらして実施。それぞれの朝会の内容を共有できるようにしたなど)
スライドの写真を見ていて思ったのは、参加している皆が本当に楽しそうにやっているところ。

朝会やタスクボードでかしこまったミーティングがなくなった。

確かに、かしこまったミーティングがあるところは日常的にコミュニケーションに問題がある。
プロジェクトが遅延してくるとミーティング多くなるのはこのせいかなと感じる。日頃からコミュニケーションがとれていれば、遅延してきたからといってミーティングを増やす必要はないはず。

3〜4時間のプランニングで制度の高いものが出来る

これは、プランニングポーカーしているととてもよく思う。自分はそこででた意見を実際に見積もりや開発時のチェック項目としてあげたりしている。
京都アジャイル勉強会でもプランニングポーカーをしていると、自分が考えていなかった意見がぽんぽん出てくるのですごく参考になる。

10名超えると朝会で話す内容が薄くなったので、チームを分割。スクラムマスタも2名に導入
壁は情報発信継続力がすごいし、壁は解像度が高い
ショーケース時の品質は、落ちたらアウトぐらいにしている。全テストを通らないと駄目とかではない

などなど。

参考になることばかりだし、すぐに自分も取りいれて自社ではどうなったのかを共有したいと思うことばかりでした。

もっと色々聞きたかったのだけれど、懇親会には参加できなかったのでまたどこかでぜひお話を聞きたい。

 

まとめ

スクラム開発を取り入れている人の話を聞いていると、「巻き込み力」とでもいうのか回りの人をその気にさせるのがとてもうまいなと感じた。

スクラムに限らずだけど、知→無知への提案はなぜか上→下のような関係になりやすい気がする。普段からの関係性がとても良好なので提案しても上→下の関係にならず対等に論じあえるのだと思う。

日頃から傾聴することが大事だとつくづく感じた。

京都アジャイル勉強会#1

京都アジャイル勉強会について

アジャイルサムライ読書会in京都が終わり、引続きアジャイル導入を考える方達(自分も含め)のための勉強会を京都で行うということで、そのまま「京都アジャイル勉強会」という名前で、人も内容もほぼそのままに始まりました第一回。

 

アジャイルサムライは読んで終わりでなく、実践して経験値を積むときの指南書となる本だと思うので「京都アジャイル勉強会」では、アジャイルサムライにでてくる数々の手法を本番前に何度も経験し失敗し、本当に身体で覚えるまでやって本番は楽に乗り切ろうという試みのもと行っています。

 

もちろん既に本番をやっているけれど、経験値を積みたいという方も大歓迎(実際に数名参加されています)。

 

第一回となる今回は、「色々試そうプランニングポーカー」と題してプランニングポーカーで色んなことを試して、試した結果を皆で考え共有しようということで行われました。

実践

参加者が、11名だったため、5名、6名の2チームに分かれて各藩で、プランニングポーカーの見積もり対象となるシステムを決めてそのユースケース出しから入りました。

私の藩は、「オンライン上の年賀状作成ソフト」です。

 

そこから、10こ程度のユースケースを考えて、そのユースケースに対して見積もりを行いました。

 

最初に手持ちのカードは、1、3、5、?の4枚。

3を基準値として「仕様が大きくぶれにくく規模が大きくも小さくもないユースケースを3としました」。

その後、それ以外のユースケースの見積もりを皆で行いました。

 

4枚で見積もりした内容を今度は、1、2、3、5、8、?の6枚にして行い枚数が増えることによって、結果や思考がどう変わるのかを試そうという試みでした。

 

実際は、1回目の見積もりの内容が本当にシステムを作るかのように議論が熱くなり2回目の見積もりは駆け足となってしまったため詳細に比べることが出来なかったのですが、1回目で見積もりできたユースケースに対してのみ2回目の見積もりを行ったとところ面白い結果になりました。

 

1回目で同じ3を出していた人同士が、2回目では、2、5になる。

1人は、2が入ったことで1よりは大きいけど3よりは小さいから3を出していたのが、2が出来たことで2に変わる

もう1人は、8が入ったことにより3よりは大きいけど5よりは小さいが5をだすとそれ以上大きい値がなくなるため3としていたけれど、8が入ったことにより5に変わる。

ということを考えていました。

 

だしたカードが同じだからといって同じ判断でそのカードを選んだとは限らないということが分かる。
ということは、見積もり時のユースケースの粒度によってはカードの枚数を6枚程度で行いあえて意見が割れるようにしてみることで、チーム内の意見を引き出し安いと感じた。

 

あと面白かったのは、説明しているうちに意見が変わってしまうことが多々あったこと。

 

考察

実際の見積もりだと見積もりが合わない場合に、各機能についてどうしてこんなにかかるのかということを延々と話し合い結果数人日とかひどいときには数時間の削減を迫られたりするのだけれど、実際数ヶ月前に数人日や数時間の想定をしたところでいざ作業に着手したとたんに、あれが必要これが必要とかであっという間に数人日オーバーになっていく。

 

相対見積もりだと議論になる箇所が、見積もり工数ではなく仕様や前提条件になるため不毛な工数削減に合いにくくそもそも、詳細ではないくせに詳細な話になることが防げるということを改めて実感した。

 

また、今回ユースケースについてはあまり時間をかけずに作成したため、内容についての前提条件が確定していなかったこともあり、実際にカードを出し合ってからの議論が長くなった。

見積もりを行う前に、ユースケースの前提条件や理解度を合わせておいた方が工数の決まっている本番では良いと感じた。

 

余談

CSMの研修でプランニングポーカーを行った際も、仕様について15分ほど話し合う時間がさかれたと思う。

ただ、その時面白かったのは出された仕様をチームで検討する時間を与えるので、仕事を受けるかどうか答えてくれというもので、検討後チームの代表が前に言って講師に仕様を受けるかどうかを聞かれた際にチームの代表の仕様についての質問はいっさい受けずに、とにかくYesと言わせようとしていたこと。
で、あまりの講師の圧力になし崩し的に大半がYesと答えてしまっていた。

ここでは、絶対に圧力に屈しては駄目で即席の見積もりや、安請け合いは結局交渉の条件に使われてしまうという教訓だったと思う。詳しくは「リスバーガー」で検索すると分かる。

 

次回も引続き「色々試そうプランニングポーカー」をやります。