エンジニア基礎知識

ITエンジニアにはどのような職種があるのか

「未経験からエンジニアになりたい!」とはいっても、ITエンジニアにも様々な職種があります。

日本のITエンジニアは大別すると、以下の7種類の職種に分かれます。

  • サーバーサイドエンジニア
  • フロントサイドエンジニア
  • アプリエンジニア
  • インフラエンジニア
  • セキュリティエンジニア
  • 機械学習エンジニア
  • 組み込みエンジニア

本記事で、これらの職種について具体的に説明していきましょう。

サーバーサイドエンジニア

サーバー側で行う処理に対して責任を持ち、データベースとの通信や各種ファイルの取り扱い、バッチ(一括計算)処理などのプログラムの設計・実装を行うエンジニアを指します。

基本的にデータベースの設計も行う場合が多いですが、大規模な開発では、データベースの設計を行う人(データベースエンジニア)と分かれている場合もあります。

一昔前までは、次に説明するフロントエンドエンジニアの職域を兼任するケースがよく見られましたが、最近ではフロントエンドで行うべき処理が複雑化したため、ある程度以上の企業では分業されることが多くなってきています。

反対に、スタートアップや中小企業など開発人員が不足している場合ではまだまだフロントエンドと兼任するケースが多いです。(この場合はフルスタックエンジニア、とも呼ばれることがあります。)

言語としては一番選択肢が多く、Java,Ruby,Python,JavaScript(Node.js),Scala,Goなど多岐にわたります。

バックエンドエンジニア、もほぼ同じ意味で用いられます。

フロントサイドエンジニア

フロントサイドエンジニアは、Webアプリケーションの見た目や動きを整え、ユーザー体験を最適化する役割を持ちます

Webアプリケーション全体の色合いやレイアウトなどの設計は専門のデザイナーがこなす場合もありますが、フロントサイドエンジニアが行う場合も多いので、この職種を目指す人はデザインに関しても最低限以上の知識をインプットしておいたほうが良いでしょう。

使用する言語としては、マークアップ言語としてのHTML,CSS、及びプログラミング言語としてJavaScriptが必要となります。

JavaScriptはオープンソース・コミュニティの活動が最も活発な言語の一つであり、使用されるツールやフレームワークが毎日のように変化していくので、この職種に就いたあとも技術情報のウォッチや最新技術のキャッチアップは必須です。

フロントエンドエンジニアなども大体同じ職域を指す意味で用いられます。

アプリエンジニア

iPhoneアプリやAndroidアプリなど、各種モバイルプラットフォームに最適化されたアプリケーション(ネイティブアプリ)を開発するのが役割です。

Webアプリケーションのフロントエンドでは実現できないような機能でも、ネイティブアプリでは実現できることがあります。

最近では少なくなってきましたが、PC用のアプリケーション開発などもこの職域に含まれます。

iOSアプリを開発するときにはSwift,Androidアプリを開発する場合にはKotlinが現在の選択肢となりますが、一世代前のObjective-CJavaなどの仕事もあります。

iOS、Android両方で違う言語を習得する必要があるため学習コストが高く、小規模開発では「Webアプリケーションに特化」してアプリを開発しない、あるいはアプリに特化してWebのフロントエンドを作らない、などといった選択が取られます。

インフラエンジニア

アプリケーションがきちんとユーザーに届けられるように、サーバー環境の整備、アプリケーションが動くミドルウェアの選定、本番環境での障害対応をすることがインフラエンジニアの役割です。

サーバーサイドエンジニアやフロントサイドエンジニアが効率的に開発できる環境を作るために、社内の自動テストの環境や、開発環境の改善・高速化などをすることも職域に含まれます。

サーバーとして利用するLinuxに関する基礎知識だけでなく、Amazon Web Service(AWS)やGoogle Cloud Platform(GCP)などクラウド方面の知識が求められます。

自分のチームの作業効率化のためにシェルスクリプトや、並行処理が得意なGo、ライブラリが豊富なpythonなどで自動化ツールを組むことがあります。

規模の小さい開発では、サーバーサイドエンジニアが兼任するケースが多いです。

セキュリティエンジニア

ユーザーから取得した顧客情報を適切に保護・管理する仕組みを構築するのが、セキュリティエンジニアに求められる役割です。

顧客情報の流出を防ぐためにはWebアプリケーションの脆弱性や典型的な攻撃パターンといった技術的な知識だけでなく、企業の中でのチームの情報閲覧権限の管理やデータの運用方法まで考慮して体制をつくる必要があるため、横断的な知識が求められます。

情報が適切に保護されているかどうかは、上場審査の項目にも含まれてきますので、これから上場を目指すスタートアップにも必要な存在です。

機械学習エンジニア

「データサイエンティスト」とも呼ばれる職種です。

大量に蓄積されたユーザーの購買データ、行動データなどをディープラーニングなどの数学的手法を用いて解析・可視化し、具体的な施策につながる重要な示唆を見つけ出すことが仕事です。

数学的な知識のほか、大量データを処理することになるのでアルゴリズムの理解も求められます。機械学習・ディープラーニングは近年注目されている技術の一つですが、まだ使いこなせる人は少なく、そのため市場価値が高騰する傾向にあります。

最近では、Google Cloud Platformなどを用いてクラウド上で機械学習を行うこともできるため、クラウド関連の機械学習サービスをどれだけ活用できるか、というのも重要なスキルの一つとなってきています。

言語としては主にPythonが用いられますが、より高速な処理を行う場合はC++などを利用することもあります。

組み込み(IoT)エンジニア

近年、IoT(Internet of Things)といった技術が発展し、再注目を浴びている職種です。日常生活で使われる電化製品からデータを収集するような仕組みを実装したり、電化製品に対してサーバー側から何らかの通信を送ったりします。

また、小型のハードウェアでは搭載できるメモリ量が少ないため、有限の計算資源をどう有効に活用するかの知見が求められることもあります。

言語はC,C++,Javaなどを使用することが多いですが、Raspberry Piの発展により、PythonRubyなどでもハードウェアを動作させることができるようになっています。

通信構成としてインターネットを介するので、サーバーサイドエンジニアとのチームワークは必須といえます。

現実には、これらの職種を兼任することも多い

ここまで大まかに7種の職種に分けて、エンジニアの仕事内容に関して説明をしてきました。

各項目でも「小規模な開発では〇〇と兼任することが多いです」と書かれている部分が多いように感じたかと思いますが、現実問題として人手不足などの要因で、このような枠組みにとらわれずに横断的に仕事をするケースも多々あります。(そもそもこの区切りがモレなくダブリなく区切れていない、という批判もあると思います)

自分のやりたいメインの軸をどこに置き、職務領域をどこまで広げることを目指すのか?を自分の頭で考えることは極めて重要です。

例えば転職市場でも、専門性を持ちつつ幅広く対応できる人材というのは高く評価されます。このような人材はエンジニアに限らず、いつも転職市場に不足している人材です。

柔軟性を持ちつつ、自分の志向にあった職種を選択しよう

先程の段落での述べましたが、ITの職種は厳密に決まっているものではなくだいたいこんなもんがあるよね、程度の認識で理解していただけると幸いです。

自身のキャリアを狭めすぎず、しかしキャリアの芯はしっかりもってIT業界に飛び込むと、多分良い結果が待っているのではないでしょうか。