世の中には非常に多様な技術に関わる職種があるが、その中でも情報システムに関わる技術職を指して「システムエンジニア」と呼ぶことが多い。そのシステムエンジニアの中にも様々な区分がある。この記事ではそれぞれを大まかに分けて紹介する。
システムエンジニアとは?
ものづくりをするにあたっては「何をどのようにして作り上げてゆくか」をあらかじめ決めたうえで作る必要がある。例えば家を作るときは、何階建てで、どのような間取りで、内装のデザインや設備をどこに配置するかなどを決めたうえで作られる。
これはシステム開発においても同じことだ。どのようなハードウェア構成にするか、フレームワークは何を採用するか、画面や機能の構成、どのようなデザインにするかなどを決めた上で作る必要があり、これらのことを検討してシステム設計を行うのがシステムエンジニア(SE)の役割である。
ひとことで言うと、システムエンジニアはシステムの設計者であり、コーディネーターでもあると言えるだろう。
システムエンジニアの種類
システムエンジニアと言っても、得意とするスキルによっていくつかの種類に分けることができる。そのいくつかを紹介しよう。
業務系システムエンジニア
企業の業務システム構築を得意とするシステムエンジニアは業務系システムエンジニアと呼ばれる。財務会計、人事、営業支援、ワークフローなど企業業務に必要な各部門の業務知識に精通しているシステムエンジニアである。
アプリ系システムエンジニア
iOSやAndroid向けアプリケーションの開発に精通しているエンジニアがアプリ系システムエンジニアだ。各種プラットフォームのノウハウやアプリケーションの実装に関するノウハウを持っているシステムエンジニアである。
インフラ系エンジニア
Webサーバーやデータベースサーバーなど、システムの稼働に必要なインフラ(基盤)側の設計・構築に精通したエンジニアがインフラ系エンジニアである。小規模システムであれば他のシステムエンジニアがインフラ関連の設計も行うこともあるが、規模の大きい開発ではインフラ系エンジニアが少なくとも1人はプロジェクトに参加している。
ブリッジSE
日本でシステム設計を行い、海外の企業にプログラミングを依頼して開発することを「オフショア開発」と言うが、このオフショア開発に必要なのがブリッジSEである。設計したシステム仕様を海外のエンジニアに説明しつつ開発をすすめる橋渡し(ブリッジ)的な存在となるため、このように呼ばれている。
組み込み系システムエンジニア
家電製品やカーナビなど、電化製品の内部に組み込まれるシステム設計を行うのが組み込み系システムエンジニアだ。近年はモノのインターネットと言われる「IoT(Internet of Things)」の広がりにより、組み込み系システムエンジニアの需要は広まりつつある。
システムエンジニアに必要なスキル
システムエンジニアに必要とされるスキルは幅が広い。そのうち、システムエンジニアとして基本的に必要とされるスキルをいくつか紹介しよう。
論理的思考力・表現力
システムやアプリケーションの設計の際には、当然のことながら設計書を作成する必要がある。設計書は特定のスキルを持つものにだけ理解できるような内容ではなく、開発に携わるエンジニアが理解できるように記述する必要がある。そのため、物事を的確に読み取る思考力や、他のエンジニアに仕様を説明するための表現力は必須のスキルであると言えるだろう。
スケジュール・マネジメント能力
システム開発のスケジュールの検討もシステムエンジニアの役割のひとつだ。システム開発の各工程や機能単位での作成スケジュールの立案や、スケジュールを円滑に進めるためにはどの時期に何人のエンジニアが必要かといったことも検討する必要がある。また、システム開発中には実際にどの程度開発が進んでいるのかを把握して進捗管理する必要があるため、マネジメントスキルも求められる。
コミュニケーション能力
システムエンジニアはユーザーとの折衝、他のエンジニアへの仕様説明、システム開発に携わる他企業との連携といったシーンにおいて人と接する機会が多いため、コミュニケーション能力が必要とされている。
システム開発に携わっている他のエンジニアやユーザーとのコミュニケーションが不足するとシステム開発の進行に大きな支障をきたすことになるし、実際そうなってダメになった開発案件も多く存在しているので気を付ける必要がある。
検証能力
開発された機能が問題なく動作するために、どのような検証(テスト)を実施すれば性能を保証できるかを検討・実施するのもシステムエンジニアの役割のひとつだ。開発されたそれぞれ個別の機能の評価だけではなく、各機能を連携させた上でどのように検証すれば良いかなど、システムやアプリケーションのあらゆる利用シーンを想定したうえで総合的に検証する必要がある。
システムエンジニアとプログラマーの違い
システムエンジニアとプログラマーは密接に関係しながらシステム開発が進められるが、それぞれの役割にはどのような違いがあるのだろうか。
それぞれの役割の違いについて、それぞれが主に担当する工程別に説明してみよう。
システムエンジニアの仕事内容
要件定義
ユーザーがどのようなシステムを構築したいのかをヒアリングし、要件定義書と呼ばれる設計書を作成する。実際にはシステムの営業担当とシステムエンジニアが同行してユーザーからヒアリングを行いつつ作成されることが多い。
作成した要件定義書はシステムエンジニアからユーザーに説明を行い、ユーザーから承認されることで実際の設計に着手することができる。
基本設計
サーバーやネットワーク、データベースなどシステムに必要な内容の検討・構成を行い、基本設計書と呼ばれる設計書を作成する。
規模の大きいプロジェクトであればハードウェアやネットワークのスキルに精通しているエンジニアが加わって設計を進めるが、小規模プロジェクトの場合はそれまでの開発事例などを参考にしながら数名のシステムエンジニアのみで設計を行うケースが多い。
詳細設計
システムを構成する画面や機能について具体的な設計を行い、詳細設計書と呼ばれる設計書を作成する。
ここで作成した詳細設計書はプログラムの仕様となるため、プログラマーが理解できるように論理的に、かつ、読みやすい内容で作成する必要がある。
画面のデザインについてもシステムエンジニアが作成するが、Webアプリケーションの場合はデザイナーと連携を取りながら作成するケースが多い。
各種テスト仕様書の作成
プログラマーが作成した各プログラムを連携させたうえで動作確認をすることを結合テストと言うが、結合テストでどのようなテストを行えば性能を保証できるかを検討し、テスト仕様書を作成する。
その他、実際のハードウェアやネットワーク構成を意識したうえでのシステムテストの仕様書を作成するのもシステムエンジニアの役割のひとつだ。
プログラマーの仕事内容
プログラミング
システムエンジニアが作成した詳細設計書をベースにプログラミングを行う。プログラミングには詳細設計書だけでなく基本設計書も同時に参照しながら行われることが多い。システムエンジニアが作成した詳細設計書に仕様の誤りがある場合はシステムエンジニアに指摘し、修正してもらった上でプログラミングする必要がある。
動作確認・テスト実施
作成したプログラムが詳細設計書の仕様通りの動作を行うことができるか、動作確認を実施するのもプログラマーの役割である。単体テスト仕様書と呼ばれるテスト仕様書を作成し、プログラム単体での動作確認を行うケースが多い。
なお、単体テスト仕様書は本来システムエンジニアが作成するものであるが、プログラマーが動作検証の前に作成するケースが圧倒的に多いのが現状だ。
※ここではシステムエンジニアの仕事とプログラマーの仕事を分けて紹介しているが、もちろん両方の仕事をこなせる優秀なエンジニアの人もおり、フルスタックエンジニアと呼ばれることが多い。
システムだけでなく人と接する機会が多い
システムエンジニアはコンピュータで黙々と作業している職業という印象が一般的だが、実際にはシステム開発を依頼してきたユーザーとの折衝、他のシステムエンジニアとの連携、プログラマーへの説明など、人と接している時間が非常に多い。
業務開始から定時まではユーザーや他のエンジニアとの打ち合わせの業務を行い、定時が過ぎてから設計書や資料の作成を行っているというシステムエンジニアは多く存在する。
システム開発に携わる各方面とのコミュニケーションを密接に行いつつ、システムの設計も同時に行わなければいけない。業務としては激務になることは多いが、システムがリリースされたときの充足感は計り知れない。その充足感を味わうために、長年システムエンジニアを続けているエンジニアも多い。
まとめ
今回は情報システムに関わるエンジニアを中心に紹介した。なお、情報システムに関わる職種以外にも多数のエンジニア職業がありそれらについてはまた次の機会に説明いたします。
Pro Engineer
未経験から正社員のITエンジニアとして働きたい方向けの
無料カリキュラムを行っている会社さんになるので親身に話を聞いてくださるので
お話だけでも聞いてみるといいかもしれません。