インターンでエクストリーム・プログラミングを実践してみて
こんにちは。現在大学四年生で株式会社ユーザベースのSaaS事業でエンジニアインターンをしている塚田竜勇孫です。僕の所属しているSaaS Product Teamではエクストリームプログラミングをベースにチーム開発を行っています。エクストリーム・プログラミング(XP)の価値について少しづつ理解が深まってきたので、現時点での理解をまとめてみようと思います。もし「違うよ」という点があったら教えてください。
エクストリームプログラミング(XP)とは
エクストリームプログラミングは、アジャイル開発手法の一つであり、効果的なプログラミング技法、明確なコミュニケーション、チームワークなどを組み合わせ、従来になかった成果を生み出すソフトウェア開発手法です。
XPには、以下の5つの価値があります。
- コミュニケーション
- フィードバック
- シンプリシティ
- 勇気
- リスペクト
これらの価値を追求することによって、より効果的な開発が可能になります。SaaS Product TeamのValueにもなっているこの5つの価値は、XPにおいて非常に重要な役割を果たしています。
コミュニケーション
XPでは、コミュニケーションが非常に重要です。
チーム感覚や効果的な協力関係を生み出してくれます。
私が所属するSaaS Product Teamでは、常にペアプログラミングをしながら開発を進めています。この方法により、コミュニケーションを重視しながら知識の属人化を防止でき、相手から有益なフィードバックを得ることができます。
また、ペアプログラミングにおいて、開発途中でわからないことが発生することがあります。しかし、私が所属するSaaS Product Teamでは、そのような場合には三秒考えてわからないことはすぐに知っていそうな人に聞くことが推奨されています。相手の時間を奪ってしまうのではないかと不安になってしまいますが、わからないことは聞くことにより、悩む時間を短縮でき、チーム全体の生産性につながると考えられています。
フィードバック
XPではフィードバックを頻繁に得て、改善を繰り返すというのはとても重要です。
XPではテスト駆動開発という手法が使用されます。TDDでは、コードが書かれる前にテストが書かれ、そのテストに基づいてコードが書かれます。コードが書かれた後、テストが実行され、テストが失敗する場合は、コードに問題があることを示し、修正する必要があることを示します。このプロセスにより、開発者はコードを書く前に問題を特定し、それを修正するためのフィードバックを得ることができます。
またXPでは、小さなリリースが重要な役割を果たします。小さなリリースを頻繁に繰り返すことにより、その都度ユーザからのフィードバックを受けることができます。そうすることによりプロダクトにフィードバックを反映させることができ、フィードバックサイクルを頻繁に回すことができます。
またSaaS Product Teamではイテレーションの終わりに毎回振り返りの時間を設けています。毎週の振り返りを通して、良かった点や改善点、課題を共有し、次のイテレーションで改善することを目指しています。
シンプリシティ
シンプルな設計やコードは、理解しやすく、変更や修正が容易であるため、開発プロセスの効率性を高めます。また、コードがシンプルである場合、エラーやバグの可能性も低くなります。そのため、プロジェクトのメンテナンスが簡単になり、時間やコストの節約につながるとされています。
また、シンプリシティは、コミュニケーションをスムーズにすることにも貢献します。シンプルなコードは、開発者同士の共通言語として機能し、チーム内のコミュニケーションを円滑にします。このように、xpでは、シンプルさを重視することで、開発プロセス全体の品質や効率性を高めることを目指しています。
また僕たちの所属するSaaS Product teamではよくストーリーの開発をする際にYAGNIを意識して普段の開発を行っています。YAGNIとは機能は実際に必要となるまでは追加しないというプログラミング原則です。私たちは最もシンプルでうまくいきそうなものは何かを常に模索しています。
勇気
プログラミングは常に未知の領域に踏み込む作業です。私たちはコードを書く前にすべてを理解することはできません。したがって、プログラミングには常にリスクが伴います。XPでは、このリスクを最小限に抑えるために、短いイテレーションを繰り返し、早期にフィードバックを得ることが重要です。このアプローチは、新しいアイデアを試したり、実験を行うことにもつながります。そのため、勇気を持って新しいアイデアに取り組むことが必要です。
ただ勇気を最優先の価値にするのは危険です。
結果を考慮せずに行動していても、チームワークがうまくいっているとはいえないです。
他の価値と組み合わせるととても強力です。
勇気を持って真実を語る → コミュニケーションが強化
うまくいかない解決策を捨てて、勇気を持って新しい解決策を見つける → シンプリシティが促進
勇気を持って現実の具体的な答えを求める → フィードバックが生まれる
リスペクト
XPにおけるリスペクトとは、チームメンバーや顧客、そしてコード自体に対して敬意を払い、尊重することを意味します。またリスペクトはその他の価値の前提として存在しています。リスペクトがあることによりコミュニケーションが生まれてフィードバックが生まれるのです。
XPでは、開発チーム全員が互いに尊重しあい、チーム内の意見やアイデアを共有することが大切です。また、顧客に対しても敬意を払い、顧客が本当に必要としているソフトウェアを開発するために、顧客とのコミュニケーションに積極的に取り組む必要があります。
さらにコード自体にもリスペクトを示すことは、重要です。時には、過去の実装を見て「なぜこんな実装になっているのか」と不満を抱くことがありますが、その実装が現在動いている物になった理由は、当時の状況がそう導いたからである可能性があります。したがって、批判するのではなく、現在のコードに対してリスペクトをしながら、取り組む姿勢が重要です。また、このような姿勢を持つことで、チームメンバーとのコミュニケーションがスムーズになり、より良い成果を得ることができると思います。
総じて、XPにおけるリスペクトという価値は、開発チーム全体がより良いコードを開発するために、お互いを尊重し、コードを尊重することが重要であることを示していると思います。
最後に
この記事では自分がインターンを通して学んできたXPの価値について自分なりの理解をお話してきました。
今後もXPの価値観を大切にし、より効率的で高品質なソフトウェア開発に貢献できるよう、これからも精進していきたいと思います。また、XPは単なる技術的手法だけでなく、人とのコミュニケーションやチームワークの重要性も教えてくれるものです。そのため、私たち開発者は技術だけでなく、人間性やコミュニケーションスキルの向上にも努める必要があると感じました。
参考
- KentBeck,CynthiaAndres. エクストリームプログラミング (Japanese Edition)
- Robert C.Martin,角 征典,角谷信太朗. Clean Ageile 基本に立ち戻れ (Japanese Edition)
Discussion