Blogブログ

システム開発の流れ、各工程の役割や発注時の注意点を解説

新規サービスを立ち上げたいものの、システム開発がどのような工程で行われるかわからないという方も多いのではないでしょうか。
システム開発を外部に依頼する際は、開発の流れをあらかじめ把握しておくことが重要です。 この記事では、システム開発の工程や、それぞれの開発フェーズで発注者が注意すべきポイントについて解説します。

この記事はこんな人におすすめ
  • システム開発の種類や工程について詳しく知りたい人
  • Webサービス開発をスムーズに進めたい人
  • 新規サービスを検討している人

システム開発とは?

システム開発とは、プログラミングやUI(ユーザーインターフェース)デザイン、システムテストなどのIT技術を用いて業務の効率化や最適化に繋がる仕組みを作ることです。

システム開発のプロセスには、システムの全体設計を行うシステムエンジニアや、設計に沿って実際にコードを書くプログラマーなど様々な人が関わります。

ビジネスの現場にて代表的なシステムは、社員の出勤状況を管理する勤怠管理システムや、商品を管理する在庫管理システムなどです。

システム開発の流れと役割を解説

システム開発には、どのようなシステムを作るかを決めたり、実装後に不具合を修正したりする様々な工程が含まれます。
システム開発の流れと、各工程の役割は次の通りです。

要件定義:システムの仕様を決定

要件定義では、まず、システムを通じて何を解決したいか、どのようなことを実現したいかを、依頼者から開発者に伝えます。
要件定義は、システムに求める要件を過不足なく明確化するための重要なフェーズです。

この段階で要件が十分に洗い出せていない場合、後の工程で仕様変更が発生するリスクがあります。開発スケジュールの遅れや予定外のコストが発生しないようにするため、要件定義をしっかり固めることが大切です。

外部設計(基本設計):見た目の設計

外部設計では、画面やボタンなどのシステムの見た目や、操作時の動きなどのUIを設計します。配色やデザイン性などの要素だけでなく、ユーザー目線に立って、使いやすさも考慮しながら設計することが重要です。

内部設計(詳細設計):中身の設計

内部設計では、外部設計のフェーズで決めたUIの見た目や機能を、プログラムとしてどのように実装するかを設計します。
内部設計は、システムの裏側で動く仕組みについて開発者目線で考えるフェーズです。

一般的に、要件定義から内部設計までのフェーズが、システム開発における上流工程と呼びます。

開発:プログラミング

開発は、要件定義や設計で決めた仕様をもとに、プログラミングによってシステムを実装するフェーズです。
大規模なシステムの場合、複数のプログラマーが分担してコードを作成することもあります。

一般的に、開発以降のフェーズが下流工程と呼びます。

テスト:不具合の修正

システムが一通り実装されると、次にテストのフェーズへと進みます。仕様通りにプログラムが実装されているか、要件を満たしたシステムになっているかを確認することがテストの目的です。

一般的に、システムのテストは複数の段階に分けて実施されます。システムを構成する各要素の、動作をチェックする単体テストが最初の段階です。その後、複数の要素を組み合わせて行う結合テスト、システム全体を検証する総合テスト、最終的な運用テストの順に行われます。

トラブルが見つかった場合、不具合を修正することもテストの役割です。

リリース(公開)

全てのテストが完了した後、一般のユーザーにシステムをリリースします。開発手法によっては、すべての機能をまとめてリリースするのではなく、段階的に公開する場合もあります。

運用・保守:メンテナンス

運用・保守は、システムのリリース後に発生したトラブルへの対応や、システムの監視などを行うフェーズです。

システムを実際に運用し始めると、設計やテストの段階では、想定していなかった不具合が発生することがよくあります。
場合によっては、システムの改修や追加の開発が必要になります。

システム開発の代表的な手法

システム開発には、工程やリリースのサイクルなどが異なる複数の手法があります。
ここからは代表的な手法とそれぞれの特徴を紹介します。

ウォーターフォール型

