新人のアジャイル開発体験

2010年9月9日(木)
西口 直樹

(5) プログラミングを通した情報共有

「情報共有」のためのコミュニケーションと言っても、ミーティングや媒体を通したものだけとは限りません。ソフトウエアの開発中にもコミュニケーションを行います。それがペア・プログラミングです。

ペア・プログラミングとは、第1回でも紹介したとおり、「すべてのコードは2人のプログラマで書く」という、XPのプラクティスです。ペア・プログラミングでは、コードを書く人を「ドライバ」、ドライバのサポートをする人を「ナビゲータ」と呼びます。

筆者は配属直後のころ、アジャイル開発どころか、Webアプリケーションの開発経験ですら、せいぜい研修で学んだ程度でした。その少し前までは、「オブジェクト指向とは何?」という状態で、MVC(Model View Controller)も知らない、データベースもまともに操作したことがない、という開発初心者でした。

こうした、まったく開発経験の無い素人が、いち早く開発に関するノウハウを学べる手段が、ペア・プログラミングです。筆者は、自身の体験から、そう感じています。

例えば、当時利用していた開発環境および要素技術の習得について、振り返ってみます。開発環境および要素技術としては、VMware Player上のLinux環境で、プログラミング言語にRuby(1.8.2)、Web開発フレームワークにRuby on Rails(1.1.2) 、バージョン管理にSubversion(1.3.2)を用いていました。

筆者のチームでの開発の流れは、UI(User Interface)の設計/DB(Database)設計をチーム全員で行った後、実際に着手できる単位の一覧であるToDoリストにチケットを落とし込み、テスト・ケースを作成します。そして「1つ目のToDoをコードにして、リファクタリングし、テストし、コミットする」、「次のTodoをコードにして、リファクタリングして、テストをし、コミットする」という流れを繰り返します。

こうした「開発の一連の流れ」を、ドライバである先輩社員の横で学習しながら実践し、RubyやRuby on Railsの特性、API(Application Programming Interface)、コーディング規約を学びました。Subversionのコマンドはもちろん、Linuxの操作も満足に知らなかった筆者にとって、これらの「プログラミング技術やツールの利用方法」をナビゲータとして習得できたことには、大きな意味がありました。

実は、ペア・プログラミングによる学習の効果は、ナビゲータの時に限った話ではありません。少し経験を積んだころには、「ドライバ」となって学習する機会もありました。

上記と同じ開発サイクルを回しますが、今度は1つ1つの作業をドライバとして説明しながら開発します。チケットを分解する際には「どういったToDoをこなすと完成なのか」を説明し、コードを書く直前には「どういうふうに実装するのか」や「どういう方針で整理するのか」を説明しながらリファクタリングします。

ドライバとしてペア・プログラミングに関与した当初は、ToDoにまで落としきれていない状態にもかかわらず、かつ、コードについても理解しないままにコーディングしようとすることもありました。どうすればきれいなコードになるのか分からない、ということもありました。

しかし、それぞれの作業ごとに細かくフィードバックをもらい、作業を繰り返していくことで、先に挙げたようなことが次第にできるようになりました。このような実体験が、次への成長やモチベーションを高く保つことにつながった、と感じています。

ペア・プログラミングを実施してみて筆者が一番感じたのは、「本来あるべき開発の本質について理解できた」という点です。

ペア・プログラミングは本来、教育のためのものではありません。熟練したプログラマたちによる、良い設計と良いコードの作成、これによる品質向上を図るための、実践的な手法です。ただ、これらに加えて、チーム全体のスキル向上、ソース・コードの効率的な共有、そしてプログラミングという「物作り」の実践にともなう楽しさや喜びの共有もある、と考えています。

プログラミングを「コードを生産するもの」とするならば、学習する方法はほかにもあります。しかし、本来のプログラミングは、「仕様を理解し、仕様を実現できるように設計し、コードを書き、リファクタリングし、仕様通りの動きをするかどうか、また、想定外の動きをしないかどうかを確認する」という、プロダクトを「動くもの」にする一連の重要な流れを含みます。

こういった、本来のプログラミングが持つダイナミックな流れを理解し、実践的に身に付けるのに、ペア・プログラミングは非常に効果が大きいと思います。

図3: ペア・プログラミングの様子(左: 学習する筆者)(クリックで拡大)

(6)まとめ

今回は、社内SNS開発の事例を用いて、実際の開発の現場でどのように「情報共有」をしていたか、を伝えました。「情報共有」を通して筆者がどのようにアジャイル開発の基本的な内容を理解していったのか、分かっていただけたのではないでしょうか。

アジャイルな開発をするうえで、メンバー間の「情報共有」は、とても重要です。しかし、今回解説した方法が絶対唯一というわけではありません。アジャイルは改善を大切にするので、その時々によって情報共有の方法も変わります。もし、これからアジャイルな開発をしようと考える方がいたら、ぜひ、このことも意識して、それぞれのチームに合った「情報共有」を実践していただければ、と思います。

TIS株式会社

先端技術センター所属。Ruby好きなプログラマ。Ruby on Railsを利用したWebアプリケーション開発に従事。最近は、スマートフォンアプリの開発に取り組んでいる。スクラム・アライアンス認定スクラムマスター。
Twitter: http://twitter.com/nsgc

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています