(2007年6月22日発売)僕は、偉大なプログラマなんかじゃない。偉大な習慣を身につけたプログラマなんだ。Beckの発言として紹介しています。自分の仕事を憎むには人生はあまりにも短い私は、200名程度という微妙な規模のSIベンダーに勤務するプログラマです。企業で利用する業務アプリケーションの構築に携わっています。業務アプリケーションのプログラマとしての夢です。自分だけではできないことをチームで成し遂げたいチームの成果が誰かの役に立ってほしいチームの成果に対して適切な報酬を受けたい「自分の仕事を憎むには人生はあまりにも短い⁠」⁠。Spolskyのこの言葉[2]と同じ思いを私自身が抱きはじめたきっかけは、2冊の書籍との出会いでした。1冊は『達人プログラマー』(⁠注3⁠)⁠。エクストリーム・プログラミング入門』(⁠注4)です。この2冊に出会ってから数年後、縁あって現在の勤務先に転職したのを契機に、日本のいわゆるアジャイル開発コミュニティに参加し始めました。すると、私のような夢を抱いている人は、どうやら私一人ではないことに気づきました。靖(訳⁠)⁠、オーム社)この連載について連載タイトルにある「アジャイル開発者」とは、アジャイルソフトウェア開発の実践者のことです。アジャイル開発者はソフトウェアをアジャイル(Agile)に――状況の変化へ迅速に適応しながら――開発します。アジャイル開発者のことを英語ではagilistと呼びます。本連載では、アジャイル開発者としての私自身の実践経験と、私が出会ったアジャイル開発者との交流から気づいたことを、アジャイル開発者の「習慣」という切り口から紹介します。第1回である今回は、その準備としてまず、私なりにアジャイルなソフトウェア開発と、アジャイルな開発者について説明します。それから、今後の連載で紹介する習慣を身につけるための習慣(メタ習慣)として、「⁠フィードバックを重視する」習慣を紹介します。アジャイルなソフトウェア開発まず、連載の根幹に関わる「アジャイル」という(2007年現在では若干色褪(いろあ)せてしまった)バズワードを私なりに説明することから始めます。「アジャイル」という言葉は形容詞です。アジャイルソフトウェア開発とは「ソフトウェア開発がアジャイルである」という状態のことです。Often(はやめに・こまめに⁠)⁠」という言葉で表現しています[5]⁠。残念ながら執筆時点ではWeb上にこの資料はありません。参考:http://capsctrl.que.jp/kdmsnr/diary/20040930.htmlはやめに・こまめに「はやめに・こまめに」が実現されている状態とは、ソフトウェア開発チームが次の条件をすべて満たしている場合です。開発ライフサイクルの最初から最後まで継続している開発チームがこの「状態」を達成できるようになるための作戦を考えるのが本連載の目的です。次回以降の連載を通じて、項目のそれぞれに説明を加えていきます(ここで説明すると連載が終わってしまいます⁠)⁠。ソフトウェアの時間的価値なぜ「はやめに・こまめに」を実現させる――すなわちアジャイルに開発するのでしょうか。この背景にあるのは、ソフトウェアの価値に対する考え方です。ここでの価値とは、顧客にとってのソフトウェアの価値です。顧客にとってソフトウェアとは、実稼働してはじめて価値を生み出すものです。そこで、アジャイル開発ではソフトウェアの価値を次のように考えます。価値を生み続けている時間アジャイルな開発が、ソフトウェア開発ライフサイクルの初期段階から(はやめに)リリース可能な状態を作りだすことで顧客価値の提供に備え、それを継続させる(こまめに)ことを重視するのは、ソフトウェアの価値の総量を最大化させるためです。Thomasは、この考え方を「ソフトウェアの時間的価値」と表現しています[6]⁠。これは「明日の100円よりも今日の100円のほうが価値がある」という「貨幣の時間的価値」をソフトウェアに応用したものです。信太郎(訳⁠)⁠、オライリー・ジャパン)ソフトウェアは人がつくるソフトウェアの時間的価値を最大化するために、開発チームがソフトウェアを「はやめに・こまめに」リリースできる状態を作りだし、それを維持する。この実現を目指す日々の活動がアジャイル開発です。そのためにアジャイル開発が前提にしている考え方があります。それは「ソフトウェアは人がつくる」という考え方です。考え方というよりも世界観と呼ぶべきかもしれません。アジャイルに開発するからアジャイル開発アジャイル開発の最小構成単位は、アジャイルに開発する個人です。アジャイル開発者たちの協働する自律的な場が、アジャイル開発チームです。アジャイル開発では、開発プロセスはあくまでもチームが力を発揮できるよになるための手段です。必要に応じて(必ず必要になります)つくりあげ、改善されるものと考えます。アジャイル開発とは、アジャイルに開発する人達が開発するからアジャイル開発なのです。アジャイルな開発者アジャイル開発では、チームの開発者がアジャイル開発者である――アジャイルに開発するスキルと心構えを備えている(または備えるようになる)ことに期待しています。これは見方を変えれば、アジャイル開発はチームに参加する個人に依存しているともいえます。現代のソフトウェア開発は、事前に定義した開発プロセスに従いさえすれば、確実に成果を出せるほど単純なものではなくなっているのも事実です。心構えとスキルアジャイル開発者の心構えとは「はやめに・こまめに」の達成と持続を目指す態度のことです。心構えなしに、アジャイル開発がうまくいくことはありえません。心構えだけでもうまくいきません。心構えだけで成功できるのであれば、いわゆる「デスマーチ」は絶滅しているはずです。心構えと、心構えを実践できるスキルの両方が必要です。実践できるスキルに裏打ちされていない心構えは、絵に描いた餅です。私は、アジャイル開発者としての心構えは、アジャイル開発者としてのスキルを磨いていく過程で内面化されていくと考えます。そのため、本連載ではスキルに焦点を当てて話を進めていきます。スキルという言葉はさまざまな意味合いで使われます。本連載では、スキルを「開発者個人が身につけていて、開発チームのメンバーとしての日々の作業の中で実践できる技術」と考えます。Often」の講演資料によれば、アジャイル開発者に必要とされるスキルは次の4つです。Development)リファクタリング(Refactoring)4つのスキルの詳細は連載を通じて紹介しますので、ここでは簡単な説明にとどめます。「ストーリ」はシステムに要求される振る舞いを、顧客価値の観点から、顧客に理解できる語彙で散文的に記述したものです。ソフトウェアの価値とは顧客にとっての価値ですから、ストーリを作成できることは重要なスキルです。計画づくりアジャイル開発は計画を立てずにいきなりコーディングする――アジャイル開発に対するよくある誤解の一つです。確かにアジャイル開発では、作成された計画(Plan)を絶対視しません。その代わりに、状況に応じて計画づくり(Planning)を行います。アジャイル開発では計画づくりの実施頻度が高いので、1回あたりの計画づくりを効果的・効率的に行うスキルは重要です。テスト駆動開発とリファクタリング「テスト駆動開発」と「リファクタリング」は、アジャイル開発という文脈を越えて、開発者の重要なスキルであると認識されています。書籍も複数出版されています[7]⁠。本連載では、アジャイル開発の価値と目的に即した観点から改めて紹介する予定です。卓人(著⁠)⁠)は特に参考になります。アジャイル開発者になる4つのスキルを身につけているだけでは、アジャイル開発者として十分ではありません。4つのスキルを磨く習慣を身につけている開発者、それがアジャイル開発者です。習慣を身につける本連載では、習慣を次の3つの要素から構成されているものと考えます。習慣は、これら3つの要素が組み合わさり、内面化され、それを「当たり前」のこととして振る舞えるようになってはじめて「身につけられた」といえます。私の経験と観察では、アジャイル開発者だと目されている人たちは、いくつかの共通する習慣を身につけています。連載を通じて、アジャイル開発者の習慣を身につけるために持つべきマインドセットと、実践可能なプラクティスを紹介します。心構えの内面化と実践を継続するのは、みなさん一人一人です。自分、それからチーム習慣を身につけるにあたっての注意を一つ。紹介する習慣をいきなり開発チーム全体には導入しないでください。チームへの導入は、まず皆さん自身が試してみて、うまくいきそうなことを確かめてからです。実際にやってみせ、一緒にやることが重要です。私の経験では、自分でやっていないことを他人に強要してうまくいったことはありません。フィードバックを重視するアジャイル開発者と目される人たちは、4つのスキルを磨くための習慣を身につけるための習慣、つまりメタ習慣やブートストラップ習慣とでも呼ぶべき習慣を身につけています。それが「フィードバックを重視する」という習慣です。今回はこのメタ習慣を紹介します。「⁠習慣を身につけるための習慣」なので、0番目の習慣としています。実践すると、そのフィードバックとして経験が得られます。経験から学ぶことで、よりうまくなるための作戦を効果的に立てられます。いくらフィードバックを重視するからといって、ただ実践すればよいというわけではありません。実践と、そのフィードバックからの学習を「いつ・どうやるのか」を常に意識しなければなりません。リズムをつくる実践から学習するマインドセットを育てるためのプラクティスを2つ紹介します。「⁠タイムボックス化」と「ふりかえり」です。この2つを組み合わせて、実践と学習を繰り返すリズムをつくります。習慣は文字どおり「身につける」わけですから、リズムという身体感覚は重要です。リズムは、習慣として継続させるうえでも重要です。プラクティス「タイムボックス化」タイムボックス化は、時間と作業のマネジメント手法です。タイムボックス化では、プロジェクトや作業の期間を、一定間隔に固定された複数の「時間の箱」から構成されたものとみなし、期間中の作業を「時間の箱」に入るようにマネジメントします(図1⁠)⁠。作業期間が3ヵ月のプロジェクトに1週間単位のタイムボックスを適用すると、プロジェクト期間は、週レベルのタイムボックスが12個並んだものになります。各タイムボックスに設定した期限は絶対です。「⁠週単位のスケジューリング」という言い方ではなく、あえて「タイムボックス」という新しい用語を導入しているのは、「⁠期限は絶対。延長なし」という考えを常に意識するためです。詳しくタイムボックス化については「計画づくり」との関連で、今後の連載でさらに詳しく紹介します。タイムボックス化では「箱」の大きさが固定されていることを理解してください。