ウォーターフォール型は、要件定義から設計、開発、テストと順番にシステム開発を行う手法です。上流工程から下流工程へと、滝のように流れて進んでいくことからウォーターフォールと呼ばれています。

要件定義や設計のフェーズで綿密に仕様を決めるため、後戻りが難しい大規模なシステム開発に適した手法です。

アジャイル型

アジャイル型は、機能ごとにシステムを細かく分割し、それぞれで設計からリリースまでのサイクルを繰り返す開発手法です。アジャイルとは、素早いという意味の言葉で、スピード感をもって開発できることがアジャイル型の特徴となっています。

開発初期に明確な仕様を決めないため、柔軟な仕様変更が可能です。一方、開発コストやスケジュールの管理が難しい側面もあります。

スパイラル型

スパイラル型は、アジャイル型と同様に、機能ごとに設計や開発のサイクルを繰り返す手法です。ただし、機能ごとではなく、システム全体が完成して、発注者からのレビューを受けてからリリースします。

スパイラルとは、螺旋を意味する言葉で、開発とレビューを繰り返しながら、システムの品質を向上させていくことを表しています。
この手法は、手直しが最小限に抑えられる反面、仕様変更を繰り返すことでコストがかさむ可能性があります。

プロトタイプ型

プロトタイプとは、原型や試作品を意味する言葉です。早期段階で試作品を作成し、依頼者側で確認や評価をしながら仕様を決める開発手法がプロトタイプ型と呼ばれています。

確認、評価を細かく行い修正を加えるため、早いタイミングで完成品のイメージを共有でき、後戻りのリスクを低減することが可能です。ただし、検証の回数が多いため開発側の負担も大きく、大規模なシステムの場合は、コストや工数が膨らむことがあります。

DevOps

DevOpsとは、開発(Development)と運用(Operations)を組み合わせた造語です。開発担当者と運用担当者が密に連携し、柔軟かつスピーディーにシステム開発を行う手法がDevOpsと呼ばれています。

開発側と運用側の間の乖離をなくし、双方が協力して開発・運用を円滑に進めることがDevOpsの特徴です。ただし、部署間のコミュニケーションが不十分な場合、開発に失敗するリスクがあります。

システム開発を発注する際の注意点・ポイント

システム開発をスムーズに進めるには、発注する前にいくつかのポイントを押さえておくことが大切です。ここでは、システム開発を発注する際の注意点を紹介します。

システム開発の目的や予算を明確にする

システムを通じて実現したいことや希望の予算、リリースまでの期間が明確でないと、開発者側と発注者側で齟齬が生じてしまいます。
システム開発の目的や予算は、要件定義のフェーズですり合わせ、発注前に明確にしておくことが必須です。

システム開発の目的は、業務工数を何パーセント削減したい、Webサイトへ月間何件のアクセスを集めたいなど具体的な数値を用いると明確に伝わります。

開発途中の仕様変更には多大な時間・コストがかかる

一定以上の規模のシステムを開発する場合、開発途中で仕様を変更すると遅延やコストの増加など想定外のトラブルが発生します。
特に、上流工程で綿密に仕様を決めるウォーターフォール型の開発では、仕様変更に多大な時間やコストがかかることが一般的です。

発注者側の要望が開発者側に正しく伝わっているかを、要件定義における話し合いや設計書の内容で確認する必要があります。

コミュニケーションは密に取る

開発スケジュールの遅延や障害などのトラブルを未然に防ぐため、要件定義や設計の段階から十分にコミュニケーションを取ることが重要です。

リリース後だけでなく、開発中にも様々な問題が発生する場合があります。依頼側と開発者側でコミュニケーションを密に取っておくと、問題が大きくなる前に対処が可能です。情報共有のためのコミュニケーションツールを事前に整えておけば、開発の進捗状況をスムーズに確認できます。

システム開発の流れは、要件定義から設計、開発と段階的に進むことが一般的です。開発手法にはウォーターフォール型やアジャイル型などいくつかの種類があり、それぞれ特徴が異なります。目的や予算などの要望を明確化し、密にコミュニケーションを取ることで、システム開発をスムーズに進めましょう。

