2021年6月17日

システム開発とは – アジャイル開発 –

投稿者: kgi_admin

前回

前回のおさら

前回は要件定義書についての紹介しました。
要件定義書は「顧客が必要とするものと、それをどのようにシステム化するかをまとめたもの」であり、ウォーターフォール開発をする上で、なくてはならないものです。

要件定義の工程で最も重要なのはヒアリングです。そして、そのヒアリングをした情報を整理して、要件定義書へと落とし込んでいきます。

先ほど、「ウォーターフォール開発でなくてはならない」と書きましたが、それではウォーターフォール開発ではないアジャイル開発でも要件定義は行います。しかし、アジャイル開発はウォーターフォール開発とはまた違った特徴を持ちます。

今回はウォーターフォール開発とアジャイル開発、そして、マイクロサービスもともに紹介していきます。

アジャイルソフトウェア開発宣言

アジャイル開発を知る上で、絶対に外せないアジャイル開発の原則があります。それがアジャイルソフトウェア開発宣言です。

プロセスやツールよりも個人と対話

包括的なドキュメントよりも動くソフトウェアを、

契約交渉よりも顧客との協調を、

計画に従うことよりも変化への対応を、

上記の4つがアジャイル開発の4つの特徴です。
左記の事柄に価値があることを認めながら、右記の事柄に価値を置く、というのが、アジャイル開発の原則となります。

アジャイルソフトウェア開発宣言
https://agilemanifesto.org/iso/ja/manifesto.html

ウォーターフォール開発とアジャイル開発

ウォータフォール開発は古くからある開発手法で、今でも多くの企業で使われています。要件定義からシステム設計(基本設計・詳細設計など)、プログラミング、テストまでを各工程を順番に進めていくものです。

それぞれの工程を終えて、次の工程へと進むので管理が容易なのが特徴です。ただ、利用者がシステムを確認できるのは全ての工程を終えたリリース前となるので、そこで仕様が思っていたものと違ったなんてことがあると、いくつもの工程を戻っていく必要があります。

アジャイル開発とは短い反復単位を用いてスピーディーに開発を行う手法の総称です。開発中に仕様変更や新しい機能が追加される可能性の高いプロジェクトに向いています。

開発初期では細かい仕様を決めずに大まかな計画を立てて、「イテレーション」と呼ばれる短期サイクルを繰り返して開発を進めていきます。

ウォーターフォール開発とアジャイル開発の違い

ウォーターフォール開発とアジャイル開発にはそれぞれの向き・不向きがあると言われています。

ウォーターフォール開発は開発途中での仕様変更がないプロジェクトならウォーターフォール開発が向いていると言えるでしょう。また、厳密に要件定義が必要なシステムの場合も、ウォーターフォール開発を選ぶべきだと考えられます。言うならば、完成形が決まっているシステムです。

アジャイル開発は途中で仕様変更が出る可能性があるプロジェクトや小規模でスタートして、ユーザーのニーズを分析しながら開発を進めていく場合はアジャイル開発が向いています。
他にも、モバイルアプリのような技術革新の激しいケースでもアジャイル開発で進めて行くべきだと考えられます。

アジャイル開発の様々な手法

アジャイル開発には様々な手法があります。代表的な開発手法は、スクラム、ユーザー機能駆動開発(FDD)、エクストリームプログラミング(XP)です。

今回は代表的なスクラムについてのみを紹介します。

スクラムのプロジェクト体制

スクラムはチーム一体となって行うシステム開発のフレームワークのことを指します。チームメンバー自ら計画を立て、イテレーションごとにシステムの進捗やプロジェクトのテストを行います。スクラムチームはプロダクトオーナー、スクラムマスター、開発チームで構成されます。

・プロダクトオーナー

プロジェクトマネージャーと呼ばれることもあるプロダクトの責任者。プロダクトバックログのメンテナンス、プロダクトバックログ項目の優先順位づけ、リリース計画の立案などを行う。

・スクラムマスター

プロジェクトを円滑に進める責任を持ち、コーチングやファシリテーション、プロダクトオーナーや開発チームの支援などの役割を持つ。プロダクトオーナーとの兼任は推奨されていない。

・開発チーム

プロダクトを開発するメンバーで、開発に関する仕事のやり方は開発チームで決定するなど、自己組織化されている。3~9人で構成され、それ以上の人数の場合は、分割される。

スクラムでの開発の進め方

スクラムではプロジェクト立ち上げ時に、リリースプラニングを行い、それ以降はスプリント計画を立てて、開発を進めていきます。

・リリースプランニング

プロジェクトを立ち上げる時に行う計画。プロダクトの機能やその実装順序、開発期間をスクラムチームで計画する。プロダクトバックログというプロダクトの必要要件を並べたリストをアウトプットとする。プロダクトバックログは開発を進めるにつれて、変化していくので、完璧なものでなくてもよい。

