
ここ数年で企業のDX機運が高まり、新規事業の立ち上げから既存事業のデジタル化まで、社内で様々なプロジェクトが立ち上がっている会社も多いのではないでしょうか。それに合わせて、ますます重要になってくるのが「エンジニア採用」だと言えます。 しかし、採用担当者にとってはエンジニアリングの世界は特殊だとの認識が強く、なかなかエンジニアについての理解が深まらない、という悩み・課題を多く耳にします。
そこでQiita Jobsでは、2021年5月12日に「採用担当に知って欲しいエンジニアリングの知識」というタイトルでセミナーを実施しました。これは、エンジニア採用を行うために知っておくべきエンジニアリングにまつわる知識を、お役立ち資料「採用担当者が押さえておくべきITエンジニアリングの全体像・基礎知識」を元に解説していくというものです。
本記事では、こちらのセミナー内容についてレポートします。エンジニアについての理解に悩まれている採用担当者は、ぜひご覧ください。
登壇者プロフィール

清野 隼史(きよの としふみ)
Increments株式会社 Qiita開発チーム リーダー
アルバイトを経て、2019年にエイチームに入社。Qiita Jobs開発グループでQiita Jobsの開発に携わる。2020年よりQiita プロダクトマネージャーに就任する。趣味はサウナ。
エンジニアリングの構造・言語・業界を知る
清野:まず初めに、そもそもなぜ採用担当者が、エンジニアについて理解をする必要があるのかということについてお話しします。勘違いしてはいけないのが、「コードを書けるようになる」必要はないということ。あくまで、エンジニアリングについての用語理解や知識を身につけることが重要であり、その上で、自社の求めるエンジニア人材を正しく理解し、適切にアプローチすることが大切です。
今回は、以下の3セクション(構造・言語・業界)でお話しをさせていただきます。

Webアプリケーションの構造を知る
ーーではまずは、Webアプリケーションにおける一般的な構造について説明をお願いします。

清野:Webアプリケーションは全体として大きく、「クライアントサイド」と「サーバーサイド」という2つの領域に分かれます。クライアントサイドは別名で「フロントエンド」とも呼ばれる領域で、一言でお伝えすると、ユーザーが情報を受け取る端末側のことです。たとえばネットショッピングで考えた場合、サイトに訪れたユーザーが操作するWebブラウザ等が、クライアントサイドになります。
サーバーサイドは別名で「バックエンド」とも呼ばれる領域で、その名の通り、クライアントサイドからの要求を受けとってサービスを提供する側のことです。同じくネットショッピングで考えた場合、ユーザーのリクエストに応じてデータ処理を行い、検索結果データを返すのがサーバーサイドの動きとなります。
このように、クライアントサイドからのリクエストに対してサーバーサイドがプログラムを実行し、その実行結果をクライアントサイドに戻す(レスポンスする)ことで、私たちはインターネット上で様々な情報を確認できるわけです。
つまり、フロントエンドエンジニアとは主にブラウザ上で見えるような部分を作り込む仕事で、バックエンドエンジニアとは裏側のデータ処理等のレスポンスを戻す部分を作り込む仕事、ということになります。ちなみにWebアプリケーションエンジニアとは、フロントエンドとバックエンドの両方を担うエンジニアです。
--少しレイヤーの違う概念として「フルスタックエンジニア」という職種がありますが、これはどんなエンジニアなのでしょうか?
清野:フルスタック(full-stack)とは、複数の技術分野に精通していることで、フロントエンドやバックエンドという括りの他にも、モバイルアプリやインフラ領域など、様々な領域をカバーするエンジニアを示します。ただし、広い概念であるが故にフルスタックの定義や示す範囲が人によってまちまちであるケースが多いので、「フルスタックエンジニア」を募集したい場合は、求人票にしっかりとその範囲を具体的に明記することが重要です。
プログラミング言語とライブラリ・フレームワークを知る

ーー次は、クライアントサイドおよびサーバーサイド、それぞれでよく使われる主要なプログラミング言語とライブラリ・フレームワークについて説明をお願いします。
清野:プログラミング言語とは、コンピューターへ命令するプログラムを書くための言語のことです。各プログラミング言語の文法に従って記述されたファイルを「ソースコード」や「ソースプログラム」と呼び、メジャーなものからマイナーなものまでを合わせると200種類以上あります。
次にライブラリとは、汎用性の高い機能など、プログラムの一部を取り出してまとめたものです。ライブラリ単体ではプログラムとして作動するものではなく、他のプログラムに機能を提供する役割を担うコードの集まりとなります。使用するプログラミング言語によって、使用するライブラリも変わってきます。
最後にフレームワークとは、開発の土台となるものです。開発物の骨格を定義し、開発に必要なものをまとめた枠組みでもあるといえ、既存の設計を共通で使い回すことができるので、プログラミングが効率的になるという特性があります。
プログラミング言語の選択基準
清野:先述した通り、プログラミング言語には多くの種類があります。その中で、自社サービスではどの言語を使っているのかを知り、なぜその言語を使っているのかを理解することも非常に重要です。プログラミング言語は開発の成否を左右する重要な要素の一つともいえるので、ここを抑えておくことで、求職者に対してより一歩進んだ魅力づけを行うことができます。
ちなみに、プログラミング言語の選択基準としては、以下のような観点があります。
- 開発するWEBアプリケーションの要件、データベースとの接続(信頼性や性能、可読性・拡張性など、何を重要視するか)
- 人気のあるプログラミング言語(コミュニティの活動が盛んで多くの情報交換がされているため、情報収集がしやすい)
- 担当するメンバーのスキルや経験など
--よくエンジニアの世界では「モダンな言語」とか「古い言語」といった表現がされますが、たとえば古いと何がいけないのでしょう?
清野:プログラミング言語というのは、いきなりパッと何かが良くなるという類ではなく、徐々に進化していきます。つまり、古い言語が一概に悪いというわけではないのですが、新しい言語の方が一連の開発で培われた反省が生かされているので、開発しやすいという側面があります。また、人気があればあるほど便利なライブラリもたくさん出てくるため、比較的嬉しい機能が多いなという印象です。
具体的なプログラミング言語、およびライブラリ・フレームワークは、それぞれ以下の通りです。フロントエンドとサーバーサイド、その他の3括りでまとめています。
〈クライアントサイド(フロントエンド)編〉