開発手法が自社のニーズに合っているか確認する

システム開発にはさまざまな手法があり、それぞれにメリットやデメリットがあります。予定している開発手法が自社のニーズに合っているかどうかを確認することも大事でしょう。

手法が自社のニーズに合ってない場合はどのような問題が起きるのでしょうか。懸念されるリスクとしては「求めていたシステムが納品されない」が挙げられます。

例えば、システムに求める仕様や要求が市場変化と共に柔軟に変化することが想定されているとします。その場合にウォーターフォール型を選んでしまうと、システム開発が失敗に終わるかもしれません。

ウォーターフォール型では手戻りを行うのが難しいため、基本的に一度決めた仕様が固定されるからです。自社が置かれている状況に応じて、適切な開発手法を選びましょう。

複数の業者を比較する

複数の業者を比較することで、より良い選択に繋がるかもしれません。一社に決め打ちするよりは複数の業者を見て決めた方が視野が広がりますし、自社の潜在的なニーズに気づくきっかけになる可能性もあります。

「ITシステムの開発」と一口に言っても、多種多様な手法や価値観が存在します。複数の業者を比較検討することで、ある程度スタンダードな部分を掴むことができるでしょう。

基本的な知識や用語を理解する

ITは専門的な知見を要する分野です。それ故に他者に開発業務を委託するわけですが、委託側も基本的な知識や用語を理解することでコミュニケーションがスムーズになるでしょう。

基礎的な知識や用語を知らないまま打ち合わせ等に臨む場合、概念や用語を逐一説明する必要があるかもしれません。それだと本題を突き詰めるのが難しくなるため、なるべく基礎的な部分は把握しておくのがベターです。

その際に得た知見は、システムが納品されて実際に運用する際にも有用でしょう。

信頼できる開発業者を見極めるポイント

続いて、信頼できる開発業者を見極めるポイントをいくつかご紹介します。どのような点をチェックすれば、より良い開発業者を見つけることができるのでしょうか。

開発実績をチェックする

まず挙げられるのは、開発実績をチェックすることです。開発実績が豊富な開発業者は、それなりの知見や技術を有することが想定されるでしょう。

特にチェックしたいのは、自社が開発したいシステムと類似の実績です。勤怠管理システムを作りたい場合は同じく勤怠管理システムの実績を、グループウェアを作りたい場合は同じくグループウェアの実績を、といった具合です。

類似分野の開発実績が豊富であればあるほど、失敗のリスクを排除できます。どのような点に気をつければ失敗を回避できるかを業者側が熟知している可能性が高いからです。

また、運用における有益なアドバイスを得ることもできるかもしれません。システムは納品されて終わりではなく、実際に使い成果を上げるのが本来の目的です。

ある課題に対し、どのようなシステムを作りどのように運用すれば効率的か、といった視点で考える必要があります。その点でも、開発実績が豊富な業者は心強いパートナーになりえます。

コミュニケーションの取りやすさを重視する

コミュニケーションの取りやすさを重視することで、開発業者を見極める助けになるでしょう。いくら技術力が高くともコミュニケーションに難が生じると、こちらのニーズが正しく伝わらない恐れがあるからです。

具体的には、レスポンスの早さや質問に対する返答の精度等がポイントとして挙げられます。基本的には、レスポンスが早ければ早いほどコミュニケーションを重視していると判断できるでしょう。

また、こちらの質問に対して的確な答えが返ってくるか否かで情報伝達の精度を判断できます。情報がスムーズに伝われば伝わるほど双方の負担が減るため、システム開発そのものに注力できるという判断が可能です。

もちろん、こちらも適切な質問を投げるよう努める必要があります。

セキュリティマネジメントをチェックする

ITを扱う上で非常に重要なのがセキュリティです。セキュリティが甘ければ機密情報が漏洩したり第三者の侵入を許す等、事業経営における重大な問題が生じるからです。

開発業者を探す際は、開発されるシステムそのものに対するセキュリティに加え、全社的なセキュリティマネジメントの精度もチェックしたいところです。開発を委託する場合、委託側は受託側にさまざまな情報を提供することになります。

