一口に システムエンジニア(SE) と言っても、エンジニアには分野というものが存在します。そもそもプログラマと SE の違いですら曖昧なものなのですが、結論としては、ほとんどの SE がプログラマを兼任しています。プログラマは文字通りプログラミングを専門としますが、SE はプログラミングに加えてシステムの要件を整理したり、クライアントやチームに仕様[1] … Continue readingを共通のもとするため仕様書を作成します[2]仕様書を作成する工程を設計という。そして、作成された仕様書をもとにプログラマがプログラミングをするのですが、よほどの大規模システムでもない限り、プログラマがその間にぼーーーーっとしてることはありません。往々にして、設計も兼任します。そもそも SE も設計を専門とするはずですが、単純に人材不足などによって設計後はプログラミングも行います。そのようにして両者の定義が曖昧になってきたのが実態です。
本当の意味でプログラマと言えるのは、オフショアやニアショア[3]おおよそ製造工程のみをまるごと外注し、外注先が海外だとオフショア、国内だとニアショアと呼ぶでプログラミングを専門とする、いち担当者でしょう。(それ以外で会ったことありません)
さて、そんな SE の分類について説明したいのですが、厳密には非常に多くの種類があり、また今後も増え続けるので、詳細は「システムエンジニア 種類」などで検索してみてください。ここでは特に使用頻度の高い用語のみ紹介し、今後の需要なども考えていきたいと思います。尚、ディレクタ、プロジェクトマネージャ(PM)、プロジェクトリーダ(PL)は概ね役割を表すためここでは取り扱いません。
説明する対象は以下の通りです。
- Web デザイナ
- フロントサイドエンジニア
- サーバサイドエンジニア
- インフラエンジニア
説明に入る前にそれぞれの領域についてイメージしやすいように、シンプルなシステム構成図を使って簡単に説明します。
上記は Web システムで代表的な技術を記載しています。それぞれの分担は以下の通りになります。
- Web デザイナ:緑字(HTML、CSS)
- フロントサイドエンジニア:白字(JavaScript)
- サーバサイドエンジニア:青字(PHP)
- インフラエンジニア:(AWS、EC2、Nginx、MySQL)
上から順に利用者に近い領域ことがわかりますね。上記をイメージしたうえで、それぞれ詳しく見ていきます。
Web デザイナ
システムの外観(画面)を設計します。Adobe XD などのツールを駆使して外観のプロトタイプを作成して発注元に確認し、デザインが確定[4]デザインに限らず、発注元から承認されることを仕様 Fix などという言葉を使うしたら、それを HTML とCSS を使って実装します。
発注元に確認する段階で HTML, CSS を使うこともありますが、それはすでに運用されているシステムがあって、画面を追加・改修するケースであればその方がイメージがつきやすいという背景があります。
尚、通常のホームページ[5]ホームページをコーポレイトサイトとも言うが、同じものと考えて良いのように、情報を掲載するだけであれば、後述のエンジニアは必要なくWeb デザイナで完結します。Web デザイナが実装するプログラムはブラウザ上で完結すると覚えておいてください。
フロントサイドエンジニア
紹介しておいてアレですが、フロントサイドエンジニアを名乗る人には会ったことありません。どこかで詳しく触れる機会を設けたいと思うのですが、これは JavaScript (というブラウザ駆動のプログラミング言語)が台頭してきた 2010年代から使われ始めた言葉です。Web デザイナとの違いは、同じ画面でありながら、ユーザの操作によって動的に画面を切り替えたり、サーバと通信を行う部分を実装します。
かつて、ほとんどのシステムではクライアント(画面)とサーバ(クライアントの要求に応じ処理を実行)で同じ言語を利用しており、同じエンジニアが担当していました。それが JavaScript が台頭することによりクライアントが JavaScript 、サーバが PHP 、といった言語の分担が始まります。そして JavaScript にもリッチなフレームワーク(React, Vue など)が誕生するとサーバエンジニアが兼任するには負担が大きくなります。また、クライアントの機能が豊富になるにつれて、サーバレスアーキテクチャというものが誕生します。つまり、サーバなしでシステムが構築可能となったのです。
以上のことから、フロントサイドエンジニアとはクライアントのリッチな機能を駆使してシステムを構築する人を表しますが、最初にも触れた通り、フロントを専門とするにはまだまだ需要が少ない傾向にあります。サーバレスアーキテクチャについても日々変化し続けるクライアントの要求にすべて耐えられるほどの堅牢さには至っていません。従って、後述のサーバサイドエンジニアがフロントサイドを兼任しているのが実態です。但し、今後若い方を中心にフロントサイドを専門とする方は増えるでしょうし、モダンな開発現場ではすでに明確な分業が始まっています。
サーバサイドエンジニア
フロントサイドエンジニアがサーバサイドエンジニアの対義語として現れた言葉だとしたら、サーバサイドエンジニアは SE そのものを表す言葉です。というより SE というと、慣習的にサーバサイドエンジニアを指しているからです。例えば、プログラミングの初歩としてフロントサイド(=クライアント)を学んだ人は少ないことでしょう。はじめは Java, PHP といったサーバサイドに強い言語を習得し、同じ言語でクライアントも構築し、痒いところに手が届かない場合に JavaScript で実装するという道を多く人が辿ったのではないでしょうか。例え、はじめにフロントサイドを学習したとしても実際の業務でフロントサイドに専任できた人はそういないはずです。システムにもよりますが、システム全体の大半はサーバロジックで構築されているため、サーバが実装できれば対応せざるを得ません。
改めましてサーバサイドエンジニアの定義ですが、クライアントにより要求されるリクエストに対し、適切なデータ処理を行うサーバを構築するエンジニアとなります。サーバはデータベースへの問合せやデータの登録処理などを一手に引き受けます。ここにバグがあると、誤ったデータを更新したり、悪意のある第三者によって情報を搾取されてしまいます。サーバはシステムの心臓に相当します。
インフラエンジニア
ハードウェア、ミドルウェアを担当するエンジニアの総称ですが、その内容は多岐にわたります。
ハードウェアとは物理マシンのセットアップ、マシン同士のネットワークのセットアップを表しますが、昨今では仮想技術が発達し、仮想上のマシンやネットワークの構築もスコープとなります。また、ミドルウェアとはソフトウェアの対義語で、ソフトウェア(つまり上記 3エンジニアの担当領域)に該当しないものは、ハードウェアを除き、すべてミドルウェアに該当します。データベースも Web サーバも開発に必要な Git などもミドルウェアに該当します。また、セキュリティ要件を検討し、対応するのも根本的にはインフラエンジニアが対応します。プログラムではセキュリティの対策に限界があるためです。
直近ではオンプレ[6] … Continue readingからクラウドにシステムを載せ替えるケースが増えておりますが、ここでもインフラエンジニアがはじめに登場します。クラウドの構築に特化したエンジニアはクラウドエンジニアなどと呼称されることもあるようです。
それじゃどれになろうかな
非常に大雑把な分類ですが、各項目(特に後者2つ)は更に細かい分類があります。ただ、どのエンジニアも上記のどれかには必ず該当します。今回は Web システム[7]ブラウザで利用するシステムを Web システム、単に Web と呼ばれることもある。ほかに PC … Continue readingをベースに話をしましたが、組込みやアプリケーションでも役割を突き詰めれば同じ分類となるでしょう。
例えばこれからエンジニアになろう、という人で上記のうち、どれかを選ぶとしたら、基準として自分の特性を考慮することが望ましいでしょう。例えば、
- Web デザイナの仕事にはゴールというものがありません。強いて言えば発注元の、ひいては利用者の満足度がゴールです。但し、他人のニーズとは決して視覚化できるものではなく、最終的にはニーズにマッチするセンス(あまり好きな言葉ではありませんが)が必要になるでしょう。
また、Web デザイナの仕事はプロジェクトの最初期で終了することが多く(デザインが確定したら以降はエンジニアのタスクとなる)、いずれも規模が小さいため、細かいプロジェクトをいくつも兼任することになるでしょう。また、見た目に関わるため、顧客の反応がそのままモチベーションに繋がります。また、昨今 UI/UX といった言葉が当然のように飛び交っていますが、ユーザ経験にダイレクトに携わる Web デザイナの需要がなくなることはないでしょう。 - フロントサイドエンジニアの業務はモダンなシステム開発に限られるため、需要がまだ比較的少ない傾向にあるようです。但し、対応できるエンジニアも少ないうえ、今後需要が伸びることを考えるとより人手不足となるでしょう。フロントサイドは技術的に難易度が高く、一度習得しても刷新が頻繁に要求される傾向にあります。実際に JavaScript の 3大モダンフレームワークと呼ばれる、React, Vue, Angular は毎年大きくアップデートされ、後方互換性を担保しないケース(=以前使えたものが使えなくなる)もザラです。日頃からそれらに順応する姿勢が必要となるでしょう。
- サーバサイドエンジニアはもう何年もエンジニアシェア No.1 の座に君臨しています。専門性が最も低いエンジニアである反面、上記にもある通り、ほかの役割を兼任することがしばしばあります。筆者も実際ここにある役割すべてを兼任した経験があります。要するにシステムの工程すべてに関わるため、ある程度の経験があればこなせてしまうもので、IT 業界のゼネラリストと言っても反対意見は少ないでしょう。ひとつの分野を極めることができなくても、一定の範囲で及第点を取る技術力があれば許される立場です。仕事を選ばなければ食いっぱぐれはないと思ってよいでしょう。
- インフラエンジニアはクラウドの出現により一気に需要が伸びました。詳しくは触れませんが、クラウドはオンプレと違って一度構築したらあとはしばらく放置、というものではなく、クラウド上のインフラやミドルウェアの取り扱いはダイレクトに売上に影響するためです。また、Docker などの仮想化技術が急速に普及したことにより、インフラエンジニアの需要は増すばかりです。さらにはクラウド、仮想化、IaC、CI/CD、DevOps といったシステム開発で話題の技術はほとんどインフラの管轄です。
業務の特性としてはシステムに関わるすべてのソフトウェアやミドルウェアを把握しセットアップする必要があるため、IT の幅広い知見が必要です。ただ、重要な反面、作業が地味にみえてしまう(目に見えてわかりづらい)ので、コツコツ何かをすることが好きな人は向いているかと思います。需要は当面尽きることはないでしょう。
上記の通り、どの分野を目指そうと SE の需要はなくならないというのが現状でしょう。もしどれにしようか悩むなら、サーバサイドエンジニアにしましょう。死角が少ないのと、ほかの分野へ鞍替えしたくなっても比較的楽だからです。
まあ、どんな形であれ、面白いものですけどね。
脚注
↑1 | 仕様:予め定義されている、システムのあるべき振る舞い。顧客が仕様を明らかにしなかったことに対する作り手の抵抗文句として「それは仕様です」が有名 |
---|---|
↑2 | 仕様書を作成する工程を設計という |
↑3 | おおよそ製造工程のみをまるごと外注し、外注先が海外だとオフショア、国内だとニアショアと呼ぶ |
↑4 | デザインに限らず、発注元から承認されることを仕様 Fix などという言葉を使う |
↑5 | ホームページをコーポレイトサイトとも言うが、同じものと考えて良い |
↑6 | 企業がシステムに利用するマシンを保有することをオンプレミス、略してオンプレと呼ぶ。クラウドが台頭することにより、クラウドがマシンを特定せず稼働することから、その対義語として生まれた |
↑7 | ブラウザで利用するシステムを Web システム、単に Web と呼ばれることもある。ほかに PC にインストールすることで利用するシステムはアプリケーション、単にアプリ、或いはネイティブと呼ばれる。車載や家電で動作するシステムは組込みと呼ばれる |