HOME > REPORT

アジャイル開発に不可欠な5つのプラクティスを知ろう「Builders Box - ON AIR」#1 レガシーコードからの脱却 レポート

update : 2020.09.10

Builders Boxが企画・運営する「Builders Box - ON AIR」は、世界で活躍できるエンジニアになるための知見を共有するイベント。2020年8月30日にその第一回をオンライン配信で開催いたしました。本イベントでは『レガシーコードからの脱却』の著者David Bernstein氏が、すべてのソフトウエア開発者が知るべきアジャイルの開発手法について解説。そしてイベント後半では、株式会社アトラクタ 代表取締役/アジャイルコーチであり『レガシーコードからの脱却』翻訳者の原田騎郎氏が、David氏の講演についてディスカッションを交えながらふり返りました。


オープニング 〜日本のエンジニアリングが世界で活躍できる未来を〜

開会のあいさつを述べたのは、Sansan株式会社 Chief Technology Officer(CTO)の藤倉成太。視聴者に感謝の言葉を述べた後、Builders Boxを立ち上げた経緯を説明しました。

Builders Boxは「日本のエンジニアリングが世界中で活躍できる未来をつくる」というコンセプトのもと今年5月にローンチしたプロジェクトです。現在、ソフトウエアサービスは世界中の至るところで開発され、私たちの日常生活や仕事を支えています。GoogleやFacebook、Amazon、Uber Eatsなど、私たちにとって身近なサービスの多くは海外で開発されたものです。一方、世界中の人々に使われている日本のサービスはそれほど多くありません。

「日本国内だけではなく世界中で使われるサービスを開発することは、エンジニアにとって非常に刺激的な仕事です。せっかくエンジニアになったからには、そんな心が躍るようなものづくりがしたい。ひいては、日本で開発された多くのサービスが世界中で使われる未来になってほしい」そんな思いから、Builders Boxを立ち上げたと藤倉は語ります。

Sansan株式会社では、世界の市場で成果を出すべくエンジニアたちが一丸となってプロダクト開発に向き合っています。その過程で得た知見を還元しようと、これまでSansan社内のエンジニアが情報を発信する場をつくってきました。活動を通じて、社内外の多くのエンジニアの方々と接するなかで、日本のエンジニアリングへの期待感やエンジニア同士が交流できる場づくりの重要性を実感。その思いを形にしたのがBuilders Boxなのです。

「日本のソフトウエアエンジニアリング全体を応援して、ひとつでも多くの日本のサービスがグローバルで使われる未来に貢献できればと思っております」と藤倉は結びました。


アジャイル開発に不可欠な5つのプラクティス

次に登壇したのは『レガシーコードからの脱却』の著者であり、To Be Agile創設者のDavid Bernstein氏。人を惹きつける満面の笑みで「みなさんに共有したいことがたくさんあります」と述べた後、モダンアジャイルソフトウエア開発に欠かすことのできないエクストリームプログラミングにおける、5つのプラクティスを紹介しました。

ひとつめのプラクティスは「CI(Continuous Integration:継続的インテグレーション)のためのビルドの自動化」です。CIを導入することの大きな利点は、「開発者が迅速かつ詳細なフィードバックを得られるようになること」であるとDavid氏は解説します。

そしてCIを実現するうえでは「自分たちが望むときにいつでもデプロイできる状態になっていること」「ビルドが自動かつ高速で実行され(数秒以内)、呼び出しが簡単(ワンクリック)であること」「1日複数回、必ずコードがインテグレーションされるようになっていること」などが重要であると提唱。

「CIの構築・設定には一定の工数がかかりますが、その何倍もの恩恵をCIは開発チームへともたらしてくれるはずです」と、David氏はCI導入の必要性を説きました。

ふたつめのプラクティスは「ペアプログラミングを通してのチームメンバーとのコラボレーション」。チームをより良いものに改善し、エンジニア全員が成長していくには、メンバー同士のコラボレーションが重要です。

David氏はその概念を「企業におけるソフトウエア開発は社会的な活動」という言葉で表現しました。このフレーズが示すように、メンバー同士の知識や知恵を共有しあい、チームや企業の総合力を高めていかなければ、ソフトウエア開発はなかなかうまくいきません。

コラボレーションのスキルを高めるための手法として、ペアプログラミングやバディプログラミングについて解説しました。そのうえで、「最も優れた労働者とは、他の人々を助けられる人のこと。決して、特別なスキルや知識を持っている人のことではありません」と提唱。メンバー同士で“知の共有”を行う意義について強調しました。

3つめのプラクティスは「テストの実行を容易にするための設計スキルの実践」です。