〈サーバーサイド編〉


〈その他〉

担当領域から職種を知る
ーー次に、担当する領域ごとに職種を分類し、それぞれに求められるスキルについて解説をお願いします。



--SRE(上から4番目)という言葉は、最近よく聞きますね。これはどんな職種なのでしょうか?
清野:SREは、一言でお伝えすると、サービスを運営するにあたっての色々な不測の事態を想定した上で、可能な限り動き続ける仕組みを担保していくような仕事です。仕事の特性上、成果が見えにくいのですが、SREの人がいないと不測の事態の時に何もできなくなってしまうので、縁の下の力持ち的な仕事になります。
--セキュリティエンジニアとはまた違うのでしょうか?
清野:セキュリティエンジニアは、サイバー攻撃や不正アクセスなど、主に外部からの脅威に対するセキュリティに対応するための職種ですね。SREは内側から発生する老朽化や負荷対策などに対応する職種になるので、目的もアプローチも異なります。
--なるほど。ここには12職種ありますが、どの職種が「希少性が高い」などはあるのでしょうか?
清野:WEBアプリケーションエンジニアについては、比較的メジャーで数も多いかなと思っています。機械学習エンジニアも最近は多いですね。逆にAR・VRやブロックチェーンは、まだ比較的少ないですね。技術自体がまだ新しい領域なので、その分人口も少ないなと思います。
ちなみにSREのようなインフラ領域のエンジニアは、プログラミングとはまた異なる専門的な領域になるので、参入障壁は比較的高く、その分人口も少ない印象です。
エンジニアが勤めるIT業界を知る
--エンジニアが関わる各業界の特徴を見ていきたいと思います。大きく分けると、SIer、WEB系、SES、ITベンダー、情報システム部の5つが挙げられますね。

--SESとは、ずばり何でしょうか?SIerと混同しそうになります。
清野:SESは、人手が足りていないプロジェクトにエンジニアを提供するサービスです。SIerは、そもそもの企業ニーズに対してモノを開発して納品するサービスなので、提供形態が違うものになりますね。業務委託に近いイメージです。
--業界的に、この業界からこの業界への転職はギャップがあるよ、などはあるものでしょうか?
清野:スキル的なところはそんなにないかなと思います。結局は開発をしているので。ただし、働き方などの実装スキル部分以外は差分があるとは思いますけどね。そんなに変わらないと思います。
エンジニアからみた、知っておいてほしいエンジニアリングの知識

ーー最後に、エンジニアリングスキルの分類について、解説をお願いします。
清野:エンジニアリングスキルは、大きく分けて以下の3つに分類されるます。
- 実装スキル
- 設計スキル
- マネジメントスキル
実装スキルとは、プログラミングを実際に行ったり、効率よく処理できるようなコードを書くような部分です。設計スキルとは、サービスを運用するにあたってなるべくコストをかけずに持続的に開発を続けるための仕組みづくりをする部分です。そしてマネジメントスキルとは、プロジェクトマネジメント力とも言えるでしょう。各タスクの切り分けや要件定義力、コストの見積もりの正確性が、ここに含まれます。
--この3つの中で、理想的な比率みたいなものはありますか?
清野:基本的に実装スキルはマストかなと思っています。その上で設計スキルは、あったらよりちゃんとエンジニアとして書けるイメージで、マネジメントまでできると開発以外のタスクもお願いできるので、より幅広く活躍できるかなと思います。
--なかなかこの3つを意識できている採用担当者は、多くはない印象です。
清野:エンジニアリング力というと、どうしても実装スキル部分がフォーカスされがちなのですが、実は設計とマネジメントも重要なスキルになりますね。特に採用シーンでは、後者の2つに目がいかないケースが多いことから、入社後に思ったほど活躍できていなかったり、本来は活躍できたはずのエンジニアを見つけることができないといった事態が発生するわけです。
会社によって、この3つのうちどの領域のスキルセットが必要なのかをしっかりと見極め、求人票に反映するべきだと言えるでしょう。
採用シーンのエンジニア訴求力を格段に上げましょう
今回は「採用担当に知って欲しいエンジニアリングの知識」というテーマで、Webアプリケーションの構造からプログラミング言語とライブラリ・フレームワークの具体的な内容、IT業界の俯瞰、そしてエンジニアリングスキルの分類についてお伝えしました。本記事の内容を理解し、その上で自社課題に沿った内容に求人票へ反映することで、採用シーンにおけるエンジニア訴求力を格段に上げることができるでしょう。
Qiita Jobsでは、今回のような採用担当者に役立つオンラインセミナーを定期開催しております。興味のあるものがあればぜひご参加ください。 https://media.jobs.qiita.com/event
取材/文:長岡 武司