ITエンジニアにも色々な職種がありますが、フルスタックエンジニアという職種をご存じでしょうか?
ITエンジニアのキャリアの最終ゴールとして目指す人も多い職種ですが、特定の技術に特化した職種ではないため、具体的な仕事内容をご存じない方も多いと思います。
しかし最終ゴールとして目指す人もいる位に高度な内容を扱うエンジニアであり、近年、需要も伸びてきている職種です。
今回は、そのフルスタックエンジニアについて解説しましょう。
フルスタックエンジニアとは
フルスタックエンジニアとは簡単に言いますと、開発から運用保守までの様々な工程の作業を自分、一人だけで出来るエンジニアのことです。
-
開発から運用保守までの様々な工程の作業を自分、一人で出来るエンジニアのこと
ITエンジニアは要件定義、システム設計をするシステムエンジニア、プログラムを作るプログラマー、ネットワークを設計、構築するネットワークうエンジニア、インフラを構築するインフラエンジニアと役割によって職種が分かれていますが、フルスタックエンジニアはこれらの作業を全て、自分一人だけでできるエンジニアのことです。
別名「マルチエンジニア」とか「万能エンジニア」と呼ばれることもあります。
要件定義、設計、インフラ構築、ネットワーク設計と構築、プログラム作成、テスト、納品、運用保守の全てを自分ひとりだけで出来るのですから、スキルレベルとしては最高レベルであると言って良いでしょう。
フルスタックエンジニアが必要とされる理由
クラウドサービスの導入
近年、コストを抑え、開発スピードも速いクラウドサービスを導入する企業が増えています。
このため、従来であれば多人数が必要であったシステム開発が少人数でもできるようになってきました。
企業側からすれば、少人数での開発は人件費を抑えられるので有利になります。
また多人数ですとマネージメントのコストが多額になりがちですが少人数なら最小限で済みます。
つまり低コストでシステム開発ができるのです。
システム構築の難易度の低下
クラウドサービスの導入により、システム構築作業の難易度が下がってきました。
クラウドサービスでは必要とされる機能が「既製品化」されているために、あらためて開発をする必要がありません。
必要なのは「既製品を扱うスキル」なのです。一見、簡単に見える日付妥当性チェックなども「閏年」を考慮しなければならず、案外に1から作るのは相当な知識とスキルが必要です。
しかしクラウドサービスでは、機能保証された「既製品」が提供されているので、それを扱うスキルさえあれば良い訳です。
難易度の低下は一定以上の品質を確保しつつ少人数での開発を可能としているのです。
理想的には1人で全て出来るのが一番良い
せっかく少人数で出来るなら、1人で全て出来るという人がいれば、最も効率よくシステム構築ができます。
システムに関するノウハウが多人数に分散していると保守運用も難しくなりますが、1人に集中しているのであれば、その人に全てを任せておけばよく、それが最も確実で効率的で安価です。
問題は「その1人」がいなくなってしまった時の代替要員の確保だけでよくなります。
ですので、開発開始から保守運用までを2人で行なえば「どちらか1人がいれば良い」という状況を作り出すことができるので安心であり、1人が退職しても引継ぎの必要がなく安心度は更にアップします。
フルスタックエンジニアの仕事内容
フルスタックエンジニアの仕事は開発・運用・保守ですが、もう少し細かく分類してご説明します。
フロントエンド部
ユーザーが直接、操作する画面の開発、運用保守です。
フロントエンドの開発にはCSS、JavaScriptが用いられることが多いですが、これらの言語はフレームワークを使うことがほとんどですのでフレームワークについての知識も必要となります。
フロントエンド部はシステムの評価に直結する部分ですので、ユーザー視点で構築できる能力も求められます。
バックエンド部
フロントエンドから入ってきたデータを処理し格納するサーバー側の開発と保守運用です。
当然ながらフロントエンド部と密接な関係にある部分ですが開発言語はJava、C++、Pythonなどになります。
- Java
- C++
- Python
データベースへのアクセスが必須ですのでデータべースの設計、構築、操作の知識も必要とされます。
特にデータベースの設計がとても重要です。データベース設計は現在では良いツールが出ているので、それを使えば大丈夫ですが、そのツールを使いこなす技術と知識が必要となります。
バックエンド部はプログラミング言語の習得も必要ですがデータベースの設計スキルの方が、より重要となる部分です。
アプリ部
スマホアプリとWebサイトと連携して動作するWebアプリの2種類がありますが、両者では使用する言語が異なります。
スマホアプリはJava、Kotlin、Swiftで作ること多く、Webアプリは JavaScript、Python、PHPで作ることが多いです。
スマホアプリ | ・Java ・Kotlin ・Swift |
Webアプリ | ・JavaScript ・Python ・PHP |
アプリ部はアプリ専門のエンジニアが作ることが多かったのですが、この部分も自分で作ることが出来ればバックエンド部を知悉した人が作ることになるので、よりよい物が作れるでしょう。
Java、Pythonはバックエンド部で必要とされる言語ですのでフルスタックエンジニアを目指すのであれば必須言語と言えます。ならばアプリ部も担当してしまえば良いのです。
アプリ部の開発は決して難しくはありませんがセンスが要求される部分であり、それはフロントエンド部にも共通するセンスです。
フロントエンド部とアプリ部は「似て非なるもの」ですが共通点が多いので、フルスタックエンジニアを目指すのであればアプリもできるようになっておくべきです。
案外にアプリ開発を通じてユーザー目線の重要さに気付くことも多く「アプリから入る」という習得手順の方が良いケースもあります。
インフラ構築・保守部
サーバーの環境構築、ネットワークの設計と構築をする作業です。本来はインフラエンジニア、ネットワークエンジニアが担当する部分であり専門性の高い部分です。
またハードウェアに関わる部分が大きいので、これまでとは異質の知識が必要となってきます。
ソフトウェアを中心した業務を行ってきたITエンジニアには多分、この部分が最もハードルが高いと感じる部分かと思います。
ですがハードウェアと言っても「基板上の回路まで覚えろ」という訳ではありません。要は「設定の仕方」「扱い方」を知っていればよく、それは本やマニュアルで勉強し実践経験を少し踏めば習得できるものです。
近年はクラウド上でシステムの保守や運用が可能になり、専門のインフラエンジニアでなくてもシステム構築が容易になってきてもいます。
つまり「覚えてしまえばどうってことない」ものであり、最初の一歩を踏み出せるかどうか、だけが問題なのです。
例えば、自分のPCの設定は自分で行っている方が多いでしょう。そしてサーバーもWindowsであれば「基本設定の仕方は自分のPCと同じ」なのです。またネットワークのケーブルも要は「ケーブルを繋ぐ」ということだけなのです。
高く感じるハードルかもしれませんが、実際にやってみれば「何を怖がってたんだろう」と後で不思議に思うでしょう。
ですがネットワークエンジニアには「監視業務」という大変な業務があります。ですので、ネットワークについてだけはネットワークエンジニアを別途に入れた方が良いことが多いです。
その場合でも万一の場合に対応できるだけの能力を持っていることは信頼性という観点からもフルスタックエンジニアには必要なことです。
フルスタックエンジニアの実態は?
フルスタックエンジニアは全ての部分を自分1人で行うので仕事量は必然的に多くなります。ですので、激務となることもあります。
ですが、IT系の職種で「激務な時期が全くない」職種など無いのです。そういった意味では「普通のIT職種並みの激務が発生することはある」と考えておいて下さい。
しかしフルスタックエンジニアは全ての内容を心得ているので他のメンバーと情報共有しながら共同作業をする必要がありません。これは開発時においてもトラブル発生時においても非常に楽であることを実感できると思います。
要は「他のメンバーに説明する時間」も「他のメンバーの作業状況を確認する必要」もないのです。要は自分の頭の中だけで整理して取り掛かれば良く、これは目に見えない大きなメリットです。
その一方、自分の判断が間違いないかどうかをチェックしてくれる人がいない、と言うデメリットもあります。ですので「2人いる」と非常に有難いのです。
もし1人で全てをやる、となると、万一、その1人が病気になったら完全に止まってしまいます。ですので、フルスタックエンジニアは「1人で全てが出来る」必要がありますが、フューエルセーフ的な観点から見ると2人でやった方が良いのです。
完全に1人では風邪で高熱が出ている時でも休めなくなってしまいます。2人にすることで相談ができ、思わぬ見落としを防ぐことができ、手分けして作業できるなど利点は飛躍的に増えるのです。
会社側としても1人分の人件費増よりもシステムの安全性、安定性を優先させます。もし、1人しかいないと「その人がいなくなったら、どうしようもなくなってしまう」からです。
もし1人で全てをやらなければならなくなったら、万一の場合を考え会社側に「もう1人入れて欲しい」旨を伝えておくことをお勧めします。それは会社のためにもなることなのです。
会社側の視点から見た場合、これまでのような多人数のシステム開発で発生する莫大な費用と莫大な手間が大幅に簡略化されることは、とても大きなメリットです。
また「性能保証付きの既製品部品」を使うことによる一定以上の品質保証があることは、とても心強いものです。背後に大きな土台があるので出来ることであり、それは近年になって、やっと実現したものなのです。
フルスタックエンジニア | |
---|---|
メリット | ・情報共有がないから仕事に集中できる ・人件費が抑えられる |
デメリット | ・仕事量は多い ・ミスを確認する人がいない ・自分が休んだら開発も止まる |
まだ決して認知度が高いとは言えないフルスタックエンジニアですが、これから急激にその存在意義は高まっていくでしょう。
フルスタックエンジニアの年収
1人で何人分もの仕事をするのだから、当然、年収も高いだろうと考えがちですがフルスタックエンジニアといえど「会社員の1人」ですので、その会社の給与規定に基づいた給与になってしまうのは致し方ありません。
つまり社員として働く限り他の社員と段違いの差が付く事はあまり無い、と考えておいた方が良いです。
また「フルスタックエンジニア」は他のIT職種と比べ認知度がまだ、あまり高くありませんので「フルスタックエンジニアの年収」という形で平均的な数値を集めることも難しいのが現状です。
ですがフルスタックエンジニアはユーザーから見ると「システムについて何かあれば相談する相手」ですので、従来職種としては「プロジェクトマネージャー」と同等の役割を果たしている、と言えます。
そして2021年の厚生労働省の賃金構造基本統計調査によるとプロジェクトマネージャーの平均年収は690万円となっています。全職種平均が436万円ですので、相当に高額な給与と言えるでしょう。
更に年収を年齢別に見ると以下のようになっています。
年齢 | 平均年収 |
---|---|
25-29歳 | 615万円 |
30-34歳 | 661万円 |
40-45歳 | 721万円 |
50-54歳 | 762万円 |
会社側から見ると、フルスタックエンジニアはプロジェクトマネージャーよりも有意義な人材ですので、フルスタックエンジニアという職種の認知度が高まれば、プロジェクトマネージャーと同等レベルか、それ以上の高給も期待できそうです。
フルスタックエンジニアに必要なスキル
プログラミングに関するスキル
フルスタックエンジニアは、フロントエンド・バックエンド・インフラといった部分のシステム開発と保守を担当しますので、プログラミングのスキルが必要です。
先述しましたように、これらの担当部における使用言語は異なりますので複数のプログラム言語を習得しておく必要があります。
OS・ミドルウェアに関するスキル
フロントエンド、アプリが動作する環境はWindows、macOS、Linuxといったところが主要なOSです。
- Windows
- macOS
- Linux
従って、これらのOS上での開発スキルが必要です。
また、データベース操作のためのミドルウェアを使いこなすスキルがバックエンドでは必要となります。
近年ではデータ漏洩やセキュリティ強化の観点からデータベースへのアクセスはWeb3層アプリケーションという手法が使われることも多いですので、こういった手法もマスターしておく必要があります。
クラウドサービスに関するスキル
フルスタックエンジニアという職種が出てきたのはクラウドサービスというシステムの土台を提供してくれるサービスの普及がきっかけです。
ですので、フルスタックエンジニアにとってクラウドサービスの知識は必須となります。そして、どこまでクラウドサービスを使いこなせるかがフルスタックエンジニアのスキル指標になるといっても過言ではないでしょう。
クラウドサービスはSaaS・PaaS・IaaSに分けられますがサービス、実行環境、インフラは、それぞれで異なります。
そして、システムの内容によって、どれを使うべきかが決まります。ですので、フルスタックエンジニアは、これらのクラウドサービスの違い、特徴、適応内容、適応環境を知っていなければなりません。
そして「どのクラウドサービスでも使いこなせるスキル」が求められます。
今、現在の業務内容に適したクラウドサービスの知識は当然、必要ですが将来的に会社が他業務に進出する、となった場合、新たなシステムが必要とされます。
その時に最も適切なクラウドサービスを選択できる能力がフルスタックエンジニアには必要なのです。
フルスタックエンジニアになるには?
エンジニアとして基本的な経験を積む
まず、プログラマーとして一人前になりましょう。コーディングや単体テストなどを行いプログラミングスキルを身に付けるのです。
フルスタックエンジニアはプログラムを作ることが多いので、まず、これができるようになれなければいけません。
この作業を通じてデータベースの操作知識やネットワークの基礎知識も身に付けられるでしょう。
そしてプログラマーとして経験を積んだら、上流工程の成果物(基本設計書等)から詳細設計書を作る作業も経験しましょう。
システム開発で下流工程を担当するプログラマーの経験は、フルスタックエンジニアには絶対に必要なスキルです。
クラウドサービスやOSに関するスキルを身に付ける
AmazonのAWSやMicrosoftのAzure、GoogleのGCPなどのクラウドサービスの知識を学びましょう。
- AWS
- Azure
- GCPなど
現在ではプログラマーの段階で、これらの知識が要求されることも珍しくありませんが、一部分だけでなく全体像を把握するように努めて下さい。部分的な理解では不十分です。全体像を理解するためには、きちんとした講習を受ける必要性があることを認識して下さい。
クラウドサービスのスキルは、フルスタックエンジニアにとって最も重要な知識です。これは経験だけで済ますのではなく、各クラウドサービスで行っているレベル認定試験の上位レベルを目指す勉強をし合格を得るレベルまで頑張る必要があります。
またOSにおいてはLinuxの知識がカギとなります。Windows、MacOSは端末のOSとして普及度が高いこともあり比較的簡単に学ぶ機会がありますがLinuxは学ぶ機会が少ないのです。
しかしフルスタックエンジニアにとってLinuxの知識は予想以上に重要です。なぜならサーバー用のOSはLinuxの方がWindowsより圧倒的に多数派であり実績もあるからです。
インフラエンジニアにとってLinuxは必修科目です。ですのでインフラも扱うフルスタックエンジニアも同様であることを覚えて置いて下さい。
上流工程の経験を積む
フルスタックエンジニアは1人で全てができなければなりませんので、当然、顧客、ユーザーとの協議の場である要件定義も出来なければなりません。
そして上流工程の成果物である要件定義書、基本設計書、論理DB設計書などが作成できるスキルも必要です。
- 要件定義書
- 基本設計書
- 論理DB設計書
そして、それらを正しく作るには論理的思考能力とコミュニケーション能力が非常に重要となります。
上流工程を担当できるシステムエンジニアは決して多くはなく、長年やっていれば「いつかはやらせてもらえる」ような性質のものでもありません。
顧客、ユーザーと同等レベルの業務知識が無ければ出来ない作業であり、論理的思考能力とコミュニケーション能力が十分でないと不可能な作業だからです。この工程は本で勉強する知識より、あなたの「人間力」が試される工程なのです。
フルスタックエンジニアは「プロジェクトマネージャー」と同等レベルの高給をもらえるのは、上流工程が担当できるから、といっても過言ではありません。
この工程をこなせるかどうか、がフルスタックエンジニアになれるかどうかの分かれ目であると言って良いでしょう。
フルスタックエンジニアの将来性
日本の大企業では従来型の大型プロジェクト進行方式が今だに続いている所も多いので、体制的に簡単にはフルスタックエンジニアによる軽量体制には移行できない傾向があります。
しかし、これから起業する、というベンチャー起業ではフルスタックエンジニアによる軽量型のシステム構築が既に多くなってきています。
少子高齢化が進む日本では、いずれ従来型の大人数によるシステム開発は減ってくることになるでしょう。経済規模が縮小してしまったらコストがかかる大規模型の開発は予算的に無理になってしまうからです。
ですので、いずれは多くの起業でフルスタックエンジニアによる軽量開発、軽量運用保守という体制にならざるを得ないと考えられます。
また経済規模が縮小しなくても「より安く済む方法」が有るのであれば、段々と、そちらに移行していくのは必然的な流れと考えて良く、どんなフェーズでもこなせるフルスタックエンジニアは「とても重宝な人材」であり、中規模、小規模開発では中心的な役割を受け持つことができる重要な人材になるでしょう。
フルスタックエンジニアの将来性はスキルの多様性という点から見ても大いに明るいと言って間違いないのです。
まとめ
フルスタックエンジニアは、これから非常に有望な職種ですが、なるには相当な勉強と経験が必要だということはお分かり頂けたと思います。
しかし、仮にフルスタックエンジニアになれなくても、そのための勉強は決して無駄にはなりません。複数の言語習得、ネットワークの知識、サーバーの知識、フレームワークの知識、クラウドサービスの知識、どれも重要な知識ばかりだからです。
どれか1つか2つでも身に付ければ普通のプログラマー、システムエンジニアよりは高いスキルを身に付けたといえるでしょう。それはきっと、あなたに新しい道を切り開いてくれます。
仮に転職するにしても、こういったスキルがあれば非常に有利であることはお分かり頂けると思います。
フルスタックエンジニアを目指すのは難しいことですが、そのための努力はあなたに何かをもたらしてくれます。
IT業界は日進月歩で進んで行きますので、常に新しいスキルを求め続ける姿勢が身に付いていることは、それだけで「貴重な人材」と言えるでしょう。
フルスタックエンジニアというのは、そういう意味でも「目指して損はない職種」と言えるのです。