🦅

【自分って何エンジニア?】3年目エンジニアが知っておきたい、スキルの位置付け

2024/04/21に公開

こんな人に読んでほしい

新卒でWebアプリシステムエンジニアになって3年目!
そろそろ他の技術とか身につけてみたいし、収入もアップしたいし、転職活動してみようかな。
Web API の開発経験」?
サーバーサイドとの協業経験」?
あれ?求人を見ても何を書いているのかわからないぞ、、、

はじめに

エンジニアを数年やってても、意外と上で書いたみたいな人はいるんですよね。
小規模チームで自社プロダクトに携わってきた人や、そもそも WEB 系ではない会社で WEB プロダクトを開発してきた人などなど。

僕がエンジニアを初めて3年目だった頃もそんな感じでした。
業務では React や Python、Cloud Functions 等を扱っており、開発自体はちゃんとできていました。
しかし、自分がやっている業務や持っているスキルが、エンジニアとしてどんなポジションなのかを知りませんでした。
そのため、他企業のエンジニアから、
「バックエンドの API で POST しか使ってないのなんとかしたい」
「最近インフラばかりやってる」
などと言われても、何を言っているのかさっぱりわからなかったのです。

いくつか案件に携わってから、
「自分が作っているこれが API だったのか」
「自分はフロントエンドエンジニアであり、バックエンドエンジニアでもあるのか」
「サーバーサイドエンジニアでもあるのか」
などなど理解しました。

この記事では、そんな僕が初級エンジニアの頃に知りたかった、技術スキルの位置付けについてまとめました。

下図のような目論見です。

ここで保身に走っておきます
初級エンジニア向けの解説なので、厳密性と引き換えにシンプルでわかりやすい説明を重視しています。
厳密な説明はキーワードでググればいくらでも出てきますので、そういった記事にお任せします。
ご容赦ください。

アプリケーションの構成

アプリケーションの構成を知ることで、自分がどの部分を開発できるのかがわかります。
そして、構成要素それぞれにエンジニアがいます
それでは、その構成要素を見ていきましょう。
アプリケーションは大きく3つの要素からなります。

1. フロントエンド(ユーザーが見る部分)

簡単に言えば、"画面" です。
ユーザーが実際に目にするすべてです。

クライアントサイドとも言いますが、ここではフロントエンドという名称で統一します。

フロントエンドでいかつい実装をすると、ユーザーが PC やスマホでアプリを開いた時に、本体がめちゃくちゃ熱くなったりします。
ユーザーが PC の電源を落としたら実行が停止します。

React, Vue.js が代表的なフロントエンドの技術です。
よくいう HTML, CSS, jQuery もフロントエンドです。

なので、あなたがこれらのうちどれかを書けるならば、あなたは「フロントエンドエンジニア」と言えるわけです。

2. バックエンド(裏側で働く部分)

簡単に言えば、"機能" です。
ユーザーからは見えない、データ管理やAPI、バッチ処理などを担当する部分です。

サーバーサイドとも言いますが、ここではバックエンドという名称で統一します。

一般的にバックエンドでは、フロントエンドの欲しがるデータを DB から引っ張ってきて、json 形式にした状態で返す API を開発します。

バックエンドでどれほどいかつい実装をしても、ユーザーの PC が熱くなったりはしません。
その代わり、サーバーがダウンしてシステムが停止したりします。
ユーザーが PC の電源を落としても関係ありません。世界のどこかでサーバーは動き続けます。

Python, Node.js, Java が代表的なバックエンドの技術です。
よくいう PHP もバックエンドです。

なので、あなたがこれらのうちどれかを書けるならば、あなたは「バックエンドエンジニア」と言えるわけです。

3. インフラ(アプリを支える基盤)

簡単に言えば、"環境" です。
アプリケーションを実際に利用できるように配置する場所です。
フロントエンドもバックエンドも、ここに配置することで初めて世界中のユーザーが利用可能となるわけです。
データベースセキュリティネットワークサーバー等がこのインフラに含まれることが多いです。

ざっくりいうと、
フロントエンドとバックエンドのエンジニアが PC 内(ローカル)で色々開発し、
「はい、これがソースコードだよ」とインフラエンジニアへ渡せば、
あとは諸々うまくやってくれて全世界ネットワークへ公開される。
というのがインフラのイメージです。