プログラムの品質を向上させるうえで、ソースコードをクリーンに保つことは必要不可欠。クリーンな状態をつくりあげるのに役に立つエッセンスを「Cohesive(凝集性)」「Loosely Coupled(疎結合)」「Encapsulated(カプセル化)」「Assertive(断定的)」「Non-Redundant(非冗長)」という5つのキーワードに沿って説明していきました。

「ソースコードのメンテナンスを怠ると、すぐに『大きな泥の玉(理解不能な状態のアーキテクチャになっているソフトウエア)』ができあがってしまいます。チームの将来的な開発速度を向上させたいならば、コードの品質を日々改善していくしかありません。状況を劇的に変えてくれる銀の弾丸など存在しないのです」(David氏)

4つめのプラクティスは「設計を進めるテストファースト開発の使用」。近年、TDD(Test-Driven Development:テスト駆動開発)を取り入れる開発組織が増えています。これは、プログラムを実装する前にテストコードを書き、そのテストコードに適合するように実装とリファクタリングを進めていく開発手法。正しくTDDを実施することで、メンテナンス性に優れたソースコードを作成できます。David氏はTDDについて、こう述べました。

「良いテストコードを書くには、いくつかの条件があります。まず、テストは『作成対象物の仕様を表すもの』だと考えてください。そしてテストを一意に(重複などのない状態に)保ち、テストを通すのに十分な実装のみを記述します。テストする“単位”はコードの単位ではなく、動作(ふるまい)の単位です。

また、プログラムをリファクタリングする際にはテストを追加する必要はありません。既存のテストコードがリファクタリングをサポートし、プログラムの正常動作を保証してくれるからです。私たちがテストコードを足すべきタイミングは、プログラムに新しい動作(ふるまい)が追加されたときだけです」(David氏)

この言葉が示すように、TDDを導入しておくことでリファクタリングの作業も容易になります。「多くの場合、機能を追加するときにはまずコードをリファクタリングして綺麗にするほうが、実装は容易になります。ディナーパーティーを準備する前に、キッチンを掃除しましょう」という印象的なフレーズを用いて、David氏はTDDとリファクタリングの相性の良さについて言及しました。

5つめのプラクティスは「技術的負債を軽減させるためのリファクタリングコード」。リファクタリングを実施することで、ソフトウエア開発における以下の4つのコストが削減されます。

・あとでコードを理解する
・ユニットテストを追加する
・新しい機能に対応する
・さらにリファクタリングを行う

David氏は講演のなかで「リファクタリングを実施して、できるだけ早く技術的負債を返済することの意義」「どのような場合にリファクタリングを行うべきか」「リファクタリングの具体的な手法」といった、数多くの実践的なノウハウを披露しました。

セッションを終えた後はQ&Aパートを開催。視聴者からは「現在、多くのエンジニアたちがリモートワークで働いています。リモートワーク体制下において、コラボレーションを成功させる最善の方法は何だと思いますか?」「このセッションはレガシーコードをテーマにしたものですが、レガシーコードという言葉が真に意味するものは何でしょうか?」など、David氏が語った内容をさらに深掘りするような質問が数多く寄せられます。David氏は終始にこやかな表情で、質問に対する丁寧な解説を行っていました。


講演をふり返って

David氏による講演の後は、株式会社アトラクタ 代表取締役/アジャイルコーチであり『レガシーコードからの脱却』の翻訳者でもある原田騎郎氏が登壇。David氏の講演について、進行役であるSansan株式会社 藤倉とのディスカッションを交えながらふり返りました。

藤倉が『レガシーコードからの脱却』の翻訳に取り組もうと思った経緯について質問すると、原田氏からは「翻訳の打診があっため同著を読んでみたところ、自分がかねてから考えていたことや課題に感じていたことが書籍のなかで網羅的に解説されていた。これは面白いと思いました」との言葉が。

同書が四刷に達したことや、翔泳社主催の「ITエンジニア本大賞2020」における大賞を受賞したことなどに触れながら「みな、ソフトウエア開発において同じような課題意識を持っていたからこそ、この本が受け入れられたのだと思います」と原田氏は語りました。

David氏による講演の内容をふまえ、藤倉と原田氏は「モジュラリティに優れた設計を行うには」というテーマでもディスカッション。原田氏は設計改善のヒントとして、かつてGoogleのあるマネージャーと語った内容を紹介しました。

Googleは多くのサービスや機能を生み出しては、起動に乗らなかったものを比較的早い段階で終了します。その理由を原田氏がマネージャーに尋ねると「社内リソースの最適化のため」と語ったそうです。

