他業種の方に開発エンジニアの仕事を話そうとすると、「システム開発の流れ」が必ず話題にあがるので記事にまとめます。
ここでまとめるモデルは主に「ウォーターフォール開発モデル」です。「アジャイル開発モデル」というモデルもあるのですが、こと日本においては、前者のモデルが伝統的に普及している認識ですので、このモデルに沿って書きます。
システム開発の流れ
業務システムや組込みシステム、Webサービスなどは大体以下の流れで開発されます。
各工程が決まりきってから次のステップに行くため、それが滝の流れのように上から下へ進む様子に似ていることから「ウォーターフォール開発モデル」と呼ばれます。
一つずつ見ていきましょう。
①要件定義(上流工程)
お客様の困りごと(要件)をヒアリングする工程。
「システムエンジニア」が担当します。
②設計(上流工程)
その困りごとを解決するには、どのようなシステムがあれば良いか設計する工程。
サイトによっては「基本設計(大まかな設定)」「詳細設計(より具体的な設計)」など細かく工程を分ける図解もあります。
「システムエンジニア」が担当します。
③開発(下流工程)
一番イメージされやすい、プログラミングやフレームワークを使って「開発」する工程。
「プログラマー」が担当します。(詳細設計を行ったシステムエンジニアが担当するケースも多い)
④テスト(下流工程)
バグがないか、大量のデータが操作されても重くならないか、などいろんな観点でテストをします。品質の高いシステムを開発するためにとっても大切な工程!
「プログラマー」が担当します。
⑤リリース(下流工程)
お客様に納品したり、Web上に公開したりする工程です。要件が満たせているか?作ったものに認識齟齬ないか?など、お客様に確認していただきます。
「システムエンジニア」が担当します。
⑥運用・保守(下流工程)
納品してOK!ではサヨナラ!ってわけにはいきません。後々バグが発生したり、問題が発生したり、別の要望が出てきた際にお客様をサポートする工程です。
「システムエンジニア」が担当します。
具体的な例
システムエンジニアを疑似体験してみましょう!
以下のようなサイトがあるとします。あなたが作ったサービスです!
ユーザーが遊んだゲームのプレイ記録を登録できるシンプルなサイトのようです。
でもお客さんはもっと使いやすくして欲しいようで、システムエンジニアであるあなたに相談にきました。
お客さんからの相談
「このサイト使いづらくなってきたんだよね〜。シンプルすぎるし、自分のハマりやすいゲームがわかりにくいって言うか〜」
あなた「具体的に欲しい機能はありますか?」
お客さん「今は新規登録しかできないんだよね。間違えて登録した時用に削除・更新機能が欲しいな」
あなた「なるほど!他に困りごとはありますか?」
お客さん「もっと自分の記録を分析できると嬉しいかな」
あなた「なるほど...。たとえば、今は購入日順に並んでいますが、『最終プレイ日』で並び替えたいケースはありますか?」
お客さん「それ欲しい!最近やってないゲームとかわかったら便利かも」
あなた「いいですね。他にも、ジャンルごとに分けて見れた方が良いですか?」
お客さん「そうね!友達に ”謎解きといえばこんなゲームがおすすめだよ” って教えたい時もあるので!」
・
・
・
・・・ある程度お客さんの要望が聞けたら設計に移ります。
先ほどの話を聞いて、どのように画面を直したらいいかイメージしてみてください。
①削除・更新機能の追加
②最終プレイ日など、項目のソート機能
③ジャンルでの検索機能
↓ ↓ ↓ ↓
↓ ↓ ↓ ↓
①〜③を含めた修正案を自分なりに詰め込んでみました。
検索欄が追加され、各項目にソート順を追加しています。
さらに表の行ごとにナンバーを割り振って、「登録画面」に飛べるようにしました!ここでは表の「更新」「削除」が可能です。
これでお客さんの要件は満たせるはずです!
ちなみに上記の案を見て
・「もっとわかりやすい見た目にできるのに・・」と思った方は【UIデザイン】
・「ユーザーの求めてるものはもっとこうなんじゃない?」と思った方は【上流工程】
が向いているかもしれません!
これでお客さんに提案してみて、OKをもらったらようやく開発作業です!

開発ではHTMLやCSSを使ってフロントサイド(画面)を整えていきます。動的なサイトを作成したい場合は、JavaScriptなどの言語を使用します。
また、③によって「検索処理」が追加されました。この処理は少し複雑な処理なので、「サーバーサイド」と言う部分の修正が必要です。
このように、開発の工程で具体的な制作を行なっていきます!
開発の工程がある程度終わったら、バグがないかのチェックも行います。
テストまで問題なかったようなので、お客さんに納品しましょう。
お客さん「わ〜ありがたい!これでだいぶ使いやすくなったよ〜!」
あなた「よかったです!また使ってみて問題があったら教えてください!」
お客さん「助かるよ〜また要望が出てきたら伝えるね!」
.
.
.
何事もなくエンド・・・かと思いきや、お客さんから電話がかかってきました。
お客さん「1万件くらい登録したら、重たくって全然ページが開かないんだけど・・」
あなた「(そ、そんなにゲームを・・・!?)調査しますね!」
大量のデータをサクサク画面に表示するのは結構難しいです。
それを改善するのは「運用・保守」の工程でサポートするケースが多いです。
このような例以外にも、たとえば使用している言語のバージョンが古くなったから最新化しないといけない!とか、法制度が変わったからシステムも変えないといけない!みたいなアップデート作業を行います。
おわりに
業種や現場によって文化が違う可能性はありますが、基本的なシステム開発の流れをまとめました。
この記事を通して、エンジニアの仕事のイメージがつきやすくなれば幸いです!










