システム構築とは?開発との違いや流れについてわかりやすく解説
記事の監修
代表取締役村越 聖人
2006年からエンジニアよりデジタル業界でのキャリアをスタート。
大小様々なWebシステム開発およびシステム運用保守を経験。
フルスタックエンジニアとして上流から下流工程まで一連の業務を担当するとともに、サーバー設計、構築、運用設計などのサーバー管理者業務も兼任。
近年は、顧客折衝を含む提案型営業からDMP絡みのデータ分析業務をはじめ、プロジェクトの全体統括・SEなど業務要件に合わせたポジショニングで顧客ニーズの最大化を図るサービス提案を実施。
新規事業で立ち上げた自社サービスにて、発明者として特許取得。
2019年5月 株式会社glorious future 設立。
2006年からエンジニアよりデジタル業界でのキャリアをスタート。
大小様々なWebシステム開発およびシステム運用保守を経験。
フルスタックエンジニアとして上流から下流工程まで一連の業務を担当するとともに、サーバー設計、構築、運用設計などのサーバー管理者業務も兼任。
近年は、顧客折衝を含む提案型営業からDMP絡みのデータ分析業務をはじめ、プロジェクトの全体統括・SEなど業務要件に合わせたポジショニングで顧客ニーズの最大化を図るサービス提案を実施。
新規事業で立ち上げた自社サービスにて、発明者として特許取得。
2019年5月 株式会社glorious future 設立。
この記事では、「システム構築」というプロジェクト・作業について紹介します。似た言葉として、「システム開発」があります。両者の違いについて明確な定義があるわけではありませんが、この記事では以下のように捉えて、システム構築全体の流れを解説します。
- システムの構築を検討している人
- システム構築の流れや進め方を詳しく知りたい人
- システム構築をスムーズに進めたい人
システム構築とは?
システム構築とはITシステムのニーズを掘り起こし、実際にかたちにして安定して動かし続けるという全体のプロセスを指します。
具体的には、以下の要素が含まれます。
- 企画: 現状のビジネスにどのような課題があるか整理し、ITシステムでどのように解決できるかを検討する
- 要件定義: 構築するシステムの要件をユーザーとベンダーで整理し合意する
- 設計: システムを構成するハードウェア、ソフトウェアの具体的な構造を決定する
- システム開発: 設計に基づいてプログラミングとテストを繰り返し、ソフトウェアを完成させる
- 納品・検収: 開発したシステムが意図したものであるかをユーザーとベンダーで検証し、合意する
- 運用・保守: 利用開始したシステムを安定して稼働するよう監視・メンテナンスする
システム構築とシステム開発の違い
上記のように、システム開発はシステム構築のプロセスの一つと言えます。システム開発工程では、設計工程の成果物 (設計書) に基づき、実際にプログラミングを行います。また、作成したプログラムが設計の通りに動作するものになっているかを、随時テストを繰り返して検証します。
システム開発工程の具体的な流れについては、システム開発の流れ、各工程の役割や発注時の注意点を解説も参照してください。
システム構築の流れ・主な工程
ここからは、システム構築における各工程の特徴と具体的な作業内容を解説します。
要件定義:システムの大まかな仕様を定義づける
要件定義工程では、ユーザーが考えるシステムに必要な機能 (機能要件) と、システムに求める使い勝手 (非機能要件) をベンダーがヒアリングし、具体的な仕様に落とし込みます。ユーザーはITの専門家ではないことも多いため、ユーザーの抽象的なニーズを具体的なIT用語・概念に変換するスキルが求められます。
要件定義の進め方については、要件定義の進め方は?効率的に進めるポイントを解説も参照してください。
外部設計:システムの構成を決定
要件定義において決定した仕様をもとに、画面デザインや処理結果の出力形式などを検討するのが外部設計です。基本設計とも呼ばれます。「ここをクリックしたら、こうなる」といったユーザーから見たシステムの動作を決定する工程です。また、この段階でハードウェアの構成や使用するプログラミング言語、データベースの構造なども決定します。
内部設計:外部設計よりもさらに細かく設計を行う
プログラムの具体的な構造・動作を検討するのが内部設計です。詳細設計とも呼ばれます。プログラムを構成する機能 (モジュール) の分割や、モジュール内部のロジックを決定します。また、ストレージにどのようにデータを格納するかなどの具体的なハードウェア構成もこの工程で決定します。
プログラミング:実際に作っていく作業
設計が完了したら、設計書に基づいてプログラムを実装します。一般的に、ある程度以上の規模のシステムでは、Java言語が使われることが多く、小規模なシステムではPHPなどが使われることもあります。また、近年ではPython言語の利用も広がってきました。
自由に設計ができる趣味のプログラミングと異なり、システム開発工程では設計書に沿った厳密な作業が求められます。大規模なシステムでは、数十人以上のプログラマーがチームで開発を行います。また、システムを何年にも渡って運用するため、誰が読んでもわかる、保守性の高いプログラムを作成することが重要です。
テスト:作ったシステムが動くかの確認を行う
作成したプログラムおよびそれらを統合したシステムが設計・要件通りに動作するか確認する作業がテストです。テストには規模や目的に応じて以下のような種類があります。
- 単体テスト: モジュール単位で機能を検証する
- 結合テスト: 複数のモジュールが協調して動作するか検証する
- 総合テスト: プログラム・ハードウェア全体が連携して動作するか検証する
- 負荷テスト: システムにあえて巨大なデータや大量のアクセスを課して、エラー処理やシステムの停止も含め設計通りに動作するか検証する
すべてのテストに合格して、ユーザーに納品できるシステムが完成したと言えます。
納品:発注者へ渡す作業
システムをベンダーからユーザーに納品します。この際、受入テストが実施されます。実際にシステムを使用するユーザーから見て、問題がないか検証するテストです。テストに合格すれば、検収を行います。請負契約を結んでいる場合、検収が行われてはじめて報酬の支払いが確定します。
運用や保守
システム構築は、納品して完了ではありません。システムは動き始めたばかりなので、今後も安定して稼働し続けられるよう、運用保守作業を行います。運用は、システムを利用しビジネス課題の解決を図る作業です。一方、保守はシステムに障害が発生した際に原因の究明と対策を行ったり、必要に応じてシステムを改修する作業です。
システム保守について詳しくは「システム保守とは?運用との違いや業務内容をわかりやすく解説」をごらんください。
システム構築に最適な2種類の方法
ここまで、システム構築のプロセスを紹介してきました。これらのプロセスを進めるうえで採用されるアプローチに、ウォーターフォール型とアジャイル型があります。
ウォーターフォール型:システムを一連のフローに沿って構築する手法
ウォーターフォール型は、水が上から下に流れ、下から上には遡らないように、前の工程が確実に完了したことを確認してから次の工程に移る伝統的なアプローチです。ひとつひとつの工程が完了するまでじっくりと進めていくため、大規模で長期間利用する、安定性が求められるシステムを高品質に開発できるとされています。一方で、開発期間が長くなる、プロジェクトの途中での仕様変更に対応しづらいという注意点もあります。
アジャイル型:システムを部分的に一斉に構築する手法
アジャイル型はシステムの機能をひとつずつ、開発してはリリース (提供) するアプローチです。単体の機能を作る小プロジェクト (スプリント) を繰り返し (イテレーション)、徐々にシステムの完成を目指します。全体の完成を待たずに、ユーザーに機能を提供できる、ユーザーの反応を見て柔軟に仕様変更ができる利点があります。一方、短期間で機能の企画・設計・開発・テストを行うため、プロジェクトマネジメントが難しいという注意点があります。また、プロジェクトメンバーにも高いスキルが求められます。
システム構築を行う上での注意点
システム構築をスムーズに推進していくには、企画・要件定義の段階でシステムの目的や機能をしっかりと議論し、確定させることが重要です。要件や全体像があいまいなまま進むプロジェクトは、失敗する可能性が大きいです。そのためには、ユーザーとベンダーが対等にコミュニケーションできる体制作りが必要です。また、ユーザーのニーズをしっかりとヒアリングし、技術的な答えを出せるベンダーを選定することも重要です。
まとめ
こここまで「システム構築」プロジェクトの全体像について紹介しました。システム構築をスムーズに推進していくためには、全体像と個々のプロセスについて理解を深めていくことが重要です。
- システム構築とはITシステムのニーズを掘り起こし、実際にかたちにして安定して動かし続けるという全体プロセス
- システム構築は基本的に「要件定義→外部設計→内部設計→開発→テスト→公開→運用・保守」の流れで行われる
- システム構築の手法には「ウォーターフォール型、アジャイル型」などがある
- システム構築をスムーズに進めるには、目的や要件を明確にし、信頼できるベンダーとコミュニケーションを密に取ること