・スプリント計画(スプリントプランニング)

一つのスプリントで、プロダクト全体のどの範囲の機能を実現させるかを計画すること。スプリント計画はスクラムチームで決定する。スプリントバックログという、プロダクトバックログの項目と、それを分析して具体的なタスクに落とし込んだものをアウトプットとする。

・スプリント

実際のイテレーションの開発工程の単位で、4週間以下であることが多い。この期間に開発チームは、要件を満たしたプロダクトインクリメント(リリースできる状況にあるプロダクト)を開発する。スプリントが始まると機能の追加・変更・削除など行うことはできない。

・デイリースクラム

毎朝決まった時間、場所で行われる小ミーティング。障害、問題点、その日に行う予定の作業の確認を行う。基本は15分以内。

・スプリントレビュー

スプリント終了時に行うプロダクトの完成デモ。プロダクトがきちんと要件通りに実装されているかの確認を行う。

・振り返り

スプリント終了後に行う振り返り。そのスプリント内での問題点やよかった点、次のスプリントに向けての改善点をスクラムメンバーで話し合う。

エクストリーム・プログラミング

エクストリーム・プログラミングは、技術者中心の開発手法で、仕様変更や機能追加などを想定していることが特徴です。

5つの価値と19のプラクティスが定義されていて、開発のプラクティスとして定められているのは以下の6つです。

・テスト駆動開発

実装前にテストを定めて、そのテストが通るように実装を行う。

・ペアプログラミング

2人1組でプログラミングを行う開発手法で、1人がコードを書き、もう1人がコードの検証を行う。役割を交互に入れ替えながら、作業を進めていく。知識の共有や品質向上を目的としている。

・リファクタリング

プログラムの内部コードを改善していくこと。ユーザーから見えるインタフェースは変更されず、冗長な小構造を改める。

・ソースコードの共同所有

コード作成者に断りなく、チームメンバーは修正を行うことができる。それとともにチーム全員がコードの責任者となる。

・継続的インテグレーション

単体テストを終えたプログラムはすぐに結合して、結合テストを行う。

・YANGI

「You Are’t Gonna Need It」の略で、必要最低限の機能だけを実装する。

ユーザー機能駆動開発(FDD)

ユーザー機能駆動開発は、ユーザーにとっての機能価値という観点で開発が進められます。ビジネスモデルの理解を最初に行い、そのビジネスモデルに対してマイルストーンを決め、イテレーションを反復しながら、ユーザーに機能を提供していくのが特徴です。

これからのアジャイル開発とマイクロサービス

アジャイル開発は近年普及している開発手法ではありますが、

これまでは「開発手法の主流はウォーターフォールで、アジャイル開発は小規模開発用の手法」という考えが一般的で、ERPなどのエンタープライズシステムには不向きとされていました。

しかし、最近はサービス指向アーキテクチャ(SOA)からより、小機能単位のマイクロサービスへと発展しています。そして、マイクロサービスをAPI連携させることでAPIエコノミーを拡大させるのがより一般的な開発になると予想されています。

マイクロサービスとは「単一の機能の小さなサービスに分割し、それぞれを独立して開発、デプロイする考え方」です。メルカリやLINE、Amazon、クックパッドなど多くの巨大なサービスはマイクロサービス化されています。

マイクロサービスは、各サービスが独立したサーバーを持つことで、使用頻度の高いサーバーのみのスペックを向上したり、サーバーがダウンしてもその機能のみが一時的に使用不可になるだけで済み、その機能のみに絞って原因究明をすることが可能です。

また全体像の理解が容易になったり、一つの機能改修で他の複数の機能にも影響が出ると言った問題の解消にもつながります。

まとめ

今回はアジャイル開発をメインにウォーターフォール開発との違いや、マイクロサービスについて紹介しました。

開発スピードや顧客の要望の満たしやすさなど、多くのメリットがあるアジャイル開発ですが、もちろんデメリットがあることも覚えておきましょう。例えば、仕様変更を繰り返す内に開発の方向性やゴールがぶれてしまうなんてことも起こります。

序盤でアジャイル開発とウォーターフォール開発には向き不向きがあると言いました。しかし、これからは多くのシステム開発がアジャイル開発で行われる、と言われています。マイクロサービスの普及も後押しして、これからはアジャイル開発に向いてるかどうかではなく、「どのようにすればアジャイル開発で行えるか」を考える時代になっていくでしょう。

最後にもう一つ
アジャイル開発では人が重要となります。もちろん開発者だけではなく、クライアントも含めてです。
コミュニケーションやチームワークをなくして、アジャイル開発は成功しません。

中小企業をがっつりサポート!

当社では

など、企業のIT化のサポート・DX事業のサポートを行っています。

まずはお気軽にお問い合わせしてください。