その中には、外に漏れると大きな問題になる情報もあるかもしれません。社内のセキュリティが強固であればあるほどそのリスクを軽減できますし、そういった会社が作るシステムはセキュリティレベルが高いことが期待できます。

見積もりが妥当かどうか

見積もりが妥当かどうかは、信頼できる開発業者であるかどうかの判断材料になります。明確な理由がないにも関わらず相場より高すぎるのはもちろん、安すぎる場合でも問題が起きる恐れがあります。

それらを判断するためにも、システム開発における相場感を掴んでおくことが大事です。システム開発の概要や基礎を理解したり、複数の業者を比較検討することはその一助となるでしょう。

もちろん、価格だけでなく総合的に判断することが大事です。技術力が高く経験豊富なエンジニアに開発を依頼する場合は通常より高価になる等の妥当な理由が存在するからです。

高い(安い)ことによるメリット・デメリットが明確な場合は、委託側がそれを承認するかどうかという話になります。

サービスの範囲を確認する

システム開発を依頼する際は、サービスの範囲をしっかりと確認したいところです。システムは開発→納品されて終わりではなく、本番運用およびその後の管理も重要だからです。

運用後に行われる業務として、保守やメンテナンスが挙げられます。これらはシステムを安定稼働させるためのものなので、定期的に行う必要があります。

それらを開発業者がサポートしてくれるか否かを事前にチェックしましょう。サポート非対応な場合は自社のリソースで行う、もしくは保守やメンテナンスを外注することになるからです。

その場合、またサポート業者選びからスタートする形になります。それに比べると、最初からアフターサービスが充実している開発業者を選んだ方が効率的かもしれません。

スケジュールや予算にムリやムダがないか

見積もり段階である程度のスケジュールや予算が提示されますが、それらにムリやムダがないかをチェックするのも大事です。あまりに納期が早すぎる(遅すぎる)、費用が高すぎる(安すぎる)場合は理由を確認したいところです。

明確な理由が存在し、自社がそれに納得できるのであれば問題はありません。逆にそのあたりが不明瞭で説明不足であれば、明確化して共有した方が後の憂いを解消できるでしょう。

システムはそれぞれ開発規模も異なれば仕様も異なります。そのため「どのくらいが適正なスケジュール(予算)か」を判断するのは非常に難しいところです。

あらかじめシステム開発における基礎的な知識を学ぶこと。そして、開発業者と密なコミュニケーションを行うことである程度改善できるかもしれません。

まとめ

システム開発を行う際は、あらかじめ開発の流れを把握しておくことが重要です。
また、開発やプロジェクトの規模、リリースまでの納期などに合わせて手法を選択する必要があります。
目的や明確にし、信頼できる開発業者としっかりとコミュニケーションを取りながら、スムーズなシステム開発を目指しましょう。

この記事のまとめ
  • システム開発とは、IT技術を用いて業務の効率化や最適化に繋がる仕組みを作ること
  • システム開発は基本的に「要件定義→外部設計→内部設計→開発→テスト→公開→運用・保守」の流れで行われる
  • システム開発の手法には「ウォーターフォール型、アジャイル型・スパイラル型・プロトタイプ型・DevOps」などがある
  • 開発をスムーズに進めるには、目的や要件を明確にし、信頼できる開発業者とコミュニケーションを密に取ること
記事の監修

代表取締役村越 聖人

代表取締役村越 聖人

2006年からエンジニアにてデジタル業界でのキャリアをスタート。
大小様々なWebシステム開発およびシステム運用保守を経験。

フルスタックエンジニアとして上流から下流工程まで一連の業務を担当するとともに、サーバー設計、構築、運用設計などのサーバー管理者業務も兼任。

近年は、顧客折衝を含む提案型営業からDMP絡みのデータ分析業務をはじめ、プロジェクトの全体統括・SEなど業務要件に合わせたポジショニングで顧客ニーズの最大化を図るサービス提案を実施。

新規事業で立ち上げた自社サービスにて、発明者として特許取得。

2019年5月 株式会社glorious future 設立。