- システムエンジニアって何してるの?
- システムエンジニアにはどういうキャリアがあるの?
- システムエンジニアとプログラマーは何が違うの?
こういった疑問に答えます。
これからシステムエンジニアを目指そうとしている人は、どういった職業なのかわからず不安だと思います。
「システムエンジニア=プログラマー」と勘違いしている人も結構いるんですよね。
そこで現役エンジニアである私が、システムエンジニアとはどういう職業なのか、またプログラマーとの違いを詳しく解説していきます。
私はIT企業に丸5年勤めていて、上流工程から下流工程まで幅広く担当しているため、情報の信頼性は高いと思います。(上流工程や下流工程の用語もこれから解説していくので安心してください)
では、早速見ていきましょう。
目次
システムエンジニアとは?

システムエンジニアとは、一言でいうと「システムの上流から下流まで幅広くこなす人」のことをいいます。
この説明だけだと伝わらないと思いますので、詳しく見ていきます。
システムエンジニアという仕事がある理由
そもそもシステムエンジニアという人はなぜ必要なのでしょうか?
それは、「世の中の人がシステムを使って作業を効率化しようと思っているけど、自分では実現できないから詳しい人に全部やってもらいたい」という需要が世の中にあるためです。
一般企業の人を例にイメージを見てみましょう。
つまり、「自分ではできないことを、その道のプロに頼んでやってもらう」という発想です。
普段の生活でも同じようなことをしていますよね。
- 歯が痛くなったら歯医者に行く
- 髪が長くなったら美容院に行く
- 資格取得のために学校に通う
どれも「その道のプロ」にお金を払う代わりに価値を受け取っています。
つまり、システムエンジニアは「システム開発をする」という価値を与えているということになるのです。
システムエンジニアは何をしているか
具体的にシステムエンジニアは何をしているのでしょうか。
「プログラムを書いている」というイメージがある人も多いかもしれませんが、システム開発全体の期間で言うと、実はプログラムを書く期間はほとんどありません。
一般的には以下の流れでシステム開発が進められます。
- 要件定義
- 基本設計
- 詳細設計
- 製作
- 単体テスト
- 結合テスト
- システムテスト
これらをわかりやすくまとめたのが以下の図です。