AWS, GCP, Azure が代表的なインフラのクラウドサービスです。
また、クラウドサービス以外にも、自社でサーバーを保有するケースもあり、これをオンプレミスと言います。
なので、あなたがこれらのうちどれかを扱えるならば、あなたは「インフラエンジニア」と言えるわけです。

ちなみに、オンプレミスとしてサーバーの機械を用意するのは非常にコストがかかります
また、予想以上のアクセスが来た場合に機械を追加したり、調子が悪いのでメンテナンスしたりと、オンプレミスはかなり運用コストもかかるのです。
こういう背景もあり、現在はクラウドサービスを使う例が圧倒的に多く、オンプレミスは伝統的というイメージがあります。
求人では、オンプレミスを扱うインフラエンジニアと区別するために、クラウドサービスを扱うインフラエンジニアは「クラウドエンジニア」なんて書かれたりもします。

その他

ここまでは、アプリケーションの構成要素という観点で、エンジニアを3つに分けました。
ここからは、エンジニアのスキルの概観を理解する上で知っておくと良いものや、求人によく載っているものをまとめます。

フルスタック

フロントエンドとバックエンドの両方が扱えるエンジニアを「フルスタックエンジニア」といいます。
つまり、React と Python が書ける人はフルスタックエンジニアなわけです。
また、フロントエンドとバックエンドを一気通貫で開発できてしまうフルスタックなフレームワークも存在します。
Next.js, Nuxt.js, Django, Flask, Laravel などはフルスタック機能を持つフレームワークです。
なので、あなたがこれらのうちどれかを扱えるならば、あなたは「フルスタックエンジニア」と言えるわけです。

フレームワーク

フレームワークとは、開発でよく使われる機能を一つにまとめた便利パックのことです。
プログラミング言語ではありません。プログラミング言語を使って書かれたものです。
めちゃくちゃざっくり言うと、例えばあなたが Python でログイン機能や DB 連携機能などを自力でゴリゴリ実装してまとめたならば、それはあなたのオリジナルのフレームワークと呼べます。

エンジニアの求人にはよく FW と略されて、
「Flask 実務経験 1年以上」
「Django 実務経験 3年以上」
のような要件が書いてあります。

例えば Flask は Python のフレームワークですが、要は、
「Python 書けても Flask 書けないなら、きみいらないよ」
ということが求人に書かれているわけです。

なので、「この求人のプログラミング言語ならかけるが、このフレームワークは書けない」というものがあれば、言語が書ける時点で他の求人よりも少し難易度が低いため、そのフレームワークを勉強してしまうというのも一つの手かと思います。

DevOps ツール

もはや「なんとかエンジニア」という話ではないのですが、求人にはよく載っています。
Docker, Terraform, GitHub などがよく載っています。

Docker
簡単に言えば、「アプリケーションを動かすための小さな仮想空間」を作るツールです。
ローカル PC 内でいくつかサーバーを建てたりすることもできます。
例えば API のサーバーと DB サーバーを PC 内で建てて 「DB と通信接続してやりとりする」部分の開発がローカルでできたりします。
要は、なんなら Wi-Fi 切っても開発できちゃうような、誰にも迷惑をかけずに試しまくることができる遊び場(サンドボックス)を手元に用意できます。

Terraform
インフラの設定をコードを書けるツールです。
AWS をブラウザでぽちぽちしなくても、コードなら一度書いてしまえばあとは実行するだけで良いのです。
同じ環境をもう一つ丸ごと用意するのにも役立ちます。
いわゆる IaC (Infrastructure as Code) ツールというやつです。

GitHub
コードをみんなで共有したり、変更箇所をわかりやすく人に伝え、レビューをもらったりするツールです。
これはWebアプリ開発チームならほぼ必ず使っています。

これらは、これまであげてきたものよりは優先度は落ちると思いますが、やはり必須要件として書かれているケースは多いです。
余裕が出てきたら習得してみるのも良いかと思います。

おわりに

求人を見ると、市場の需要がわかったり、次に自分が仕入れると良さそうなスキルセットがわかったりするのでおすすめです。
実際に手を動かして体験するのが一番理解の助けになると思うので、次は「とりあえず一人でアプリケーションを作ってみよう」な記事でも書いてみようかと思います。

Discussion