「要するにエンジニアリングのリソースは限られていますから、そうしなければ新しいサービスの開発やユーザー体験の向上のためのリソースが割り当てられなくなるわけです。それを前提として『コードをいつでも消せる状態になっているか』という点が、設計において重要になってきます。これは、私がコーチングをしているチームにもよく伝えていることです」と原田氏は続けます。

コードを消すことはコードを書くより何倍も難しいものです。コードが消せる状態を維持しておくには、リファクタリングによる適切なコンポーネント分割や、意図せぬデグレードを防ぐためのテストコードの記述が重要になります。つまり必然的に、クリーンな設計が保たれるのです。

「日本企業の場合、一定数のユーザーがいるうちはなかなかサービス終了に踏み切らない傾向が強い。ですが、『いかにサービスや機能をやめるか』を意識してソフトウエア開発をしていくと、社内リソースやソフトウエア設計の最適化が図れるかもしれません」(原田氏)

イベント終盤では「エンジニアが今後、取り組むべきこと」というテーマについても議論。原田氏は「『○○専門のエンジニアだから、○○しかやらない』と自分の領域を限定せず、さまざまな領域に手を出してみてほしい」と言及しました。

過去と比較して、さまざまな技術に触れるハードルは格段に低くなりました。各種のプログラミング言語やフレームワークといったソフトウエア関連技術だけではなく、3Dプリンタや電子回路、IoTなどのハードウエア関連技術にも、私たちは容易にチャレンジできます。そんな状況にあるエンジニアの方々に向けて、原田氏はこう提言しました。

「これだけ恵まれた環境があるわけですから、ぜひ積極的に活用していただきたい。そして、複数の領域を習得するうえでは、業務のうち20%の時間を、何かの領域を学ぶために割り当てることがおすすめです。普段からさまざまな技術に触れておくことで、課題に直面した際に『あの手法が使えるかも』と発案できるようになります。結果として、日本のプロダクト開発全体のレベルが向上するはずです」(原田氏)

藤倉も原田氏の言葉を受け、現代のサービス開発の潮流をふまえて、複数領域を学ぶことの意義について語りました。

「かつて、各種のアプリケーションはソフトウエア上で扱えるデータのみで完結するものが多かったです。しかし、いまの世の中を見回してみると、物理的な要素と連動したサービスが増えています。店舗や配達員、注文者などをつなぐUber Eatsはその好例ですよね。だからこそ余計に、エンジニアが複数の領域を学ぶことの重要性は高くなっているように思います」(藤倉)

セッションの締めくくりとして、原田氏はこう語りました。

「ソフトウエア開発の世界では、エンジニアが学習すべきことが膨大にあります。ですから、いかにして自分の仕事を楽にし、学ぶための時間をつくり出すかを考えていただきたい。捻出できた時間を活用してソフトウエアをさらに改善すれば、より良い社会が実現できるはずです。『レガシーコードからの脱却』が開発プロセス改善のヒントになれば、本当にうれしく思います」(原田氏)

こうして、すべてのセッションが終了した第一回の「Builders Box - ON AIR」。イベントの最後に、藤倉は視聴者の方々にメッセージを投げかけました。

「Davidさんや原田さんにご紹介いただいた各種のプラクティスは、これまでソフトウエア開発の現場で広く用いられてきたものです。これらを私たちもうまく活用して、より良いソフトウエアを生み出し、ビジネスをさらに発展させていきましょう。今回はみなさんご視聴いただきありがとうございました」(藤倉)


今後もBuilders Boxでは「日本のエンジニアリングが世界中で活躍できる未来をつくる」というコンセプトを実現するため、たくさんのイベントを開催してまいります。今後もぜひ積極的に各種イベントへご参加いただければ幸いです。

Others

INTERVIEW

(前編) 挑戦なくしてエンジニアは成長しない」激動のキャリアを歩むメルカリCTOが、自己研…

「エンジニアの世界で生きていくうえでは、挑戦を続けることが必ずキャリアにとってプラスになる」こう話してくれたのは、株式会社メルカリのCTOを務める名村卓氏。彼はこれま

2020.05.15
INTERVIEW 2020.05.22

(前編)「挑戦なくしてエンジニアは成長しない」激動のキャリアを…

INTERVIEW

(前編)グローバル化推進のため、私たちは何に取り組むべきか? 外国人エンジニアが語る日本…

日本の人口は減少を続け、国内の市場規模は縮小しつつあります。多くのソフトウエア会社は、海外展開を視野に入れたプロダクト成長戦略を描く必要に迫られている状態です。ま

2020.05.15
INTERVIEW 2020.05.15

(前編)グローバル化推進のため、私たちは何に取り組むべきか? 外国…