この図は「V字モデル」と呼ばれ、以下のように見ることができます。
- 要件定義で決めたことをシステムテストで確認する
- 基本設計で決めたことを結合テストで確認する
- 詳細設計で決めたことを単体テストで確認する
用語の意味としては、「要件定義」「基本設計」という単位を「フェーズ」と呼んでいます。
また、一般的に基本設計までのフェーズを「上流工程」、詳細設計以降のフェーズを「下流工程」と呼びます。
システムエンジニアは、この①〜⑦までを幅広く担当しているのです。
システムエンジニアが各フェーズですること
「要件定義」「基本設計」という単位を「フェーズ」と呼ぶことはわかりましたが、各フェーズでどのようなことをやるのでしょうか。
テストについては先ほど説明したのと、「製作」はプログラムを書くフェーズというだけなので、「要件定義」「基本設計」「詳細設計」について見ていきます。
要件定義とは
先ほど例に挙げた「納品書をパソコンから印刷したい女性」を例に話を進めていきます。
要件定義では、まず以下のようなことを決めます。
- 納品書以外は印刷しなくていいのか?
- 他の業務もパソコンで入力できるようにしたいか?
- どのくらいの費用を想定しているか?
これは一部ですが、要件定義では「お客さんに話を聞き、どういったシステムにしたいかを明確にする」という作業を行います。
資料を作成するというよりも、お客さんと打ち合わせをすることがメインになるフェーズです。
なので、要件定義を問題なく終わらせるには以下のような能力が必要になってきます。
- お客さんの要望を引き出す質問力
- 円滑なコミュニケーションが取れる会話力
- 実現するシステムがどのくらいの費用になるかを見積る力
これを見ると「けっこう大変だな」と思う人も多いと思います。
要件定義が大変なのは事実で、「お客さんが今どういった業務をしているか」というのも正確に把握しなければならず、最初からできるものではありません。
このフェーズをできるようになると、システムエンジニアとして高く評価されるようになります。
最低でも5年くらいの経験がないと要件定義は難しいでしょう。
基本設計とは
基本設計は、要件定義で決めたことをもう少し具体化するフェーズです。
要件定義では「パソコンから納品書を発行する」ということが決まったとすると、基本設計は以下のようなことを決める必要があります。
- 納品書に印字したい項目は何か?
- 納品書はどのようなレイアウトにするか?
- Excelから印刷するか?別の方法で印刷するか?
さらに具体的になってきましたね。
要件定義よりもお客さんと打ち合わせをする回数が減る代わりに、具体的に決めたことを設計書として資料に残していくことがメインになります。
最低でも3年くらいの経験がないと基本設計は難しいでしょう。
詳細設計とは
詳細設計は、基本設計で決めたことをさらに具体化するフェーズです。
ここで作成した資料をもとに、実際にプログラムを書くことができるレベルまで以下のようなことを詳細に決めます。
- 納品書に印字するデータはどのように取得するか?
- 例外処理はどのように行うか?
- 処理の順番はどのようにするか?
詳細設計の目的は「製作フェーズで問題なく実装ができるようにすること」なので、簡単な機能の開発だとやらないこともあります。
企業によりますが、駆け出しのエンジニアは詳細設計フェーズか、次の製作フェーズから関わることが多いです。
このような下流工程で経験を積んでいって、徐々に基本設計、要件定義と関わっていくようなイメージです。
システムエンジニアとプログラマーの違い
ここまでで、システム開発の流れが理解できたと思います。
では、システムエンジニアとプログラマーの違いは何なのでしょうか。
先ほど、基本設計までのフェーズを「上流工程」、詳細設計以降のフェーズを「下流工程」と説明しましたが、2つの職種の違いはこの「担当する工程の違い」です。
簡単に表にまとめてみました。
フェーズ | システムエンジニア | プログラマー |
---|---|---|
要件定義 | やる | やらない |
基本設計 | やる | やらない |
詳細設計 | やる | やる |
製作 | やる | やる |
単体テスト | やる | やる |
結合テスト | やる | やらない |
システムテスト | やる | やらない |
つまり、違いはこういうことです。
- 「システムエンジニア」:上流工程から下流工程までひと通り担当する人
- 「プログラマー」:プログラム開発に関わることだけ担当する人
世間一般的には「プログラムを書く人=システムエンジニア」というイメージが強いように感じますが、実際にはその人は「プログラマー」と呼ぶのが正しいです。
そういうわけではなく、システムエンジニアはプログラマーの仕事領域をさらに広げたイメージで、プログラムを書いたりもします。
また、上流工程をメインに担当する人は「上流SE」と呼ばれていて、その場合は詳細設計から単体テストまではプログラマーに担当してもらうということが多いです。
値段が安いため海外にプログラム開発を委託したり(オフショア)、開発者として海外のプログラマーを雇う(ニアショア)ということも進んできています。
そのため、正社員は製作以外のところを担当し、製作はオフショアやニアショアをしている企業が増えていることも事実です。
おわりに:システムエンジニアの今後

今後の世の中としては「AIによる仕事の自動化」「プログラム開発の外注化」というのがどんどん進んでいきます。
「プログラムが書きたくてエンジニアになりました!」という人もいると思いますが、この先のIT業界で生き残るためにはプログラムが書けるだけではいけません。
また、2020年度からは小学校でプログラミングが義務教育化もされ、どんどんエンジニアの人数が増えていくでしょう。
そうなったとき、生き残る人は「替えのきかない存在になっている人」です。
もちろん、最初から替えのきかない存在になるのは無理ですが、そういった存在になることを目標にしているのとしていないのとでは、数年後の成長度がガラリと変わります。
お客さんとしっかりコミュニケーションが取れる存在になりたければ上流SEを目指すのもいいですし、プログラミングが好きなのであればプログラミングを極めるのもいいです。
目標を決めたら、「上流SEになるためにはどうしたらいいのか?」「プログラミングで生き残るにはどうしたらいいのか?」ということを考えて毎日行動することで、今後も生き残るエンジニアになることができるでしょう。
みなさんも一緒に「替えのきかないエンジニア」になれるように今から頑張りましょう。