1.システムエンジニアとは?
システムエンジニア(SE)とは、主にクライアントからヒアリングを行い、要求事項をまとめ、システムの設計から開発、テスト、リリース、保守運用を担う人のことを指します。
そのためプログラマーと違い、幅広く知識が必要で、責任範囲も広いです。
プログラマーは、システムの開発部分を担当します。システムの要件、設計書を元にコーディングをしていきます。
2.システムエンジニアの仕事内容
システムエンジニア(SE)の主な仕事内容を紹介致します。
以下のようなウォーターフォール型の開発モデルを元に各工程(フェーズ)で行うことを紹介致します。(2.2要件定義~2.6テスト)
2.1基本構想(企画)
基本構想では、どういったシステム・サービスにするか、アイディア出しの段階です。
プロジェクトとしてはまだ成立していない段階のため、もし考えたシステムが収益を上げられないようなものであれば、プロジェクトとして発足しません。
プロジェクトの開始は要件定義からスタートするケースが多いため、SE側ではなくクライアント側で構想を考える場合がほとんどです。
2.2要件定義
要件定義で主にすることは、システムの仕様を決めることです。
クライアントから開発ベンダー(企業または個人)に依頼があり、ベンダー側はシステム要件をヒアリングしてまとめていきます。
成果物の定義が難しいため、クライアントと開発ベンダー側で準委任契約を取ることが多いです。
※準委任契約とは、簡単に言うと作業(時間)に対して、報酬が支払われる契約形態です。
要件定義フェーズに入るとそれ以降の設計~開発・テストまで同じ会社(個人)で請け負うことになるのが一般的です。ただもし想定しているシステムの規模が億単位であれば、クライアント側でいくつかのベンダー(納入者候補)を見つけて、入札を行うこともあります。
要件定義は非常に重要なフェーズであり、要件がしっかり定まっていないことにより、プロジェクトが遅延するリスクは高まります。
2.3基本設計
外部設計とも呼ばれます。
要件定義で決めた仕様を元に、システムを実現するために必要な設計書を主に作ります。
基本設計書はシステムの仕様を記載しているため、クライアントとの折衝が発生したときなどに使われることもあります。
またクライアントにもよりますが、クライアント側で設計書のレビューを行い、クライアントからOKをもらい、詳細設計、開発に進んでいきます。
プロジェクトによって、設計~テスト・納品(リリース)までを、請負契約となることもあれば、仕様変更等でベンダー側にリスクが生じやすい場合、準委任契約となることもあります。
※請負契約とは、簡単に言うと成果物に対して、成果報酬が支払われる契約形態です。
2.4詳細設計
内部設計とも呼ばれます。
詳細設計は、コーディングレベルの記述内容になるため、プロジェクトによっては書かないケースもあります。この場合、コーディングの仕方はプログラマーに任せるということになります。
基本設計にて作成された画面定義書やテーブル定義書をしっかり理解できるプログラマーであれば、なくてもよいかと思います。
私の場合は、エンジニアが実装難しいと感じたり、バッチ(job)などの画面がないためイメージしにくい処理の場合に補足資料として、必要に応じて詳細設計書を用意しています。
2.5開発
設計書に沿って、実際にコーディングを進めていくフェーズです。
規模がそれなりに大きいプロジェクトでは、設計した人とコーディングを担当する人が違うケースはよくあります。
私も設計書をフロントエンドエンジニアとバックエンドエンジニアに渡して、開発を進めてもらうように指示しています。
開発フェーズが、主にプロジェクトの遅延するリスクが高いフェーズなので、プログラマーと蜜にコミュニケーションを取り、問題があれば課題の対処に一緒に取り組みます。
質の高いプログラムを実装するために、機能単位などでコードレビューが開発フェーズで行われます。レビュー者はプログラマー間で行われることが多いです。
必ずしもではないものの、プロジェクトを進行するPLまたはPMもコードレベルで処理内容を把握しておくことは、重要だと思います。
2.6テスト
実装したコードが想定通りに動くかを確認するフェーズです。
テストにも主に単体テスト、結合(機能間)テスト、総合テストがあります。
単体テストは1機能、1画面単位で行い、開発(実装)と並行して行われる場合がほとんどです。
結合テストは機能間テストとも呼ばれ、全ての開発(実装)および単体テストが終わった後に行います。システム要件を把握している人(PLやPM)などがテスト仕様書を作成して、メンバーやテスターが、テストをしてバグがないか確認します。
結合テスト時点で、単体レベルのバグが検出されると、場合によってはクライアントから品質を疑われることもあります。
総合テストは、ユーザーテストなどと呼ばれ、実際に使うユーザーを想定したテストを行います。総合テストを開発ベンダー側で行うこともあります。
また受け入れテストは、基本的にはクライアント側での確認になります。
2.7納品(リリース)
納品はプロジェクトの終わりを指しますが、主に成果物(設計書など)をプロジェクトフォルダに格納したり、クライアント側に提出します。
またクライアント側から指定されたリリース日に、本番環境にコードをデプロイして、システムを公開することも含まれる場合があります。
プロジェクトにもよりケースバイケースではありますが、ユーザーがシステムを触らない夜間に本番リリースされることもあれば、開発環境と本番環境との環境の違いにより、本番環境で正常に動作しないというリスクを避けるために、前もって本番でも動作確認をする場合があります。
2.8保守運用
プロジェクトのライフサイクルは、要件定義~納品までですが、保守運用はシステムがローンチされた後の対応になります。
新規システムが稼働し始めてから、数ヶ月は不安定なため、何か起きたときに対応する必要があります。
クライアント側では当然システムの中身はわからないため、開発ベンダーと保守契約を結び、開発ベンダー側はバグの修正やメンテナンスなどを主に行います。
3.SEに必要なスキル
システムエンジニア(SE)に、必ず必要になってくる3つの能力(スキル)について紹介します。
3.1コミュニケーション能力
コミュニケーションは、SEに限らず、どの仕事でも必要な能力です。
クライアントから要件を正確に聞き出す能力やクライアントに説明したり、説得する能力やプロジェクトメンバーとの日々のコミュニケーション能力も含まれます。
3.2技術的な能力
要件を決める際に、どのプログラミング言語を使うのがよいかや、DBに何を使うか、テーブル構成はどうするかなど多岐にわたります。
また便利な外部の機能はAPI形式で提供されているので、どれをうまく活用するかなどで実装する難易度も変わってきます。
3.3.マネジメント(管理)能力
PLやPMの方には必要な能力になります。
品質管理、コスト管理、スケジュール管理(QCD)の他にもメンバーの管理など様々あります。
PMBoK(第6版)の理解度を問うPMP試験では10の知識エリアがあるように、プロジェクトをマネジメントするのに様々な能力が要求されます。(必ず全て必要という訳ではないです)
4.SEに役立つ資格の紹介
システムエンジニアに関連するいくつかの推奨資格をご紹介します。
ITパスポート
SE未経験の方に非常におすすめです。
私も新人のときに取得しました。
以下の最新版の本一冊あれば、対策としては十分です。
基本情報技術者試験
ITパスポートに合格したら、次に受けるといいかと思います。
午後の問題には、プログラミングの知識も多少必要になるため、科目の選択ミスをしないように注意して、自分の得意な科目を選択すると良いです。
過去問は絶対に数年分は解いておくことをおすすめします。
応用情報技術者試験
基本情報と内容はほぼ同じです。
基本情報がパスできた人であれば、午前問題はそこまで大変ではなかったと思います。
私も受けましたが、午後問題の選択をミスって落ちました。
後、注意ですが、何のためにこういった資格を受験するかを一度考えて頂ければと思います。
試験を対策するのにも、勉強時間をしっかり確保しなければならないため、昇給やキャリアップにつながる、会社が支援してくれる、とかでないなら私は受けない方がいいと思います。
私の場合は、SEとしての全般的な知識を習得することもありましたが、前勤めていた会社が試験料や合格した場合に報酬を出すといった支援もあったため、受ける気になりました。(間接的に評価にもかかわっていた気がします)
その他のベンダー資格
JavaやOracle DB、Linux、AWSなどの様々な試験がありますが、上記のIPAの試験と違って試験料が高いです。なので個人で受けるには、財布事情にもよりますが厳しいです。
試験対策の勉強をしても実務レベルで直接すぐ役立つとは言い難いので、ベンダー資格を取得して、何らかのベネフィットが残るかを検討した上で受けるのがよいかと思います。
ベネフィットがないなら、Hand-on形式の実践的なオンライン講座などを受講した方が、役立つ可能性が高いです。
5.システムエンジニアの年収
私の場合、大学院卒で初年度(新人)は300万弱くらいでした。
おそらく新入社員の給料はどこの企業でもそこまで大きく変わらないと思います。
3年目くらいまでは自動的に年収は上がっていき、3年目で400万弱くらいでした。
ただ残業代にもより変わってきますが、もっと残業していた人はこれより多いと思います。プロジェクトにより波はありましたが、10時間前後くらいで、多くても20時間くらいでした。
前の会社では昇格試験があり、試験内容としては小論文と面接がありました。
こういった試験や制度があるかは、勤め先の会社により異なると思います。
試験や制度を設けているのはしっかりした人事制度が取られているとも考えられますが、客観的に見るとちょっと厳しかったと思います。
昇給後は、450万弱くらいでした。(残業代も含みます。)
3年目以降は、年々ちょっとずつ上がる訳ではなかったので、2~3年ごとの昇格試験に受からないと給与が上がらないという仕組みだったため、新卒1年目以降はあまり参考にならないかもしれません。
GEEK JOBでは無料かつオンラインでプログラミングを勉強でき、就職サポートもありため、20代未経験からシステムエンジニアに転職したい方はまず無料カウンセリングを受けてみるとよいでしょう。
まとめ
システムエンジニアの仕事内容や必要なスキル、関連資格について紹介致していきました。システムエンジニアには、インフラ(サーバーサイド)やDB関連、セキュリティ、プロジェクト管理などの幅広い知識が必要になります。
プロジェクトによっては、大変なものもありますが、やりがいはある仕事だと思います。
これからシステムエンジニアを目指される方にとって、この記事が少しでもお役に立てれば幸いです。